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/

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

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

推薦する

細部までこだわったB2Cモールのブランドイメージ構築

B2Cモールの発展過程において、初期の生存テストを通過し、一定の収益基盤を持つウェブサイトにとって、...

ユーザーの需要価値の表示と位置付け

SEO を行う人なら誰でも「コンテンツは王様、外部リンクは女王」ということわざを知っていますが、この...

IaaS 向け初のクエリ言語「ZStack クエリ言語 (ZQL)」を発表

UI 作業を簡素化し、運用および保守担当者により柔軟なリソース クエリ方法を提供するために、ZSta...

BandwagonHostの登録に関するチュートリアル、BandwagonHostの登録の詳細について説明します

BandwagonHost VPS の登録プロセスは比較的簡単です。登録できない方もいらっしゃるでし...

Microsoft Azure でサーバーレス コンピューティング機能アプリケーションを作成する方法は?

[51CTO.com クイック翻訳] 従来のクラウド サービスのシナリオでは、企業は特定の仮想マシン...

フォーラム署名推進における5つの経験

1. フォーラムのニックネームとアバターニックネームを設定する際は、覚えやすく意味があり、広告効果の...

SEOとウェブサイトのセキュリティは密接に関連しています

SEO は誰もが知っている言葉です。誰もがよく口にする検索エンジン最適化、いわゆるコンテンツと外部リ...

靴と衣料品の電子商取引会社「耀店100」が破産の危機に直面しており、買い手を探していると報じられている。

中国国際放送、北京、3月7日(呉成波記者)Economic Voiceの「世界企業」の報道によると、...

コンテナ化された環境でインフラストラクチャを管理するための 9 つのベストプラクティス

コンテナ テクノロジーを採用すると、開発者の作業は楽になりますが、運用チームにとっては複雑になること...

共同購入サイトの開発に障害が発生:9か月で2,082サイトが消滅、ほぼ半減

Tuan800の統計によると、レストランや映画のチケットは最も人気のあるグループ購入商品の一つです。...

ウェブサイトの粘着性を高めるにはいくつかのコツがあり、ターゲットを絞ったマーケティングは半分の労力で2倍の結果を達成できます。

ウェブマスターは誰でも、自分が運営するウェブサイトが大金を稼ぐことを望んでいます。最近では、趣味でウ...

クラウド データ ウェアハウス Snowflake、Panoply、Repods の包括的な比較

【51CTO.com クイック翻訳】はじめにSnowflake、Panoply、Repods は、管...

SEO の最初の 2 年間でウェブマスターが学ぶべきこと

SEMWATCHのデータが失われ、以前書いた記事もいくつか消えてしまいました。 Baidu スナップ...

リスク管理を活用して、小紅書が棚から撤去されるのを防ぐにはどうすればよいでしょうか?

01最近、ネット界で一番ホットな出来事は、小紅書が店頭から撤去されたことだ。 7月29日夕方、小紅書...