Kubernetes の実践: 正常な終了

Kubernetes の実践: 正常な終了

[[403677]]

この記事はWeChatのパブリックアカウント「Cloud Native Knowledge Universe」から転載したもので、著者はI am rocです。この記事を転載する場合は、Cloud Native Knowledge Universe の公開アカウントにお問い合わせください。

概要

Pod が破棄されると、コンテナ内のプロセスは停止されます。通常、停止プロセス中に、接続の中断を避けるために既存のリクエストが処理されるのを待ったり、関連する依存関係をクリーンアップするように通知したりするなど、何らかの後処理ロジックを実行して、正常な終了の目的を達成する必要があります。この記事では、Kubernetes シナリオでコンテナの正常な終了を実装するためのベスト プラクティスを紹介します。

コンテナ終了プロセス

まず、Kubernetes 環境でのコンテナの終了プロセスを理解しましょう。

  1. Pod は削除され、そのステータスは「終了中」に設定されます。
  2. kube-proxy は転送ルールを更新し、サービスのエンドポイント リストから Pod を削除するため、新しいトラフィックは Pod に転送されなくなります。
  3. Pod に preStop フックが設定されている場合は、それが実行されます。
  4. kubelet は、Pod 内の各コンテナに SIGTERM シグナルを送信し、コンテナ プロセスに正常なシャットダウンを開始するように通知します。
  5. コンテナ プロセスが完全に停止するまで待ちます。 terminationGracePeriodSeconds (デフォルトでは 30 秒) 以内に完全に停止しない場合は、SIGKILL シグナルを送信してプロセスを強制終了します。
  6. すべてのコンテナ プロセスが終了し、Pod リソースがクリーンアップされます。

ビジネス コードは SIGTERM シグナルを処理します

正常な終了を実現するには、ビジネス コードで SIGTERM シグナルを必ず処理してください (SIGTERM 処理コードの例を参照)。

シェルがSIGTERMシグナルの受信を妨げないようにしてください

スクリプト (CMD ["/start.sh"] など) がコンテナの起動エントリとして使用される場合、ビジネス プロセスはシェルのサブプロセスになります。 Pod が停止すると、シェルがサブプロセスにシグナルを自動的に渡さないため、ビジネス プロセスは SIGTERM シグナルを受信しない可能性があります。より詳細な説明については、「コンテナーが SIGTERM シグナルを受信しないのはなぜですか?」を参照してください。

解決したら? SHELL でのシグナルの受け渡しを参照してください。

プレストップフックの適切な使用

ビジネス コードが SIGTERM シグナルを処理しない場合、またはエレガントな終了ロジックを追加するために使用されるサードパーティのライブラリまたはシステムを制御できない場合は、Pod の preStop を構成して、その中にエレガントな終了ロジックを実装することもできます。例えば:

  1. ライフサイクル:
  2. プレストップ:
  3. 実行:
  4. 指示:
  5. - /clean.sh

Kubernetes APIドキュメントを参照してください

極端なケースでは、ポッドが削除された後も、短期間で新しい接続が転送されることがあります。これは、kubelet と kube-proxy が同時にポッドの削除を監視するためです。 kubelet は、kube-proxy がルールを同期する前にコンテナを停止した可能性があります。この場合、いくつかの新しい接続が削除される Pod に転送される可能性があります。通常、アプリケーションが SIGTERM を受信すると、新しい接続を受け入れなくなり、既存の接続の処理のみを継続します。したがって、Pod が削除された瞬間に一部のリクエストが失敗する可能性があります。

この場合、preStop を使用してしばらくスリープし、kube-proxy がルールの同期を完了するまで待機してから、コンテナ内のプロセスの停止を開始することもできます。

  1. ライフサイクル:
  2. プレストップ:
  3. 実行:
  4. 指示:
  5. - 寝る
  6. - 5秒

猶予時間を調整する

必要な正常終了時間が長い場合 (preStop + ビジネス プロセスの停止が 30 秒を超える可能性がある)、SIGKILL によって早期に強制終了されることを回避するために、実際の状況に応じて terminationGracePeriodSeconds をカスタマイズできます。例えば:

参考文献

SIGTERM を処理するコード例: https://imroc.cc/k8s/ref/code-example-of-handle-sigterm/

コンテナが SIGTERM シグナルを受信できないのはなぜですか: https://imroc.cc/k8s/faq/why-cannot-receive-sigterm/

SHELL でのシグナルの伝播: https://imroc.cc/k8s/trick/propagating-signals-in-shell/

<<:  製造、小売、医療の事例から:エッジコンピューティングと人工知能が収益向上にどのように役立つか

>>:  エッジコンピューティングとは何ですか?なぜそれがモノのインターネットの発展にとって避けられない選択なのでしょうか?

推薦する

モバイルインターネットはコミュニティにチャンスをもたらす

近年、インターネット分野の資本投資に関するニュースは、BATの合併や買収、展開を除けば、垂直コミュニ...

適切なキーワードを選択する方法

キーワードを基に、ユーザーの行動や言語に合わせて網羅的なキーワードを最適化する必要があります。キーワ...

あなたの宝物はどこにありますか? インターネット時代のアマチュアリズムとプロフェッショナリズムについての議論

今日の近代商業社会では、プロフェッショナリズムがますます重視されていますが、驚くべきことに、インター...

Kuaiyankanshu.com の著作権侵害の疑いで 15 人の容疑者が逮捕される

この検索エンジンとその関連ウェブサイトは、有名なウェブサイトから大量の文学作品を海賊版として入手しま...

Hostgator - 「納税日」50% オフ

納税日、今日は米国の納税日です。誰もがこの日までに納税申告書を提出しなければなりません。Hostga...

調査によると、環境に優しい行動は利益をもたらす

サーバー仮想化プロジェクトによる節約だけで、ファイル管理、ストレージ仮想化、クラウド コンピューティ...

アウトドアをテーマにしたアドベンチャーツーリズムは、観光コミュニティの大規模な商業化の問題を解決できるでしょうか?

私の国の観光市場はどれくらい大きいのでしょうか?すでに1兆を超えています。旅行業界全体では、Ctri...

SEO総合最適化概要

おそらく私たちは、SEO に関する話題について、聞きすぎ、見すぎ、考えすぎているのかもしれません。し...

数万通りのトラフィック手法の鍵が明らかに

ウェブサイトを構築する過程で学び、実践したウェブサイトのトラフィックを増やすためのいくつかの方法をま...

inceptionhosting-22.5 ユーロ/年払い/KVM/512m メモリ/フェニックス シティ/G ポート

inceptionhosting.comは2011年に設立されたようです。イギリスに登録された会社で...

クラウドの盲点を監視して対処する方法

今日、クラウドは、必要なときに新しいリソースを簡単にプロビジョニングできるなど、多くの利点があるため...

ウェブサイトのホリデープロモーションをうまく行う方法についての簡単な説明

昨日は子供の日でした。子供の頃の思い出は私たちにとって最も大切な思い出だと思います。これは、多くの個...

オンラインマーケティングトレーニングで学ぶべき6つの最も重要なマーケティング分野

最近、友人から私のマーケティング本「デートはこうすればもっと楽しくなる」がいつ出版されるのかと聞かれ...

Baiduの7月13日のブラックフライデー事件についての簡単な議論

昨夜、多くのウェブマスターがため息をついたかもしれません。「夜は長くて眠れない」。百度は昨夜、もう一...