kubernetesがコンテナを再起動したり、クラスタがスケールアップされたりするとどうなりますか?

Aug 18 2020

私たちは、使用しているヘルムチャートでアプリケーションを展開するためのKubernetesのクラスタ。

ステートフルセットとヘッドレスサービスがあります。mTLSを初期化するために、「ジョブ」の種類を作成し、「コマンド」でシェルを渡します。Pythonスクリプトは引数です。そして、証明書を更新するための「cronjob」の種類を作成しました。

いくつかの初期化作業とTLS証明書の生成のために、「dockerimage」内に「docker-entrypoint.sh」を記述しました。

尋ねる質問:

  • コンテナのスケーリング/監視/再起動を担当するのは誰(Helm Chart / Kubernetes)ですか?
  • ポッドが失敗/再起動した場合、新しいDockerイメージをデプロイしますか?
  • ドッキングウィンドウますENTRYPOINTは、コンテナが/再起動に失敗した後に実行?
  • コンテナが再起動した場合、「job」と「cronjob」は実行されますか?

Kubernetesが実行する他の手順は何ですか?コンテナの洞察も共有しますか?

回答

4 ArghyaSadhu Aug 18 2020 at 14:28

restartPolicy: Neverポッド仕様で設定しない限り、helmではなくKubernetesがデフォルトで失敗したコンテナを再起動します

コンテナの再起動は、最初に起動するのとまったく同じです。したがって、再起動時には、コンテナを初めて起動するときと同じように動作することが期待できます。

各kubernetesノードで実行されている内部的にkubeletエージェントは、コンテナーを開始するタスクをdocker 、containerdなどのOCI苦情コンテナーランタイムに委任します。これにより、dockerイメージがノード上のコンテナーとしてスピンアップされます。

コンテナの再起動の両方でエントリポイントスクリプトが実行されることを期待します。

ポッドが失敗/再起動した場合、新しいDockerイメージをデプロイしますか?

ポッド仕様で指定されているのと同じイメージで新しいコンテナを作成します。

コンテナが再起動した場合、「job」と「cronjob」は実行されますか?

cronjobの一部であるコンテナが失敗した場合、kubernetesは(restartPolicy: Neverポッド仕様にない限り)タイムジョブが失敗したと見なされなくなるまでコンテナを再起動し続けます。失敗時にcronjobがコンテナを再起動しないようにする方法については、これを確認してください。backoffLimitジョブが失敗したと見なされるまでに再試行する回数を制御するように指定できます。

スケールアップは、同じまたはまったく異なるKubernetesノードで同じコンテナのさらに別のインスタンスをスケジュールして開始することと同じです。

補足として、ポッドの代わりにデプロイなどの高レベルの抽象化を使用する必要があります。ポッドが失敗すると、Kubernetesは同じノードでポッドを再起動しようとしますが、デプロイが失敗すると、Kubernetesは他のノードでも再起動しようとします。現在スケジュールされているノードでポッドを起動します。