1. 程式人生 > >K8S節點異常怎麼辦?TKE"節點健康檢查和自愈"來幫忙

K8S節點異常怎麼辦?TKE"節點健康檢查和自愈"來幫忙

## 節點健康檢測 ### 意義 在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狀態,以及檢測主機的檔案描述符和執行緒數壓力等。具體指標如下所示: ![](https://img2020.cnblogs.com/other/2041406/202010/2041406-20201015104304483-27861766.png) 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上發生的事件。 ![](https://img2020.cnblogs.com/other/2041406/202010/2041406-20201015104304854-1886097220.png) ## 使用指南 1. 登入騰訊雲容器服務控制檯,點選想要建立NPDPlus的叢集。 2. 點選叢集詳情頁左側的元件管理,在元件管理中選中NodeProblemDetectorPlus(節點異常檢測Plus)。 3. 配置NodeProblemDetectorPlus引數,可以選擇根據特定節點的狀態執行不同的自愈動作。 4. 選擇確定,點選完成即可一鍵建立。 ![](https://img2020.cnblogs.com/other/2041406/202010/2041406-20201015104305128-1307388244.png) 5. 在叢集的組建管理中檢視到NPDPlus執行中說明NPDPlus執行成功: ![](https://img2020.cnblogs.com/other/2041406/202010/2041406-20201015104305354-1505028508.png) >【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!! ![](https://img2020.cnblogs.com/other/2041406/202010/2041406-20201015104305730-1982356