全部產品
Search
文件中心

Container Service for Kubernetes:ack-node-repairer

更新時間:Jun 19, 2024

當Node Problem Detector(簡稱NPD)組件檢測到節點上的故障並產生節點的事件(Event)或者Condition上報給叢集時,ACK的自愈系統(ACK Node Repairer)會監聽每個節點上的新故障事件,並根據配置對故障節點進行相應的修複操作。本文介紹如何安裝和配置ACK Node Repairer。

前提條件

背景資訊

節點自愈系統預設整合了常見的節點故障以及對應的節點修複操作。當節點出現故障時,自愈系統會自動對故障所在節點觸發相應的修複操作。當故障被修複後,NPD會修改故障狀態,達到故障檢測以及修複的閉環。營運人員也可以自訂需要採取修複操作的故障以及具體的修複操作。

NPD是Kubernetes節點診斷的工具,可以將節點的異常,例如Docker Engine Hang、Linux Kernel Hang、網路出網異常、檔案描述符異常轉換為節點的事件。

安裝ack-node-repairer

使用ACK的自愈系統(ACK Node Repairer)前,您需要安裝ack-node-repairer組件。

  1. 登入Container Service管理主控台,在左側導覽列選擇市場 > 應用市場

  2. 應用市場頁面,搜尋並選中ack-node-repairer。

  3. 在應用詳情頁面,單擊頁面右上方的一鍵部署

  4. 建立面板,選擇叢集和命名空間,然後單擊下一步

  5. 參數配置頁面,選擇最新Chart 版本,在參數地區,設定帳號的AK資訊,然後單擊確定

    AK

    AK資訊設定如下:

    • accessKey:nodeRepairer.accessKey

    • accessSecret:nodeRepairer.accessSecret

配置ack-node-repairer

安裝ACK的自愈系統(ACK Node Repairer)後,ACK Node Repairer會預設開啟目前的版本所支援的所有自愈功能。您可對某個自愈功能進行開關和配置,以下以NTP服務故障為例。

  1. 查看default-node-repairer資源的YAML檔案。

    在安裝ACK自愈系統後,叢集會預設在kube-system命名空間下建立類型為noderepairers.nodes.alibabacloud.com,名為default-node-repairer的資源,該資源定義了自愈系統所監控的節點問題及相應的修複操作。執行以下命令查看YAML檔案中定義的內容。

    kubectl -n kube-system get noderepairers.nodes.alibabacloud.com default-node-repairer -o yaml
  2. 修改default-node-repairer。

    在spec.rules列表中加入用於檢測NTPProblemdetector和對應問題修複的healers,其定義片段如下:

    spec:
      rules:
      # 用於檢測NTPProblem的detector,和對應修複問題的nodeOperation。
      - detector:
          conditionType: NTPProblem
          type: conditionType
          paused: false
        healers:
        - nodeOperation: restart-ntpd
          type: nodejob
    說明

    針對每一種故障情境的自愈,您需要關聯故障的節點Condition與其對應的修複操作。rules.detector.conditionType是叢集中出現的異常Condition。當設定rules.detector.paused為true時,此問題的自愈功能將被關閉。

    至此,當叢集節點上有NTP服務異常時,ACK的自愈架構將會通過OOS到節點上執行systemctl restart chronyd.service命令,重啟NTP服務。

自愈過程與結果記錄

叢集會預設在kube-system命名空間下建立類型為nodejobs.nodes.alibabacloud.com的資源來記錄每次執行的自愈操作。您可以執行以下命令查看資源中定義的內容,並通過Status欄位查看自愈執行的結果。

kubectl -n kube-system get nodejobs.nodes.alibabacloud.com {nodejob_cr_name} -o yaml