설명
변경 가능한 태그를 사용하면서 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는 시작 시 레지스트리에서 태그를 확인합니다. 같은 다이제스트의 로컬 이미지는 재사용할 수 있습니다.