web-dev-qa-db-ja.com

Kubernetesでデプロイイメージを更新する

私はKubernetesに非常に慣れていないため、k8s v1.4、Minikube v0.15.0、Spotify maven Dockerプラグインを使用しています。
プロジェクトのビルドプロセスでDockerイメージが作成され、MinikubeのDockerエンジンに直接プッシュされます。

ポッドは、(レプリカセットを使用して)私が作成したデプロイによって作成され、戦略はtype: RollingUpdate

私はこれをドキュメントで見ました:

:Deploymentのポッドテンプレート(つまり、.spec.template)が変更された場合にのみ、Deploymentのロールアウトがトリガーされます。


フローを自動化する簡単な方法/回避策を探しています:ビルドがトリガーされます>新しいDockerイメージがプッシュされます(バージョンが変更されません)>デプロイによってポッドが更新されます>サービスによって新しいポッドが公開されます。

15
yuval simhon

コンテナイメージの名前またはタグを変更しない場合は、次のようにアプリケーションを0にスケーリングし、元のサイズに戻します。

kubectl scale --replicas=0 deployment application
kubectl scale --replicas=1 deployment application

コメントですでに述べたようにImagePullPolicy: Alwaysは、構成で必要になります。

画像を変更するとき、これが更新する最も簡単な方法であることがわかりました

kubectl set image deployment/application app-container=$IMAGE

イメージを変更しないことには、問題が発生した場合にフォールバックする必要がないというダウンサイトがあります。したがって、開発環境以外で使用することはお勧めしません。


編集:小さなボーナス-前後でスケールを同期させると、見た目が悪くなる可能性があります。お気に入り:

replica_spec=$(kubectl get deployment/applicatiom -o jsonpath='{.spec.replicas}')
kubectl scale --replicas=0 deployment application
kubectl scale --replicas=$replica_spec deployment application

乾杯

13
pagid