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

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

現(xiàn)在可以看到,默認(rèn)的容忍度時(shí)間是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 驗(yàn)證驅(qū)逐時(shí)間
修改完kube-apiserver的啟動參數(shù)后,只對新增容器有效,存量容器需要重啟后生效:


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



結(jié)果符合預(yù)期(可能有微小誤差):
時(shí)間 | 動作 |
10:34:20 | 節(jié)點(diǎn)關(guān)機(jī) |
10:35:11 | 節(jié)點(diǎn)NotReady |
10:36:10 | 驅(qū)逐容器 |
三、擴(kuò)展
有關(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ū)逐操作邏輯時(shí), 基于此標(biāo)志所設(shè)置的節(jié)點(diǎn)個(gè)數(shù)閾值來判斷所在集群是否為大規(guī)模集群。 當(dāng)集群規(guī)模小于等于此規(guī)模時(shí), --secondary-node-eviction-rate 會被隱式重設(shè)為 0。 注意:如果節(jié)點(diǎn)位于多個(gè)區(qū)域中,則此閾值將被每個(gè)區(qū)域視為區(qū)域節(jié)點(diǎn)大小閾值,以獨(dú)立確定節(jié)點(diǎn)驅(qū)逐率。 |
--node-eviction-rate float 默認(rèn)值:0.1 | 當(dāng)某區(qū)域健康時(shí),在節(jié)點(diǎn)故障的情況下每秒刪除 Pods 的節(jié)點(diǎn)數(shù)。 請參閱 --unhealthy-zone-threshold 以了解“健康”的判定標(biāo)準(zhǔn)。 這里的區(qū)域(zone)在集群并不跨多個(gè)區(qū)域時(shí)指的是整個(gè)集群。 |
--secondary-node-eviction-rate float32 默認(rèn)值:0.01 | 當(dāng)一個(gè)區(qū)域不健康造成節(jié)點(diǎn)失效時(shí),每秒鐘從此標(biāo)志所給的節(jié)點(diǎn)上刪除 Pod 的節(jié)點(diǎn)個(gè)數(shù)。 參見 --unhealthy-zone-threshold 以了解“健康與否”的判定標(biāo)準(zhǔn)。 在只有一個(gè)區(qū)域的集群中,區(qū)域指的是整個(gè)集群。如果集群規(guī)模小于 --large-cluster-size-threshold 所設(shè)置的節(jié)點(diǎn)個(gè)數(shù)時(shí), 此值被隱式地重設(shè)為 0。 |
四、總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Kubernetes 中容器跨主機(jī)網(wǎng)絡(luò)
這篇文章主要為大家介紹了Kubernetes中容器跨主機(jī)網(wǎng)絡(luò)是怎么樣的,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
centos搭建k8s環(huán)境詳細(xì)步驟及常用命令
kubernetes是google開源的容器集群管理系統(tǒng),提供應(yīng)用部署、維護(hù)、擴(kuò)展機(jī)制等功能,利用kubernetes能方便管理跨集群運(yùn)行容器化的應(yīng)用,這篇文章主要給大家介紹了關(guān)于centos搭建k8s環(huán)境詳細(xì)步驟及常用命令的相關(guān)資料,需要的朋友可以參考下2024-01-01
Rainbond的ServiceMesh架構(gòu)組件端口沖突處理解決
這篇文章主要大家介紹了Rainbond?ServiceMesh架構(gòu)組件端口沖突處理方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
php redis擴(kuò)展支持scan命令實(shí)現(xiàn)方法
這篇文章主要介紹了php redis擴(kuò)展支持scan命令實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-10-10

