1. ホーム

[解決済み】Kubernetes イメージを更新するデプロイメントの作り方

2022-04-12 11:45:47

質問

私は、単一のポッドで、私のカスタムDockerイメージを使用してデプロイしています。

containers:
  - name: mycontainer
    image: myimage:latest

開発中に新しい最新バージョンをプッシュし、デプロイメントを更新させたいと思います。 タグ/バージョンを明示的に定義し、ビルドごとにそれをインクリメントすることなく、それを行う方法を見つけることができません。

kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1

解決方法は?

ポッドに猶予期間(例えば30秒以上、コンテナの起動時間やイメージのサイズに依存)を設定し、その間に "imagePullPolicy: "Always" . そして kubectl delete pod pod_name . 新しいコンテナが作成され、最新のイメージが自動的にダウンロードされた後、古いコンテナは終了します。

spec:
  terminationGracePeriodSeconds: 30
  containers:
  - name: my_container
    image: my_image:latest
    imagePullPolicy: "Always"

現在、自動ビルドと画像タグ付けにJenkinsを使っていますが、以下のような感じです。

kubectl --user="kube-user" --server="https://kubemaster.example.com"  --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"

もう一つのコツは、初期に実行することです。

kubectl set image deployment/my-deployment mycontainer=myimage:latest

といった具合に。

kubectl set image deployment/my-deployment mycontainer=myimage

これは実際にローリングアップデートのトリガーになりますが、同時に imagePullPolicy: "Always" を設定します。

更新してください。

画像名を変更する必要がない場合、私が見つけた別のトリックは、ローリングアップデートをトリガーするフィールドの値を次のように変更することです。 terminationGracePeriodSeconds . これを行うには kubectl edit deployment your_deployment または kubectl apply -f your_deployment.yaml またはこのようなパッチを使用します。

kubectl patch deployment your_deployment -p \
  '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'

ただ、常に数値の値を変更するようにしてください。