托管節(jié)點池自動監(jiān)控節(jié)點狀態(tài),確保節(jié)點正常運行。當節(jié)點發(fā)生異常時,ACK會自動執(zhí)行恢復操作。將節(jié)點池設置為托管模式會為所有節(jié)點同時開啟自動恢復功能,簡化節(jié)點運維工作。本文介紹節(jié)點自動恢復的應用場景和處理流程。
前提條件
已開啟節(jié)點池的托管能力,請參見創(chuàng)建節(jié)點池。
已開啟事件中心。具體操作,請參見事件監(jiān)控。
觸發(fā)條件
當您打開了必要時重啟節(jié)點以修復CVE漏洞開關,節(jié)點自動恢復的過程中則可能涉及節(jié)點的排水、替盤等操作,建議將數據保存在數據盤中。
ACK會根據節(jié)點的運行狀態(tài)condition
等信息判斷是否發(fā)起自動恢復任務。您可以執(zhí)行kubectl describe node
命令,通過condition
字段查看節(jié)點的運行狀態(tài)。當節(jié)點的運行狀況異常,且異常持續(xù)時間超過閾值時間(即故障發(fā)生多長時間后會觸發(fā)自動恢復任務)時,ACK會發(fā)起節(jié)點自動恢復行為。
具體觸發(fā)條件如下表所示。
檢測項目 | 描述 | 風險等級 | 閾值時間 | 自動恢復行為 |
KubeletNotReady(KubeletHung) | kubelet意外停止工作,導致節(jié)點NotReady。 | 高 | 180s |
|
KubeletNotReady(PLEG) | PLEG健康檢查失敗,導致節(jié)點NotReady。 | 中 | 180s |
|
KubeletNotReady(SandboxError) | PodSandbox not found,導致kubelet無法正常啟動。 | 高 | 180s |
|
RuntimeOffline | containerd或Docker停止工作,節(jié)點不可用。 | 高 | 90s |
|
NTPProblem | 時間同步服務(ntpd或chronyd)異常。 | 高 | 10s | 重啟ntpd或chronyd。 |
SystemdOffline | Systemd狀態(tài)異常,無法啟動、銷毀容器。 | 高 | 90s | 如果打開了必要時重啟節(jié)點以修復CVE漏洞開關,則重啟ECS實例。 |
ReadonlyFilesystem | 節(jié)點文件系統變?yōu)橹蛔x。 | 高 | 90s | 如果打開了必要時重啟節(jié)點以修復CVE漏洞開關,則重啟ECS實例。 |
恢復流程
節(jié)點的自愈功能包括問題診斷、恢復決策和恢復任務。
節(jié)點診斷依賴NPD組件和事件中心。使用自愈功能前,請確保已正確安裝NPD和事件中心。具體操作,請參見事件監(jiān)控。
一個完整的恢復流程中,節(jié)點會在以下狀態(tài)流轉。
正常:當前節(jié)點不存在可被發(fā)現的故障。
故障:當前節(jié)點發(fā)現故障。
恢復失敗:當前節(jié)點無法恢復。
當節(jié)點的運行狀態(tài)發(fā)生變化并持續(xù)一段時間后,ACK將判定該狀態(tài)符合故障狀態(tài),存在節(jié)點故障。
當發(fā)現節(jié)點故障時,ACK會根據故障原因觸發(fā)對應恢復任務,并記錄相應的事件。
當恢復任務完成后,故障狀態(tài)解除,節(jié)點恢復正常狀態(tài)。
當恢復任務完成后,故障狀態(tài)依然存在,節(jié)點會被置為恢復失敗狀態(tài)。
如果集群中存在多個節(jié)點池,節(jié)點池之間的節(jié)點自動恢復可以并行執(zhí)行。
如果一個節(jié)點池存在多個異常節(jié)點,自動恢復會以串行的方式逐個恢復。一旦某個節(jié)點恢復失敗,ACK將停止對該節(jié)點池中其他故障節(jié)點的恢復。
當節(jié)點處于恢復失敗狀態(tài)時,該節(jié)點不會再觸發(fā)自動恢復操作。相應的故障解除后,該節(jié)點才能再次進行自動恢復操作。
部分復雜的節(jié)點故障可能仍需要人工修復。
自動恢復事件
ACK觸發(fā)自動恢復時,會將相關的事件寫入事件中心。您可以在集群信息頁面選擇
,查看自動恢復的記錄和具體操作。內容 | 級別 | 詳細描述 |
NodeRepairStart | Normal | 節(jié)點開始恢復。 |
NodeRepairAction | Normal | 節(jié)點恢復操作,例如重啟kubelet。 |
NodeRepairSucceed | Normal | 節(jié)點恢復成功。 |
NodeRepairFailed | Warning | 節(jié)點恢復失敗。 如遇相關問題,請參見常見問題。 |
NodeRepairIgnore | Normal | 節(jié)點恢復跳過,當ECS處于非運行狀態(tài)時,不對節(jié)點進行操作。 |
常見問題
自動恢復失敗怎么辦?
由于故障的復雜性,自動恢復任務無法修復所有的故障場景。當節(jié)點自動恢復任務執(zhí)行失敗,或者恢復任務執(zhí)行完畢后故障并未解除,ACK會將節(jié)點標記為恢復失敗狀態(tài)。
如果托管節(jié)點池中恢復某個節(jié)點失敗,在故障修復前,該節(jié)點池不會再觸發(fā)自動恢復操作。您可以提交工單聯系技術支持,手動修復故障。
如何忽略某節(jié)點的自動恢復?
如果托管節(jié)點池中的某個節(jié)點需要暫時忽略自動恢復,您可以為該節(jié)點添加以下Label。
alibabacloud.com/repair.policy=disable
相關文檔
如果您想通過移除故障節(jié)點并重新添加的方式解決問題,請在容器服務管理控制臺的節(jié)點池頁面操作。詳細信息,請參見移除節(jié)點、添加已有節(jié)點。
請勿執(zhí)行以下操作:
通過
kubectl delete node
方式移除節(jié)點。通過ECS控制臺、ESS控制臺移除和添加節(jié)點。