天天看點

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狀态,以及檢測主機的檔案描述符和線程數壓力等。具體名額如下所示:

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

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上發生的事件。

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

使用指南

  1. 登入騰訊雲容器服務控制台,點選想要建立NPDPlus的叢集。
  2. 點選叢集詳情頁左側的元件管理,在元件管理中選中NodeProblemDetectorPlus(節點異常檢測Plus)。
  3. 配置NodeProblemDetectorPlus參數,可以選擇根據特定節點的狀态執行不同的自愈動作。
  4. 選擇确定,點選完成即可一鍵建立。
    K8S節點異常怎麼辦?TKE“節點健康檢查和自愈“來幫忙
  5. 在叢集的組建管理中檢視到NPDPlus運作中說明NPDPlus運作成功:
    K8S節點異常怎麼辦?TKE“節點健康檢查和自愈“來幫忙
【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公衆号,及時擷取更多幹貨!!
K8S節點異常怎麼辦?TKE“節點健康檢查和自愈“來幫忙

繼續閱讀