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/

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

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

推薦する

なぜ Taobao にはランキングリストがないのでしょうか?

現在、インターネットの継続的な発展に伴い、電子商取引業界は急速に発展しています。市場にはさまざまなユ...

Inspurは、ビジネスからITまでのラストマイルをつなぐ最高のaPaaSソリューションを提供します

PaaS(Platform-as-a- Service )とは、アプリケーションサービスの運用・開...

クラウドネットワーク統合における専用回線の需要に関する簡単な分析

[[442453]] 1. 専用回線市場の現状専用線市場は、企業数、クラウド事業展開、政策支援などの...

ウェブサイトの最適化とSEO効果分析におけるアンカーテキストの役割

アンカー テキスト (一般にアンカー テキスト リンクとも呼ばれます) もリンクの一種です。ハイパー...

Yuehuaiマーケティング:この業界の専門家になり、BingとGoogleから外部リンクの提案を受け取ります

すべてのウェブサイトは、ウェブサイトのプロモーションと外部リンクの構築という問題に直面しています。外...

ウェブサイト検索エンジン最適化プログラムの分析例

1. 最適化ガイダンス私たちは、留学生のニーズとウェブサイトのユーザーエクスペリエンスを指針として、...

Kubernetes Ingress: クラスターへの外部ネットワークアクセスのための柔軟なツール

前提条件 すでに Kubernetes クラスターがあり、それにアクセスできます。 kubectl ...

百度のAIの強みが陽泉市のスマートシティ構築を支援

[51CTO.comよりオリジナル記事] Baiduは長年にわたりスマートシティ建設の推進に努めてき...

インターネットマーケティングのための電子書籍を作成する

オンラインマーケティングのプロモーションにはさまざまな方法がありますが、そのうちの1つはあまり使用さ...

サイバー犯罪者は主にランサムウェアやクリプトジャッキングを使ってLinuxベースのシステムに焦点を当てている

最も一般的なクラウド オペレーティング システムである Linux は、デジタル インフラストラクチ...

分散マイクロサービス アーキテクチャ アプリケーションで最終的な一貫性を実現するにはどうすればよいですか?

分散システムでは、強力な一貫性を実現するのは簡単ではありません。 2PC ステージと 3PC ステー...

SEO環境がどんなに混沌としていても、自己構築をしっかり行う必要があります。

2009年に卒業してインターネットを使い始めてから、SEOについて最も多く耳にしてきました。過去3年...

通話回数は2億回を突破!テンセントクラウドの公式音楽ライブラリへの直接アクセスが単一の製品を発売

1月22日、テンセントクラウドの「本物の音楽ライブラリへの直接アクセス」が単一製品の発売を発表した。...

短期賃貸の元祖Airbnb:海外旅行で中国市場に逆参入

[概要] 今後、中国では初めての海外旅行に出かける人がますます増えるでしょう。これらの人々はAirb...

Google の電子商取引への間接的な浸透: 信頼できる販売業者認定プロジェクトを開始

Google、誠実な商人認定プロジェクトを開始新浪科技報北京時間6月8日朝のニュースによると、グーグ...