Kubernetes にイメージを強制的に再プルさせるにはどうすればいいですか? 質問する

Kubernetes にイメージを強制的に再プルさせるにはどうすればいいですか? 質問する

GKE 上の Kubernetes には次のレプリケーション コントローラーがあります。

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 2
  selector:
    app: myapp
    deployment: initial
  template:
    metadata:
      labels:
        app: myapp
        deployment: initial
    spec:
      containers:
      - name: myapp
        image: myregistry.com/myapp:5c3dda6b
        ports:
        - containerPort: 80
      imagePullPolicy: Always
      imagePullSecrets:
        - name: myregistry.com-registry-key

さて、私が言うと

kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b

ローリングアップデートは実行されますが、再プルは実行されません。なぜでしょうか?

ベストアンサー1

Kubernetesは、Podの作成時にプルを実行します(以下を参照)。画像の更新ドキュメント):

  • タグ付けされた画像の使用:latest
  • imagePullPolicy: Always指定されている

常にプルしたい場合は、これは素晴らしい方法です。しかし、オンデマンドで実行したい場合はどうでしょうか。たとえば、some-public-image:latest新しいバージョンを使用したいが、要求されたときにのみ手動でプルしたい場合などです。現在、次のことが可能です。

  • またはimagePullPolicyに設定し、IfNotPresentNever事前プル: 各クラスター ノードでイメージを手動でプルして最新のイメージがキャッシュされるようにし、またはkubectl rolling-update同様の操作を実行してポッドを再起動します (簡単に壊れる醜いハックです)。
  • を一時的に変更しimagePullPolicy、 を実行しkubectl apply、ポッドを再起動 (例kubectl rolling-update)、 を元に戻しimagePullPolicy、 をやり直すkubectl apply(醜い!)
  • some-public-image:latestプライベートリポジトリにプルしてプッシュkubectl rolling-updateし、 (重い!)

オンデマンド プルには適切な解決策はありません。状況が変わった場合は、コメントしてください。この回答を更新します。

おすすめ記事