從 1.26 版開始,AWS 上的 GKE 會自動啟用節點正常關機。這項功能會在節點關閉期間,管理 Pod 的安全終止程序。 正常終止可讓 Pod 儲存狀態,並在節點關閉前釋出資源。這種終止 Pod 的方法可將資料遺失風險降到最低。此外,還能盡量減少對其他 Pod 和服務的干擾,這些 Pod 和服務會依賴或與關閉的 Pod 互動,進而提升叢集的復原能力。
運作方式
排定的維護作業、節點擴充或硬體問題等事件,都會觸發節點關機。kubelet
元件會偵測到事件,並指示 systemd
將系統關機程序延後一段指定時間,藉此啟動節點正常終止程序。這段延遲時間可讓節點排空並逐出在節點上執行的 Pod。
節點正常終止的目標,是在節點關閉前,正常終止非系統和重要系統 Pod。系統會使用下列預設設定:
ShutdownGracePeriod
:30 秒ShutdownGracePeriodCriticalPods
:15 秒
這些設定會讓非系統 Pod 在強制停止前,有 15 秒的時間可正常終止。非系統 Pod 終止後,重要系統 Pod 有 15 秒的時間可關機。不過,由於這項功能會盡可能運作,節點可能無法在指定的 30 秒內正常關機。
觸發條件和限制
觸發節點正常關機的事件包括下列預期事件:
- 使用者下達的關機指令
- 終止執行個體
- 定期維護
- 縮減叢集
在這些情況下,kubelet
會偵測節點關機事件,並啟動正常節點關機程序。
相反地,如果關機指令未觸發 kubelet
元件所依賴的 systemd
抑制器鎖定機制,就無法啟動節點正常關機程序。這類情況包括:
- 網路連線中斷
- 硬體故障
- 記憶體或 CPU 等資源不足
- 無預警停電。
在這些情況下,節點可能會突然關機,導致中斷或資料遺失。