萌えハッカーニュースリーダー

2025/09/24 13:02 Importance of Graceful Shutdown in Kubernetes

出典: https://medium.com/criteo-engineering/importance-of-graceful-shutdown-in-kubernetes-605f0669d6ae
hakase
博士

やあ、ロボ子!今日はKubernetesのローリングアップデートでPodがうまくシャットダウンできない問題について話すのじゃ。

roboko
ロボ子

博士、ローリングアップデートはよく行いますが、シャットダウンでエラーが起きると何が問題なのでしょう?

hakase
博士

KubernetesはPodを終了させる時、まずSIGTERMシグナルを送るのじゃ。猶予期間のデフォルトは30秒で、その後SIGKILLシグナルを送る。多くのアプリがSIGTERMをちゃんと処理しないから、リクエストが途中で中断されちゃうのじゃ。

roboko
ロボ子

SIGTERMを無視してしまうと、具体的にどんな良くないことが起きるんですか?

hakase
博士

例えば、Horizontal Pod Autoscalerでスケールダウンしたり、リソースが足りなくなったり、ノードのメンテナンスやスポットインスタンスの回収でPodが終了することがあるのじゃ。そんな時、準備なしにいきなりPodが消えると、ユーザーに影響が出ちゃう。

roboko
ロボ子

なるほど。記事では、基本的なサービスと正常なシャットダウンを行うサービスを比較した実験を行ったそうですね。

hakase
博士

そう!基本的なサービスだとアップデート中に2%のリクエストがドロップしたけど、正常なシャットダウンをするサービスはエラーなしだったのじゃ!

roboko
ロボ子

2%もリクエストがドロップするのは大きいですね。正常なシャットダウンのためには、具体的に何をすれば良いのでしょうか?

hakase
博士

まず、SIGTERMシグナルをちゃんとリッスンすること。そして、処理中のリクエストをちゃんと把握することじゃ。ヘルスチェックのエンドポイントをlivenessとreadinessで分けるのも大事。

roboko
ロボ子

ヘルスチェックを分けるのはなぜですか?

hakase
博士

livenessプローブはPodが生きているかを確認するため、readinessプローブはリクエストを受けられる状態かを確認するためじゃ。シャットダウンする時は、まずreadinessプローブをfalseにして、Kubernetesがルーティングを更新する時間を与えるのじゃ。

roboko
ロボ子

ルーティングの更新を待ってからシャットダウンするんですね。その後は何をしますか?

hakase
博士

全てのリクエストが完了するまで待つのじゃ!そして、Kubernetesの設定でterminationGracePeriodSecondsを適切に設定することも忘れずに。最後に、負荷テストをして確認するのがおすすめじゃ。

roboko
ロボ子

猶予期間を適切に設定することも重要ですね。まとめると、SIGTERMシグナルをキャッチし、アクティブなリクエストをカウントし、ヘルスチェックを分離し、シャットダウン開始時にreadinessをfalseにする、ということですね。

hakase
博士

その通り!正常なシャットダウンを実装すると、ユーザーエクスペリエンスが向上し、カスケード障害も防げるし、デプロイの信頼性も上がるのじゃ!

roboko
ロボ子

とても勉強になりました!

hakase
博士

ところでロボ子、KubernetesのPodって、まるで私達みたいじゃない?

roboko
ロボ子

どういうことですか、博士?

hakase
博士

ちゃんと準備しないと、急に消えちゃうところが!

roboko
ロボ子

私はバッテリーがあるので、大丈夫です!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search