説明
変更可能なタグを使い、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 は開始時にレジストリでタグを確認します。同じダイジェストのローカルイメージは再利用できます。