1. ホーム
  2. .net

[解決済み] terminationGracePeriodSeconds not

2022-03-09 11:41:53

質問

私は、Kubernetesを通じてデプロイしているDockerコンテナで、.NET Coreコンソールアプリケーションを走らせています。 デプロイメントイメージを更新するとき、新しい接続を受け入れずに、既存のポッドをしばらく維持したいのですが、既存のユーザーが終了できるように、既存の接続を一定期間生かし続けたいと思います。

Kubernetesのドキュメントを見ると、termination grace period secondsが追加すべきプロパティだと思ったのですが、どうもうまくいかないようです。デプロイメントに記載されているイメージを変更するとすぐに、既存のポッドが削除され、猶予期間が適用されません。

この例で何が間違っているのか、どなたかお分かりになりますか?ドキュメントには何も書かれていません。

以下、私の.ymlファイルからのビット。

spec: 
   terminationGracePeriodSeconds: 60
   containers:
       - name: myApplication

解決方法は?

猶予期間の仕組みは、メインの docker プロセスに直ちに SIGTERM シグナルが送られ、その後、より強制的にシャットダウンされるまでに一定時間、自力で終了することが許される、というものです。アプリがすぐに終了してしまうのは、このシグナルを受け取ったときに終了してしまうからです。

アプリはSIGTERMシグナルをキャッチし、すべてのオープン処理が完了した後、独自に終了することができます。 または、SIGTERM 信号をキャッチした後、何もせずに別の方法で強制終了されるのを待つこともできます。