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/

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

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

推薦する

locvps: 米国 CN2 GIA ライン VPS - 60% オフ、オーストラリア Unicom AS9929 ライン VPS - 70% オフ、月額 22 元から

locvps は現在、米国およびオーストラリアの VPS の特別プロモーションを提供しています: 米...

アリババクラウドの復活:「クラウドとネイルの統合」と「基盤の深化」

6月9日、2020 Alibaba Cloud Summitにおいて、Alibaba Cloud I...

Baidu 検索ランディング ページ時間係数の仕様

1. はじめにランディングページの時間要素は、百度検索がウェブサイトの掲載、表示、ランキング結果を判...

コロナウイルスの流行はビジネス変革の新たな時代をもたらした

現時点では、全国の人々の関心は新型コロナウイルス感染症の流行に集中しています。これについてはすでに多...

ハッカーの儲かるビジネス:信仰なし、あるのは狂気だけ!

2011年12月21日朝、ハッカーが中国最大の開発者コミュニティであるCSDNのユーザーデータベース...

入札者、SEM スーパーバイザー、プロジェクト マネージャー、あなたはどのカテゴリに該当しますか?

本日執筆した記事は、プロジェクト マネージャーや SEM スーパーバイザーの観点から、入札の「遊び」...

DuhuguがSEOの倫理規定を解説

【注:この記事はブルース・クレイの倫理規定の中国語訳です。ただし、原文は法律文書に似ており、専門用語...

minivps 1G メモリ/openvz/6 USD/月 フランス/英国

以前、minivps Host Catを紹介しました。正式に登録された会社です。今回もプロモーション...

ビッグデータの時代において、正確な測位を実現する上で失われるものは何でしょうか?

インターネット上の膨大な広告情報は、長い間人々を圧倒してきました。まずトラフィックが必要で、次に収益...

Springboot+Dubboを使用して分散マイクロサービスを構築し、プロセス全体にわたって開発に注釈を付ける

インターネットの発展に伴い、ウェブサイトアプリケーションの規模は拡大し続けています。従来の垂直アプリ...

ソフトコンテンツマーケティングのメリットは何ですか?

現在、最も優れたマーケティング方法はソフトテキストマーケティングかもしれません。なぜでしょうか? 多...

Cube Cloud - 春節期間中 25% オフ、CN2 GIA、韓国 + シンガポール + 香港 BGP VPS

「CubeCloud」の春節プロモーション:先行販売のVPSを除き、その他はすべて25%割引、永久に...

ウェブサイトランキング最適化とステーショングループ戦略

サイト クラスターの主な目的は、検索エンジンを通じて大量のトラフィックを獲得したり、メイン サイトへ...