春ブーツ1.Xシャットダウンを達成するためのエレガントな方法

現在K8S springbootアプリケーション通知RollingUpdateを通じて、次のようにデプロイされたアプリケーションを更新します。

ヘルスチェックと確認後、新しいポッドアップは、トラフィックを受信することができ、古いポッド後に削除されます。古いポッドへの新しいトラフィックはありませんが、あなたが、古いポッドを削除するときしかし、プロセスでのJavaの古いポッドといくつかのビジネスを直接殺す取り扱っておりません。

したがって、我々は新しいポッドアップは、古いポッドは、新しいトラフィックを受信しないときに実行する必要がありますが、リクエスト処理の処理フロー後にすでに古いポッドを削除することができます。

実際には、ポッド自体のK8S(デフォルトは30秒です)設定項目のterminationGracePeriodSecondsです。RollingUpdateは、アプリケーション、ヘルスチェック(構成されたヘルスチェックの場合)までとした後、新たなポッドを更新すると、K8Sはポッドを終了通知します。(5)ポッドのライフサイクルの終了後K8S:

  1. ポッド終端状態が設定され、K8Sのサービス/エンドポイントのリストから削除されます。この時点で、ポッドは、新しいトラフィックを得るために停止します。容器にポッドで実行すると、影響を受けません。
  2. (配備YAMLは、デフォルトの設定で設定されている場合)PRESTOPフックが実行されます。PRESTOPフックポッドは、コンテナまたはHTTPリクエストに特別なコマンドを送信することです。
  3. K8S SIGTERM信号が容器にポッドに送信されます。この信号は、コンテナは、彼らはすぐに閉鎖されることを知ることができます。
    SIGTERM、より親しみやすい、プロセスは、必要に応じてプログラムを終了し、この信号をキャッチすることができます。プログラムを終了する前に、ログファイルを開き、行われているタスクを終了することができます。プロセスが進行中であると、ジョブが中断されることができない場合は、いくつかのケースでは、そのプロセスも、SIGTERMシグナルを無視することができます。$ {PID}コマンドを殺すに関して。
    SIGKILL信号の場合、プロセスは無視することはできません。これは「」私は今停止し、あなたが何をしているか気にしない「信号です。あなたがプロセスにSIGKILLを送信した場合、
    FreeBSDはそこにそのプロセスを停止します。殺す-9 $ {PID}コマンドをに関して
    SpringBootのjavaプロセスがシグナルSIGTERMをキャプチャするために適用した場合に自身が正常なシャットダウンを開始します。
  4. K8Sはエレガント終了(待機時間terminationGracePeriodを待ちます

おすすめ

転載: blog.csdn.net/luliuliu1234/article/details/103738633