controller-manager 的主动驱逐
k8s 的驱逐主要包括两个方面:
节点资源不足时,kubelet 发生被动的驱逐,驱逐的单位是 POD,按照 POD 的 QOS 排序,逐个驱逐,直到资源水位到达健康。
节点状态不对时,controller-manager 的主动驱逐,驱逐的单位是 NODE,NODE 不健康,该 NODE 上的所有 POD 都将被驱逐。
这里只讨论 controller-manager 主动驱逐的情况。
controller-manager 涉及驱逐的参数配置如下:
--enable-taint-manager 启用基于污点的驱逐管理策略, 默认 true
--large-cluster-size-threshold 判断 Zone 是大集群,或者小集群的标准,注意这里说的是 Zone
--node-eviction-rate Zone 健康时,每秒驱逐 Node 的速率,默认 0.1
--unhealthy-zone-threshold 判断 Zone 是否健康的标准,超过该比例则不健康,默认 55%
--secondary-node-eviction-rate Zone 是大集群时,不健康状态下的驱逐速度 默认 0.01
--node-monitor-grace-period 循环判断 Node 状态的周期,默认 40s
--node-startup-grace-period 当 Node 首次出现时,给予的启动时间,该时间段内不检查 Node 状态
--pod-eviction-timeout 当 Node 不健康该时间后,开始驱逐。默认 5m, 在开启污点驱逐管理时,该参数无效
node_life_controller 会启动多个循环独立的完成各部分的工作;其中一个比较重要的就是健康检查,
流程如上图所示:
健康检查 work , 以 --node-monitor-grace-period 为周期,检查所有 Node 的状态
驱逐的速率等条件是在每个 Zone 里面,独立决定的
集群大小的概念指的是 Zone 的大小
不健康 Zone 时,下降速度和集群 Zone 的大小有关系
当一个 Zone 逐步失效时,驱逐的速率可能经历 --node-eviction-rate --->> 低速 (--secondary-node-eviction-rate 或者 0) -----> --node-eviction-rate
速率的控制是通过控制一个限速队列实现的,队列对端的 work 则取出,打上 Node 的污点
所有区所有节点全部健康时,怎驱逐速率会将为 0
当有 Node 不健康时,其上所有的 POD 的 Ready 状态会为 False,该 POD 对应的 Endpoint 也会下线,Service 层 将发现不了该 POD
污点处理的 work,则会关注具有 Not-Ready 污点的 Node,根据各自 POD 对 Not-Ready 污点的容忍时间,设置删除 POD 的定时器,如果中途 Node 的污点消失了,其上的定时器则会清理掉!POD 的污点容忍时间,可由 POD 模版自定义,默认情况下由 DefaultTolerationSeconds 插件,设置成 300s
评论 (1 条评论)