Pod 容器的探针(健康检查) 3 种
存活探针(livenessProbe)探测容器是否正常运行。如果探测失败则Kubelet杀掉容器(Pod会根据重启策略决定是否重启)
就绪探针(readinessProbe)探测Pod是否能进入ready状态(比如ready状态栏变成1/1),并做好接收请求的准备。如果探测失败则Pod会变成notready状态(比如ready状态栏变成0/1),service会删除所关联的端点(endpoint),并且不再转发请求给就绪探测失败的Pod
启动探针(startupProbe)探测容器内的应用是否启动成功。在启动探测成功之前,存活探针和就绪探针都会暂时处于禁用状态,直到启动探测成功
探针的探测方式 3 种
exec :通过command字段设置在容器内执行的Linux命令来进行探测,如果命令返回码为0,则认为探测正常,如命令返回码为非0则认为探测失败
tcpSocket :通过向容器的指定端口发送tcp三次握手连接请求。如果端口正确且tcp连接成功,则认为探测正常,如tcp连接失败则探测失败
httpGet :通过向容器的指定端口和URL路径发起HTTP GET请求。如果HTTP响应返回状态码为2XX 3XX则认为探测正常,如响应返回状态码为4XX 3XX则认为探测失败
探针参数
initialDelaySeconds :设置容器启动后延迟几秒后开始探测
periodSeconds :每次探测的间隔时间(秒数)
failureThreshold :探测连续失败几次后判断探测失败
timeoutSeconds : 探测超时等待时间(秒数)
Pod 应用容器生命周期的启动动作和退出动作
spec.containers.lifecycle.postStart 配置 exec.command 字段设置 Pod 中的应用容器启动时额外的命令操作
spec.containers.lifecycle.preStop 配置 exec.command 字段设置删除 Pod 时应用容器退出前执行的命令操作
K8S是通过 List-Watch 机制实现每个组件的协作
controller-manager ,scheduler ,kubelet 通过 List-Watch 机制监听 apiserver 发出的事件,apiserver 通过 List-Watch 机制监听 etcd 发出的事件
scheduler的调度策略
预选策略 :根据调度算法过滤掉不满足条件的Node节点,如果没有满足条件的Node节点,Pod会处于Pending状态,直到有符合条件的Node节点出现
优选策略 :根据优先级选项为满足条件的Node节点进行优先级权重排序,最终选择优先级最高的Node节点来调度Pod
Pod 调度到指定Node节点
1、nodeName 指定Node节点名称
2、nodeSelector 指定Node节点的标签
常用kubectl命令
kubectl get 资源类型 --show-labels
kubectl get 资源类型 -l 标签key[=标签值]
kubectl label 资源类型 资源名称 标签key=标签value #添加一个标签
kubectl label 资源类型 资源名称 标签key=标签value --overwrite #更改标签
kubectl label 资源类型 资源名称 标签key- #删除标签
yaml中 - 代表列表
亲和性
节点亲和:匹配指定Node节点的标签,将pod调度到满足指定条件的node节点上
pod亲和/反亲和
硬策略:要强制性的满足指定的条件,如果没有满足条件的node节点,pod会处于pending状态,知道有符合条件的node节点出现
软策略:非强制性的,会优先选择满足的node节点调度,即使没有满足条件的node节点,pod依然会完成调度
如果硬策略和软策略同时存在,则有要先满足硬策略,之后软策略会从满足应策略的node节点中优先选择满足软策略的node结点调度
pod的亲和:匹配指定的pod标签,将要部署的pod调度到与指定pod所在的node节点处于同一个拓扑域上的node节点
反亲和:匹配指定的pod标签,将要部署的pod调度到与指定pod所在的node节点处于不同一个拓扑域上的node节点
拓扑域怎么判定,是否在同一个拓扑域?
看topologuKey(拓扑域key),如果有其他node节点拥有与指定pod所在的node节点拥有相同的拓扑域键和值的标签,那么他们就在同一个拓扑域中