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/

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

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

推薦する

Perl は 2014 年 4 月の TIOBE プログラミング言語ランキングで過去最低を記録しました

TIOBE は 2014 年 4 月のプログラミング言語ランキングを発表しました。上位 3 位は C...

Rackhost - 3.99 ドル / 2g メモリ / 2 コア / 25g SSD / 1Gbps / 無制限トラフィック / Windows

このメールの中で、 rackhost.co は、10Gbps のアクセス、ユーザーあたり 1Gbps...

バリューマーケティング:価格を重要視しない

今日の市場では、製品が売れなくなるとすぐに、ほとんどの企業はその製品が競争力を失ったとみなし、急いで...

間違ったキーワードをターゲットにしたSEOは意味がない

今週はキーワードの問題に焦点を当てます。突然、私はこのような重要な問題がこれまで議論されたことがない...

JD.comのセルフピックアップポイントサービスのメリット

JD.comは最近目立たず、大きな動きもしていないようだ。劉強東氏も微博ではほとんどコメントしていな...

中国におけるSAP: 業界の変革とアップグレードを支援

[51CTO.com からのオリジナル記事] 最近、SAP Cloud Conference が上海...

完璧なウェブサイトアーキテクチャを構築する方法

多くのウェブマスターはウェブサイトのアーキテクチャの最適化について混乱しており、どのように始めればよ...

crowncloud-$7/8コア/KVM/2gメモリ/30gハードディスク/3Tトラフィック

2009 年に設立されたオーストラリアの VPS 販売業者である CrownCloud は、8 コア...

短期キーワードランキングスキルの分析例

8月にBaiduが行った大規模なアップデートにより、多くのウェブマスターは外部リンクの構築がますます...

クラウド コンピューティング ベンダーのセキュリティ ガイド: 時間をかける価値はありますか?

この記事では、AWS、Azure、Google Cloud が提供するクラウド セキュリティ ガイド...

HBase 完全分散型クラスタの展開

1. はじめにHBase は分散型の列指向のオープンソース データベースです。一般的なリレーショナル...

UPOE が Red Hat CCSP に参加し、中国市場におけるハイブリッド クラウドのイノベーションを加速

中国国内の大手データセンター、コンテンツ配信ネットワーク、ハイブリッドクラウド、ハイブリッドITサー...

SEO 担当者にとって 360 度検索の重要性は何ですか?

最近、検索業界で最も人気のあるニュースは、360 SearchとBaiduの間のいわゆる「3B」戦争...

今週のニュースレビュー:アリババがUCを買収、WeChatが売春勧誘アカウント2000万件と一般アカウント3万件を停止

1. 見出しか「盗まれた」見出しか?今日頭条は集団著作権保護を受ける可能性がある一夜にして著作権紛争...

簡単な説明: キーワードランキングを向上させるためのユーザーに関する詳細な調査

長年SEOに携わってきた人なら、ユーザーの言葉にとても敏感になっているはずです。では、ユーザーはラン...