GKE on AWS では、バージョン 1.26 以降、グレースフル ノード シャットダウンが自動的に有効になります。この機能は、ノードのシャットダウンにおける Pod の適切な終了を管理します。適切な終了により、Pod は状態を保存し、ノードをシャットダウンする前にリソースを解放します。Pod を終了するこの方法により、データ損失のリスクを最小限に抑えることができます。また、シャットダウンされる Pod に依存する、またはそれらとやり取りしている他の Pod やサービスの中断のリスクも最小限に抑えることで、クラスタの復元力を高めることができます。
仕組み
ノードは、定期メンテナンス、ノードのスケーリング、ハードウェアの問題などのイベントによってシャットダウンします。kubelet
コンポーネントは、そのイベントを検出し、一定の期間システムのシャットダウンを遅らせるように systemd
へ指示することで、ノードの適切な終了プロセスを開始します。この遅延により、ノード上で実行されている Pod をドレインして強制排除する時間ができます。
ノードを適切に終了させる目的は、ノードがシャットダウンする前に非システム Pod と重要なシステム Pod を適切に終了することで、次のデフォルト設定が使用されます。
ShutdownGracePeriod
: 30 秒ShutdownGracePeriodCriticalPods
: 15 秒
これらの設定により、非システム Pod では強制的に停止される前に、適切に終了するための 15 秒の猶予が与えられます。重要なシステム Pod では非システム Pod が終了した後さらに 15 秒の猶予が得られます。ただし、この機能はベスト エフォート型で動作するため、指定された 30 秒間ではノードが適切にシャットダウンされない可能性があります。
トリガーと制限事項
グレースフル ノード シャットダウンをトリガーするイベントには、次のような計画的なイベントがあります。
- ユーザーからのコマンドによるシャットダウン
- インスタンスの終了
- 定期メンテナンス
- クラスタのスケールダウン
これらのシナリオでは、kubelet
がノード シャットダウン イベントを検出し、ノードの適切なシャットダウン プロセスを開始します。
一方、kubelet
コンポーネントが依存する systemd
禁止のロック メカニズムがシャットダウン コマンドによってトリガーされない場合、グレースフル ノード シャットダウンは作動できません。このような状況の例としては、次のようなものが挙げられます。
- ネットワークの切断
- ハードウェアの誤動作
- メモリや CPU などのリソースの不足
- 予期しない停電。
このような場合、ノードが突然シャットダウンして、中断やデータ損失が発生する可能性があります。