節(jié)點NotReady后容器驅(qū)逐時間調(diào)整方式
一、簡介
早期k8s版本中,Kubernetes Controller Manager 有一些相關(guān)參數(shù),用于控制節(jié)點監(jiān)控和 Pod 驅(qū)逐的行為。
- --node-monitor-grace-period=40s(節(jié)點失聯(lián)后等待多久才標(biāo)記為不健康)
- --node-monitor-period=30s(Controller Manager 檢查節(jié)點狀態(tài)的頻率)
- --pod-eviction-timeout=5m0s(節(jié)點標(biāo)記為不健康后,等待多久才開始驅(qū)逐 Pod)
但是在k8s 1.20版本后,節(jié)點失聯(lián)后 Pod 的驅(qū)逐邏輯已完全由 基于污點的驅(qū)逐 (Taint Based Evictions) 機制接管。完全廢棄了--pod-eviction-timeout參數(shù)。
參考官方鏈接:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/

接下來,我們測試一下,看看是否有效。
二、驗證
2.1 先創(chuàng)建一個測試用例

現(xiàn)在可以看到,默認(rèn)的容忍度時間是300秒。
2.2 修改kube-apiserver的啟動參數(shù)
vim /etc/kubernetes/manifests/kube-apiserver.yaml #添加以下啟動參數(shù) - --default-not-ready-toleration-seconds=60 - --default-unreachable-toleration-seconds=60

#重啟kube-apsierver容器
mv kube-apiserver.yaml /tmp/
mv /tmp/kube-apiserver.yaml .
#檢查容器是否正常啟動
docker ps|grep apiserver
docker logs ${docker_id}
kubectl get pod -n kube-system -o wide|grep kube-apiserver
2.3 驗證驅(qū)逐時間
修改完kube-apiserver的啟動參數(shù)后,只對新增容器有效,存量容器需要重啟后生效:


接下來咱們模擬node節(jié)點故障,觸發(fā)節(jié)點驅(qū)逐:



結(jié)果符合預(yù)期(可能有微小誤差):
時間 | 動作 |
10:34:20 | 節(jié)點關(guān)機 |
10:35:11 | 節(jié)點NotReady |
10:36:10 | 驅(qū)逐容器 |
三、擴展
有關(guān)于pod驅(qū)逐的效率可以參考kube-controller-manager的啟動參數(shù),官方鏈接:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/
相關(guān)參數(shù):
參數(shù) | 含義 |
--large-cluster-size-threshold int32 默認(rèn)值:50 | node-lifecycle-controller 在執(zhí)行 Pod 驅(qū)逐操作邏輯時, 基于此標(biāo)志所設(shè)置的節(jié)點個數(shù)閾值來判斷所在集群是否為大規(guī)模集群。 當(dāng)集群規(guī)模小于等于此規(guī)模時, --secondary-node-eviction-rate 會被隱式重設(shè)為 0。 注意:如果節(jié)點位于多個區(qū)域中,則此閾值將被每個區(qū)域視為區(qū)域節(jié)點大小閾值,以獨立確定節(jié)點驅(qū)逐率。 |
--node-eviction-rate float 默認(rèn)值:0.1 | 當(dāng)某區(qū)域健康時,在節(jié)點故障的情況下每秒刪除 Pods 的節(jié)點數(shù)。 請參閱 --unhealthy-zone-threshold 以了解“健康”的判定標(biāo)準(zhǔn)。 這里的區(qū)域(zone)在集群并不跨多個區(qū)域時指的是整個集群。 |
--secondary-node-eviction-rate float32 默認(rèn)值:0.01 | 當(dāng)一個區(qū)域不健康造成節(jié)點失效時,每秒鐘從此標(biāo)志所給的節(jié)點上刪除 Pod 的節(jié)點個數(shù)。 參見 --unhealthy-zone-threshold 以了解“健康與否”的判定標(biāo)準(zhǔn)。 在只有一個區(qū)域的集群中,區(qū)域指的是整個集群。如果集群規(guī)模小于 --large-cluster-size-threshold 所設(shè)置的節(jié)點個數(shù)時, 此值被隱式地重設(shè)為 0。 |
四、總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Kubernetes(K8S)中強制刪除命名空間的實現(xiàn)方式
本文介紹了在Kubernetes中刪除處于Terminating狀態(tài)的命名空間mysql-operator的步驟,包括檢查并清理殘留資源、強制刪除命名空間等方法2026-01-01
云原生要素配置分離ConfigMap創(chuàng)建方式
這篇文章主要為大家介紹了云原生要素配置分離ConfigMap以及多種創(chuàng)建方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-03-03

