如何将kube-controller-manager的驱逐过程为?

摘要:kube-controller-manager驱逐主要依靠NodeLifecycleController以及其中的TaintManager;开启了污点驱逐:node上有NoExecute污点后,立马驱逐不能容忍污点的pod,对于能容忍该污点
kube-controller-manager驱逐 概述 kube-controller-manager驱逐主要依靠NodeLifecycleController以及其中的TaintManager; kube-controller-manager驱逐分类 (1)开启了污点驱逐:node上有NoExecute污点后,立马驱逐不能容忍污点的pod,对于能容忍该污点的pod,则等待pod上配置的污点容忍时间里的最小值后,pod会被驱逐; (2)未开启污点驱逐:当node的ready Condition值为false或unknown且已经持续了一段时间(通过kcm启动参数--pod-eviction-timeout配置,默认5分钟)时,对该node上的pod做驱逐操作; NodeLifecycleController NodeLifecycleController主要负责以下工作: (1)定期检查node的心跳上报,某个node间隔一定时间都没有心跳上报时,更新node的ready condition值为false或unknown,开启了污点驱逐的情况下,给该node添加NoExecute的污点; (2)未开启污点驱逐时的pod驱逐工作; (3)根据kcm启动参数配置,决定是否启动TaintManager; TaintManager TaintManager负责pod的污点驱逐工作,当node上有NoExecute污点后,立马驱逐不能容忍污点的pod,对于能容忍该污点的pod,则等待pod上配置的污点容忍时间里的最小值后,pod会被驱逐; kcm驱逐相关参数配置 (1)--pod-eviction-timeout:默认值5分钟,当不开启污点驱逐时该参数起效,当node的ready condition值变为false或unknown并持续了5分钟后,将驱逐该node上的pod; (2)--enable-taint-manager:默认值true,代表启动taintManager,当已经调度到该node上的pod不能容忍node的 NoExecute污点时,由TaintManager负责驱逐此类pod,若为false即不启动taintManager,则根据--pod-eviction-timeout来做驱逐操作; (3)--feature-gates=TaintBasedEvictions=xxx:默认值true,配合--enable-taint-manager共同作用,两者均为true,才会开启污点驱逐; (4)--node-monitor-grace-period:默认值40秒,代表在距离上一次上报心跳时间超过40s后,将该node的conditions值更新为unknown(kubelet通过更新node lease来上报心跳); (5)--feature-gates=NodeLease=xxx:默认值true,使用lease对象上报node心跳信息,替换老的更新node的status的方式,能大大减轻apiserver的负担; 更多其他配置参数会在后面做源码分析时进行分析; kcm污点驱逐 需要配置kcm相关的参数,来开启kcm污点驱逐,taint和toleration才会发挥作用; taint 给node配置,打了taint的node节点可能会影响pod的调度和运行; taint有三种Effect: (1)PreferNoSchedule:不容忍该污点的pod,调度器kube-scheduler会尽量避免把pod调度到具有该污点的节点上,如果不能避免(如其他节点资源不足等),pod也能调度到具有该污点的节点上,而对于已存在于具有该污点的节点上的pod不会被驱逐; (2)NoSchedule:不容忍该污点的pod一定不会被调度到具有该污点的节点上,而对于已存在于具有该污点的节点上的pod不会被驱逐; (3)NoExecute:不容忍该污点的pod一定不会被调度到具有该污点的节点上,同时会将已调度到该节点上但不容忍该污点的node节点上的pod驱逐掉; toleration 给pod配置,配置了Toleration的pod,根据匹配条件可以容忍node的taint; Toleration配置的属性值解析如下: (1)Key:匹配node污点的Key; (2)Operator:表示Toleration中Key与node污点的Key相同时,其Value与node污点的Value的关系,默认值Equal,代表相等,Exists则代表Toleration中Key与node污点的Key相同即可,不用比较其Value值; (3)Value:匹配node污点的Value; (4)Effect:匹配
阅读全文