Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #13] DaemonSet의 이미지 Pull 전략: 이미지 캐시 관리와 정책 구성

ygtoken 2025. 3. 22. 19:45
728x90

1️⃣ 개요

DaemonSet은 클러스터의 모든 노드에서 동일한 컨테이너 이미지를 풀링(pull)하고 실행하게 됩니다.
이때 이미지가 변경되었을 때 자동으로 최신 버전을 반영하거나, 모든 노드에 동일한 이미지가 유지되도록 보장하려면
이미지 Pull 정책(ImagePullPolicy)을 적절하게 구성하는 것이 중요합니다.

이번 글에서는 DaemonSet에 설정 가능한 ImagePullPolicy의 종류와 적용 전략, 이미지 캐시 관리 방법을 소개합니다.


2️⃣ ImagePullPolicy란?

정책 설명 사용 시점
Always 항상 이미지 풀링 (캐시 무시) :latest 태그 사용 시 권장
IfNotPresent 노드에 이미지가 없을 경우에만 풀링 일반적인 운영 환경에서 사용
Never 절대 이미지 풀링하지 않음 오프라인 환경, 로컬 개발 시 사용

📌 imagePullPolicy는 각 컨테이너 단위로 지정되며,
명시하지 않으면 이미지 태그에 따라 자동으로 지정됩니다.


3️⃣ 기본 정책 결정 기준 (명시하지 않았을 때)

 

이미지 태그 기본 적용 정책
latest Always
특정 태그 (예: v1.0.0) IfNotPresent

✅ 태그를 명시하면 캐시된 이미지 사용, latest는 매번 풀링이 기본 동작입니다.


4️⃣ DaemonSet에 ImagePullPolicy 설정 예시

containers:
  - name: node-agent
    image: example.com/agent:v1.2.3
    imagePullPolicy: IfNotPresent   # 이미지가 없다면 pull, 있으면 재사용

📌 설명

  • v1.2.3처럼 명시적인 태그를 사용하는 경우 IfNotPresent가 일반적으로 권장됩니다.
  • 운영 환경에서는 캐시된 이미지 사용으로 인해 불필요한 네트워크 트래픽을 줄일 수 있습니다.

5️⃣ 전체 DaemonSet 구성 예제

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-agent
spec:
  selector:
    matchLabels:
      app: node-agent
  template:
    metadata:
      labels:
        app: node-agent
    spec:
      containers:
        - name: node-agent
          image: example.com/agent:v1.2.3
          imagePullPolicy: IfNotPresent   # 노드에 이미지가 있으면 재사용

📌 설명 요약

  • 모든 노드에서 agent:v1.2.3 이미지를 실행하되,
  • 기존에 해당 이미지가 있으면 재사용하고 없으면 다운로드합니다.

6️⃣ 이미지 갱신이 필요한 경우

✅ 이미지가 변경되었지만 태그는 그대로일 때 (v1.2.3 → v1.2.3 재배포)

kubectl rollout restart daemonset node-agent

📌 설명

  • 이미지가 업데이트되어도 태그가 동일하면 자동으로 pull되지 않기 때문에,
  • rollout restart 명령어를 통해 모든 노드에서 다시 pull을 강제해야 합니다.

7️⃣ 이미지 캐시 강제 제거

✅ 노드의 이미지 삭제

kubectl get nodes
kubectl ssh <노드> docker rmi example.com/agent:v1.2.3

📌 설명

  • 수동으로 노드의 캐시 이미지를 삭제하면 IfNotPresent 조건에서 다시 pull하게 됩니다.

8️⃣ 이미지 Pull 실패 시 주의할 점

원인 대응 방법
이미지 레지스트리 인증 실패 Secret 생성 후 imagePullSecrets 설정 필요
프록시 또는 방화벽 차단 네트워크 경로 확인 또는 레지스트리 위치 변경
이미지 태그 오탈자 DaemonSet이 ImagePullBackOff 상태로 대기함

🔥 9️⃣ 결론

DaemonSet은 모든 노드에 이미지를 배포하기 때문에 이미지 Pull 정책을 명확히 설정하는 것이 중요합니다.
운영 환경에서는 IfNotPresent를, 최신 버전 반영이 필요한 경우에는 Always를 고려할 수 있습니다.
이미지가 변경되었지만 태그는 그대로인 경우, DaemonSet을 수동으로 롤아웃 재시작해야 최신 이미지가 반영됩니다.

 

728x90