Kubernetes コンテナーのイメージ取得ポリシーの確認

タグの変更方法とキャッシュの使い方に合わせて取得ポリシーを選んでください。

説明

変更可能なタグを使い、imagePullPolicy が IfNotPresent の場合、ノードはキャッシュ済みイメージを再利用できます。同じタグを別の内容へ変更すると、ノードごとに異なるイメージが実行される場合があります。

Always はコンテナー開始時にレジストリでタグのダイジェストを確認しますが、同じ内容がキャッシュにあれば再利用できます。実行中のコンテナーを自動更新したり、イメージの信頼性を検証したりする機能ではありません。

想定される影響

  • 意図した修正済みイメージではなく、古いキャッシュが実行される場合があります。
  • タグを変更した時点により、ノードごとに動作が異なる場合があります。

対処方法

  • 開始時に変更可能なタグを確認する必要があれば、imagePullPolicy: Always を設定してください。レジストリへの接続と障害時の動作も確認してください。
  • 同じ内容を再現するには検証済みのダイジェストを指定し、更新を計画してください。ダイジェストで固定したイメージの IfNotPresent など、有効な方針を一律に変更しないでください。

例

過去の nginx:1.20.0 イメージでポリシーを比較します。実際のデプロイには保守されている検証済みイメージを使用してください。

変更前

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-with-image-pull-policy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: library/nginx:1.20.0
          imagePullPolicy: IfNotPresent

IfNotPresent はローカルにイメージがあれば再利用し、開始時に変更済みのタグを再確認しない場合があります。

変更後

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-with-image-pull-policy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: library/nginx:1.20.0
          imagePullPolicy: Always

Always は開始時にレジストリでタグを確認します。同じダイジェストのローカルイメージは再利用できます。

参考資料