節點健康檢測
意義
在K8S集群運行的程序中,節點常常會因為運行時組件的問題、內核死鎖、資源不足等各種各樣的原因不可用,Kubelet默認對節點的PIDPressure、MemoryPressure、DiskPressure等資源狀態進行了監控,但是當Kubelet上報這些狀態的時候,節點很可能已經長時間處于不可用狀態了,并且Kubelet可能已經開始了驅逐Pod的操作,所以原生K8S對節點健康的檢測機制在一些場景下是不完善的,我們需要能夠在節點出現問題之前提前發現,并且需要更加細致化的指標來描述節點的健康狀態并且采取相應的恢復策略,實作智能運維,節省開發和運維人員的負擔,
Node-Problem-Detector
NPD(Node-Problem-Detector) 是Kubernetes社區開源的集群節點的健康檢測組件,NPD提供了通過正則匹配系統日志或檔案來發現節點例外的功能,用戶可以通過自己的運維經驗,配置可能產生例外問題日志的正則運算式,選擇不同的上報方式,NPD會決議用戶的組態檔,當有日志能匹配到用戶配置的正則運算式時,可以通過NodeCondition、Event或Promethues Metric等方式將檢測到的例外狀態上報,除了日志匹配功能,NPD還給接受用戶自己撰寫的自定義檢測插件,用戶可以開發自己的腳本或可執行檔案集成到NPD的插件中,讓NPD定期執行檢測程式,
TKE中的節點健康檢測
在TKE中通過擴展組件的形式集成了NPD,并且對NPD的能力做了增強,稱為NodeProblemDetectorPuls(NPDPlus)擴展組件,用戶可以對已有集群一鍵部署NPDPlus擴展組件,也可以在創建集群的時候選擇在創建集群的同時部署NPDPlus,在騰訊云容器團隊長期運營運維K8S集群的經驗中,提取了一些可以通過特定形式發現節點例外的指標,并且把其中的一些指標集成在了NPDPlus中,例如在NPDPlus容器中檢測Kubelet和Docker的systemd狀態,以及檢測主機的檔案描述符和執行緒數壓力等,具體指標如下所示:

TKE使用NPDPlus的目的是能夠提前發現節點可能不可用狀態,而不是當節點已經不健康后再上報狀態,當用戶在TKE集群中部署了NPDPlus后,使用命令 kubectl describe node 會發現多出了很多Node Condition,如FDPressure表示該節點上已經使用的檔案描述符數量是否已經達到機器允許最大值的80%;ThreadPressure表示節點上的執行緒數是否已經達到機器允許的90%等等,用戶可以監控這些Condition,當例外狀態出現時,提前采取規避策略,
同時,K8S目前認為節點NotReady的機制依賴于kube-controller-manager的引數設定,當節點網路完全不通的情況下K8S很難在秒級別發現節點的例外,這在一些場景下(如直播、在線會議等)是不能接受的,針對這種場景,NPDPlus中繼承了分布式節點健康檢測功能,可以在秒級快速地檢測節點網路狀態,以及是否能與其他節點相互通信,同時不依賴與K8S master組件的通信,此功能的實作原理和功能會在之后的文章中詳細介紹,
節點自愈
采集節點的健康狀態是為了能夠在業務Pod不可用之前提前發現節點例外,從而運維或開發人員可以對Docker、Kubelet或節點進行修復,在NPDPlus中,為了減輕運維人員的負擔,提供了根據采集到的節點狀態從而進行不同自愈動作的能力,集群管理員可以根據節點不同的狀態配置相應的自愈能力,如重啟Docker、重啟Kubelet或重啟CVM節點等,同時為了防止集群中的節點雪崩,在執行自愈動作之前做了嚴格的限流,防止節點大規模重啟,同時為了防止集群中的節點雪崩,在執行自愈動作之前做了嚴格的限流,具體策略為:
- 在同一時刻只允許集群中的一個節點進行自愈行為,并且兩個自愈行為之間至少間隔1分鐘
- 當有新節點添加到集群中時,會給節點2分鐘的容忍時間,防止由于節點剛剛添加到集群的不穩定性導致錯誤自愈
- 當節點觸發重啟CVM自愈動作后還處于例外狀態時,則在3小時之內此節點不再執行任何自愈動作
NPDPlus會將執行過的所有自愈動作記錄在Node的Event中,方便集群管理員了解在Node上發生的事件,

使用指南
-
登錄騰訊云容器服務控制臺,點擊想要創建NPDPlus的集群,
-
點擊集群詳情頁左側的組件管理,在組件管理中選中NodeProblemDetectorPlus(節點例外檢測Plus),
-
配置NodeProblemDetectorPlus引數,可以選擇根據特定節點的狀態執行不同的自愈動作,
-
選擇確定,點擊完成即可一鍵創建,

-
在集群的組建管理中查看到NPDPlus運行中說明NPDPlus運行成功:

【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/172573.html
標籤:其他
上一篇:Java 集合看這一篇就夠了

