全部產品
Search
文件中心

Container Service for Kubernetes:開啟節點自愈

更新時間:Sep 01, 2026

節點池開啟託管能力後,支援啟用節點自愈功能,即由ACK自動監控節點狀態,並在節點發生異常時自動執行自愈任務,以簡化節點營運工作。但由於故障的複雜性,自愈任務無法修複所有的故障情境,部分複雜故障可能仍需人工修複。

靈駿節點池的節點自愈,請參見開啟節點自愈。

自愈機制說明

節點自愈的完整運作過程可從以下維度理解:

執行流程

一個完整的故障發現、故障通知與節點自愈流程如下。

  1. 故障診斷與發現

ACK通過NPD組件檢查節點的異常情況。節點運行狀態發生變化並持續一段時間後,ACK判定該節點存在故障。

  1. 故障通知

發現故障後,ACK會產生Node Condition和Kubernetes Event。可通過事件中心警示配置接收通知。

  1. (獨佔GPU情境)故障隔離

檢測到GPU異常後,ACK對故障GPU卡進行隔離。

關於GPU卡故障檢測和自動隔離的詳細資料請參見GPU異常檢測與自動隔離。
  1. 執行系統與 K8s 組件異常自愈流程

ACK會根據節點的運行狀態condition等資訊判斷是否發起自愈任務。可執行kubectl describe node命令,在condition欄位查看節點的運行狀態。

檢測到系統與K8s組件異常,且異常期間超過閾值時間(即故障發生多長時間後會觸發節點自愈)時,ACK將自動執行自愈任務。一個完整的節點自愈流程如下。

  1. ACK對異常的系統與K8s組件進行修複,例如重啟kubelet、重啟運行時等。

  2. 如果選擇僅開啟系統與節點群組件自愈(允許異常時重啟節點),當修複動作無效時,ACK繼續執行以下操作:

    1. ACK自動將故障節點設定為不可調度。

    2. ACK針對需要重啟的故障節點執行排水。排水逾時時間取故障節點上所有待驅逐 Pod 的 TerminationGracePeriodSeconds 最大值與 10 分鐘中的較大值,且最長不超過 30 分鐘。

      ACK執行節點排水操作時,會在遵循PDB的前提下將節點上的Pod驅逐至其他可用節點。為確保服務高可用性,建議採用多副本部署策略,將工作負載分散在多個節點上,同時為關鍵業務配置PDB,控制同時中斷的Pod數量。

      如排水失敗,ACK仍會執行後續操作。

    3. ACK重啟節點。

    4. 檢測節點狀態恢複正常時,ACK將故障節點恢複為可調度。

      如果某節點在執行節點自愈前已被設定為不可調度,那麼在自愈任務完成後,該節點不會自動回復為可調度。

自愈任務執行說明:如果叢集中存在多個節點池,各節點池的自愈任務將串列執行。

觸發自愈的Node Condition

Node Condition

描述

風險等級

閾值時間

自愈行為

KubeletNotReady(KubeletHung)

kubelet意外停止工作,導致節點NotReady。

高

180s

  1. 重啟kubelet。

  2. 如果選擇僅開啟系統與節點群組件自愈(允許異常時重啟節點),則重啟ECS執行個體。

KubeletNotReady(PLEG)

PLEG健全狀態檢查失敗,導致節點NotReady。

中

180s

  1. 重啟containerd或Docker。

  2. 重啟kubelet。

  3. 如果選擇僅開啟系統與節點群組件自愈(允許異常時重啟節點),則重啟ECS執行個體。

KubeletNotReady(SandboxError)

PodSandbox not found,導致kubelet無法正常啟動。

高

180s

  1. 刪除對應的Sandbox容器。

  2. 重啟kubelet。

RuntimeOffline

containerd或Docker停止工作,節點不可用。

高

90s

  1. 重啟containerd或Docker。

  2. 如果選擇僅開啟系統與節點群組件自愈(允許異常時重啟節點),則重啟ECS執行個體。

NTPProblem

時間同步服務(ntpd或chronyd)異常。

