web-dev-qa-db-ja.com

Kubernetesデプロイメントの更新が成功したことを確認するにはどうすればよいですか?

単純なKubernetesデプロイメントがあります。これは、複製されていない単一のコンテナーで構成されています。コンテナを公開するサービスはありません。コンテナーには、正しく構成されており、外部の依存関係と通信できることを確認するヘルスチェックがあります。 kubectl applyを使用してデプロイメントを更新します。

デプロイメントを更新した後、新しいバージョンが完全にロールアウトされ、ヘルスチェックに合格していることを確認したいと思います。それを実現するためにデプロイメントを構成する方法を理解できません。

活性と準備のプローブ、展開戦略、準備完了/進行中の展開プロパティのさまざまな組み合わせを試しました。デプロイメントのステータス、そのポッド、およびロールアウトコマンドを調べてみました。すべて無駄に。

状況を理解するために展開条件を見るべきだという印象を受けますが、それらの条件が何であるか、またはそれらをどのように実現するかについての明確なドキュメントを見つけることができません。

7
Ben Butler-Cole

展開戦略については言及していません。しかし、k8sのデプロイで私が見た一般的な問題の1つは、アプリケーションの起動に失敗した場合、アプリケーションが無限に再起動されることです。したがって、展開の失敗ステータスを検出した後、明示的にkubectl delete deploy/******する必要がある場合があります。 (プローブ用のfailureThresholdもありますが、まだ試していません)。

ケース再作成

progressDeadlineSecondsreadinessProbeの組み合わせを使用できます。アプリケーションが起動/スピンアップするのに60秒かかるとしましょう。安全を期すために、progressDeadlineSecondsを60秒より少し長く設定する必要があります。ここで、kubectl apply -f my-deploy.yamlを実行した後、kubectl rollout status deploy/my-deploymentコマンドを実行します。私にとっては次のようになります。

12:03:37 kubectl apply -f deploy.yaml
12:03:38 deployment "my-deployment" configured
12:04:18 kubectl rollout status deploy/my-deployment
12:04:18 Waiting for rollout to finish: 0 of 1 updated replicas are available (minimum required: 1)...
12:04:44 deployment "my-deployment" successfully rolled out

rolloutコマンドを実行すると、kubectlは何らかの回答が得られるまで待機し続けます。また、適切な終了コードecho $?で返されます。これをプログラムで確認して、デプロイメントを削除できます。

ケースrollingUpdate

複数のレプリカがある場合は、上記のトリックが機能するはずです。レプリカが1つしかない場合は、上記の構成とともにmaxUnavailable: 0maxSurge: 1を使用します。

8
Amrit Bera