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

참조