高

10s

重啟ntpd或chronyd。

SystemdOffline

Systemd狀態異常,無法啟動、銷毀容器。

高

90s

如果選擇僅開啟系統與節點群組件自愈(允許異常時重啟節點),則重啟ECS執行個體。

ReadonlyFilesystem

節點檔案系統變為唯讀。

高

90s

如果選擇僅開啟系統與節點群組件自愈(允許異常時重啟節點),則重啟ECS執行個體。

自愈過程中的節點狀態

  • 自愈任務執行中,節點狀態為修複中。

  • 自愈任務完成後,故障狀態解除,節點恢複正常狀態。

  • 自愈任務完成後,故障狀態依然存在,節點會被置為恢複失敗狀態。

    節點處於自愈失敗狀態時,不會再觸發自愈操作。相應的故障解除後,該節點才能再次進行自愈操作。

使用說明

  • 本功能需搭配事件中心使用,以接收節點池的警示事件,並安裝ack-node-problem-detector(NPD),以檢測節點的異常情況。詳情請參見事件監控。

  • 僅支援在ACK託管叢集中使用,支援開啟了託管配置的節點池。

  • 以下處於灰階發布中的功能,灰階進度可能不同。如需使用,請提交工單一併申請。

    • 節點執行個體異常的自愈:白名單功能。

    • 警示規則集:開啟節點自愈後,推薦開啟警示管理功能,啟用叢集節點自愈警示規則集和叢集GPU監控警示規則集,在異常情況發生時自動接收警示通知。相應規則集處於灰階發布中。

      規則集啟用操作,請參見Container Service警示管理。
    • NPD版本:節點執行個體異常的自愈依賴NPD組件為1.2.26及以上。1.2.26版本處於灰階中。

啟用節點自愈

支援在新增或存量節點池中通過託管配置開啟節點自愈功能並定義其行為。

建立節點池時開啟

  1. 在ACK叢集列表頁面,單擊目的地組群名稱,在叢集詳情頁左側導覽列,選擇節點管理 > 節點池。

  2. 單擊建立節點池,在託管配置地區選取項目託管節點池,開啟節點自愈功能,選擇修複系統與K8s組件異常時是否重啟節點,並按照頁面提示完成節點池的建立。

    完整配置項說明,請參見建立和管理節點池。關於重啟節點和等待授權相關的注意事項,請參見下文說明。

存量節點池中開啟

  1. 在ACK叢集列表頁面,單擊目的地組群名稱,在叢集詳情頁左側導覽列,選擇節點管理 > 節點池。

  2. 在節點池列表的操作列,單擊目標節點池對應的image > 開啟託管(節點池)或託管配置(託管節點池),選擇託管配置模式為託管節點池,按照頁面提示開啟節點自愈功能。

    關於配置項的完整說明,請參見建立和管理節點池。關於重啟節點和等待授權相關的注意事項,請參見下文說明。

查看節點自愈事件

ACK觸發節點自愈時,會將相關事件寫入事件中心。可在叢集資訊頁面選擇營運管理 > 事件中心,在節時間點事件的事件列表中查看自動回復的記錄和具體操作。還可參見事件監控訂閱相關事件。

內容

層級

說明

NodeRepairStart

Normal

節點開始自愈。

NodeRepairAction

Normal

節點自愈操作,例如重啟kubelet。

NodeRepairSucceed

Normal

節點自愈成功。

NodeRepairFailed

Warning

節點自愈失敗。請參見下文的常見問題解決。

NodeRepairIgnore

Normal

節點自愈跳過,當ECS處於非運行狀態時,不對節點進行操作。

常見問題

節點自愈失敗怎麼辦?

由於故障的複雜性,自愈任務無法修複所有的故障情境。當節點自愈任務執行失敗,或者自愈執行完畢後故障並未解除,ACK會將節點標記為自愈失敗狀態。

如果某個節點自愈失敗,在損毀修復前,該節點池不會再觸發自愈操作。可提交工單聯絡支援人員。

相關文檔