1. 程式人生 > 其它 >k8s驅逐篇(5)-kube-controller-manager驅逐

k8s驅逐篇(5)-kube-controller-manager驅逐

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汙點驅逐,tainttoleration才會發揮作用;

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:匹配node汙點的Effect;
(5)TolerationSeconds:node汙點容忍時間;

配置示例:

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600

上述配置表示如果該pod正在執行,同時一個匹配的汙點被新增到其所在的node節點上,那麼該pod還將繼續在節點上執行3600秒,然後會被驅逐(如果在此之前其匹配的node汙點被刪除了,則該pod不會被驅逐);