写点什么

controller-manager 的主动驱逐

用户头像
Geek_f24c45
关注
发布于: 2020 年 08 月 31 日

k8s 的驱逐主要包括两个方面:


  1. 节点资源不足时,kubelet 发生被动的驱逐,驱逐的单位是 POD,按照 POD 的 QOS 排序,逐个驱逐,直到资源水位到达健康。

  2. 节点状态不对时,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 会启动多个循环独立的完成各部分的工作;其中一个比较重要的就是健康检查,


流程如上图所示:


  1. 健康检查 work , 以 --node-monitor-grace-period 为周期,检查所有 Node 的状态

  2. 驱逐的速率等条件是在每个 Zone 里面,独立决定的

  3. 集群大小的概念指的是 Zone 的大小

  4. 不健康 Zone 时,下降速度和集群 Zone 的大小有关系

  5. 当一个 Zone 逐步失效时,驱逐的速率可能经历 --node-eviction-rate --->> 低速 (--secondary-node-eviction-rate 或者 0) -----> --node-eviction-rate

  6. 速率的控制是通过控制一个限速队列实现的,队列对端的 work 则取出,打上 Node 的污点

  7. 所有区所有节点全部健康时,怎驱逐速率会将为 0

  8. 当有 Node 不健康时,其上所有的 POD 的 Ready 状态会为 False,该 POD 对应的 Endpoint 也会下线,Service 层 将发现不了该 POD



污点处理的 work,则会关注具有 Not-Ready 污点的 Node,根据各自 POD 对 Not-Ready 污点的容忍时间,设置删除 POD 的定时器,如果中途 Node 的污点消失了,其上的定时器则会清理掉!POD 的污点容忍时间,可由 POD 模版自定义,默认情况下由 DefaultTolerationSeconds 插件,设置成 300s


用户头像

Geek_f24c45

关注

还未添加个人签名 2018.03.24 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
文章被置顶了,请添加下封面图,更美观也有利于点击~
2020 年 09 月 01 日 10:07
回复
没有更多了
controller-manager的主动驱逐