在 GKE on AWS 中正常關閉節點

從 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 等資源不足
  • 無預警停電。

在這些情況下,節點可能會突然關機,導致中斷或資料遺失。