kubeconfig文件详解
在node节点上可以执行kubectl命令吗? 12[root@k8s-node1 ~]# kubectl get nodeThe connection to the server localhost:8080 was refused - did you specify the right host or port? localhost:8080 这个端口是k8s api(kube-apiserver非安全端口)的端口,*在master上面可以执行成功其实走的是配置文件。但是在node上连接的是本地的非安全端口。* 其实还有一个对外端口是6443,这个是kube-apiserver监听的,masterip:6443安全端口 12[root@k8s-master ~]# netstat -tpln | grep 6443tcp6 0 0 :::6443 :::* LISTEN 92617/kube-apiserve...
kubeconfig文件详解
Kubectl 安装参考: https://blog.csdn.net/All_Dream_and_you/article/details/124343080 官方文档 kubectl for linux 操作系统:centos7.5命令行: bash 安装 Kubectl123456789101112131415161718#下载安装包 如果需要指定版本 使用版本号替换 $(curl -L -s https://dl.k8s.io/release/stable.txt) 即可curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"#验证可执行文件#下载校验和curl -LO "https://dl.k8s.io/$(curl -L -s...
kubernetes 安装 ingress nginx controller
参考:https://www.cnsre.cn/posts/210902330007 前言Service可能会有很多,如果每个资源都绑定一个 node port的话,主机则需要开放外围的端口进行服务调用,管理上会比较混乱。 比较优雅的方式是通过一个外部的负载均衡器,比如 nginx ,绑定固定的端口比如80,然后根据域名/服务名向后面的Service Ip转发,但是这里对问题在于:当有新服务加入的时候如何修改 Nginx 配置? 手动改或者 Rolling Update Nginx Pod 都是不现实的。 对于这个问题, k8s 给出的七层解决方案是:Ingress ingress-nginxingress nginx 官方网站 ingress nginx 仓库地址 ingress-nginx v1.0 最新版本 v1.0 适用于 Kubernetes 版本 v1.19+ (包括 v1.19 ) Kubernetes-v1.22+ 需要使用 ingress-nginx>=1.0,因为 networking.k8s.io/v1beta 已经移除 直接部署...
kubernetes的master节点挂了对整个集群有什么影响
如果master挂掉,已经在节点上运行起来的pod还是可以继续对外提供服务,但是诸如动态扩展,部署新的服务,pod等与调度和管理相关的工作是干不了的。 k8s集群相关的数据都存储在etcd(一些类似k3s等发行版可存储在mysql/postgre)上,master本身属于无状态服务,k8s支持多master结构来达到HA。
优雅停止(Gracful Shutdown)与 502/504 报错
优雅退出,业务侧需要做的任务是处理SIGTERM信号 如果 Pod 正在处理大量请求(比如 1000 QPS+)时,因为节点故障或「竞价节点」被回收等原因被重新调度,可能会观察到在容器被 terminate 的一段时间内出现少量 502/504。 为了搞清楚这个问题,需要先理解清楚 terminate 一个 Pod 的流程: 123451、Pod 被删除,状态置为 Terminating。kube-proxy 更新转发规则,将 Pod 从 service 的 endpoint 列表中摘除掉,新的流量不再转发到该 Pod。2、如果 Pod 配置了 preStop Hook ,将会执行。3、kubelet 对 Pod 中各个 container 发送 SIGTERM 信号以通知容器进程开始优雅停止。4、等待容器进程完全停止,如果在 terminationGracePeriodSeconds 内 (默认 30s) 还未完全停止,就发送 SIGKILL 信号强制杀死进程。5、所有容器进程终止,清理 Pod 资源。 注意:1和2 两个工作是异步发生的,所以在未设置...
关于Dns解析的一些认识
Kubernetes 中的 DNS在 Kubernetes 中,服务发现有几种方式:①:基于环境变量的方式②:基于内部域名的方式 基本上,使用环境变量的方式很少,主要还是使用内部域名这种服务发现的方式。 其中,基于内部域名的方式,涉及到 Kubernetes 内部域名的解析,而 kubedns,是 Kubernetes 官方的 DNS 解析组件。从 1.11 版本开始,kubeadm 已经使用第三方的 CoreDNS 替换官方的 kubedns 作为 Kubernetes 集群的内部域名解析组件,我们的重点,是 CoreDNS,但是在开始 CoreDNS 之前,需要先了解下 kubedns Kubernetes 中的域名是如何解析的在 Kubernetes 中,比如服务 a 访问服务 b,对于同一个 Namespace下,可以直接在 pod 中,通过 curl b 来访问。对于跨 Namespace 的情况,服务名后边对应 Namespace即可。比如 curl b.default。那么,使用者这里边会有几个问题: ①:服务名是什么?②:为什么同一个 Namespace...
关于cgroup和内存限制
转自: https://cloud.tencent.com/developer/article/1495508 Kubernetes 对内存资源的限制实际上是通过 cgroup 来控制的,cgroup 是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、CPU 和各种设备都有对应的 cgroup。cgroup 是具有层级的,这意味着每个 cgroup 拥有一个它可以继承属性的父亲,往上一直直到系统启动时创建的 root cgroup。关于其背后的原理可以参考:深入理解Kubernetes资源限制:内存。 今天我们将通过实验来探索容器在什么情况下会被 oom-killed。 1. 实验准备首先你需要一个 Kubernetes 集群,然后通过 kubectl 创建一个 Pod,内存限制为 123Mi。 123$ kubectl run --restart=Never --rm -it --image=ubuntu --limits='memory=123Mi' -- shIf you don't see a command prompt,...
关于k8s的资源分配/限制
相关概念引自kubesphere - requests与limits 简介为了实现 K8s 集群中资源的有效调度和充分利用, K8s 采用requests和limits两种限制类型来对资源进行容器粒度的分配。每一个容器都可以独立地设定相应的requests和limits。这 2 个参数是通过每个容器 containerSpec 的 resources 字段进行设置的。一般来说,在调度的时候requests比较重要,在运行时limits比较重要。 一些本地临时存储的配置 **注: ** 当容器申请内存超过limits时会被oomkill,并根据重启策略进行重启。而cpu超过limit则是限流,但不会被kill 由于CPU资源是可压缩的,进程无论如何也不可能突破上限,因此设置起来比较容易。对于Memory这种不可压缩资源来说,它的Limit设置就是一个问题了,如果设置得小了,当进程在业务繁忙期试图请求超过Limit限制的Memory时,此进程就会被Kubernetes杀掉 1234567891011121314# requests:...
各种ip以及固定ip
Cluster IP即Service的IP,通常在集群内部使用Service Name来访问服务,用户不需要知道该IP地址,kubedns会自动根据service name解析到服务的IP地址,将流量分发给Pod。 Service Name才是对外暴露服务的关键。在kubeapi的配置中指定该地址范围。 默认配置 12--service-cluster-ip-range=10.254.0.0/16--service-node-port-range=30000-32767 Pod IPflannel通过配置flannel的network和subnet来实现。 默认配置 12FLANNEL_NETWORK=172.30.0.0/16FLANNEL_SUBNET=172.30.46.1/24 Pod的IP地址不固定,当pod重启时IP地址会变化。 该IP地址也是用户无需关心的。 但是Flannel会在本地生成相应IP段的虚拟网卡,为了防止和集群中的其他IP地址冲突,需要规划IP段。 主机/Node...
定时监控node和pod并发送webhook(wechat)的一个小脚本
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107#!/usr/bin/env bash# 0.定义webhook urlwebhookurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=4b7128c5-0e5a-46f5-b5ef-77dff4eb5c99# 1.定义变量值,namespace不能为空if [ -z "$1" ]; then exit 1else nameSpace=$1fi# 节点cpu限制值(%)cpuVPT=85# 节点mem限制值(%)memVPT=85# pod...
