Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #6] DaemonSet 롤아웃 관리 및 Canary 배포 전략 구성

ygtoken 2025. 3. 21. 18:48
728x90

 

1️⃣ 개요

 

DaemonSet은 클러스터 전 노드에 Pod를 배포하는 구조이기 때문에, 전체 노드에 대한 변경을 한 번에 적용할 경우, 서비스 안정성에 영향을 줄 수 있습니다.

이럴 때 유용한 방법이 일부 노드에서 먼저 변경 사항을 배포하여 확인한 뒤 전체 적용을 진행하는 Canary(카나리) 배포 전략입니다.

 

이번 글에서는 DaemonSet에 대한 롤아웃 상태를 관리하고, Canary 방식으로 단계적으로 배포하는 방법을 정리합니다.

 


2️⃣ DaemonSet 롤아웃 상태 확인 방법

kubectl rollout status daemonset <이름>

 

예:

kubectl rollout status daemonset node-exporter

 

📌 설명

현재 롤링 업데이트가 어느 노드까지 완료되었는지 실시간으로 확인할 수 있습니다.

Pod가 모두 준비되기 전까지는 출력이 계속 진행됩니다.

 


3️⃣ 롤아웃을 중단하거나 복구하는 명령어

 

✅ 배포 취소 (Undo)

kubectl rollout undo daemonset node-exporter

 

📌 설명

가장 최근에 성공했던 상태로 되돌립니다.

이미지 변경, 설정 오류 등으로 문제가 생겼을 때 빠르게 복원 가능합니다.

 


✅ 롤아웃 일시 정지 / 재개

kubectl rollout pause daemonset node-exporter    # 배포 중단
kubectl rollout resume daemonset node-exporter   # 배포 재개

 

📌 설명

새로운 이미지나 설정을 적용하되, 일단 롤아웃을 멈춰 검증할 수 있습니다.

Canary 배포를 수동으로 조절할 때 유용하게 활용됩니다.

 


4️⃣ Canary 배포 전략: Label 기반으로 일부 노드에만 배포

 

✅ 1. Canary 노드에 라벨 부여

kubectl label node node-1 canary=true
kubectl label node node-2 canary=true

 

📌 설명

테스트 노드에 canary=true 라벨을 부여합니다.

Canary DaemonSet은 이 노드들에만 배포될 예정입니다.

 


✅ 2. Canary 전용 DaemonSet 정의

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter-canary
spec:
  selector:
    matchLabels:
      app: node-exporter
      version: canary
  template:
    metadata:
      labels:
        app: node-exporter
        version: canary
    spec:
      nodeSelector:
        canary: "true"                       # 라벨이 붙은 노드에만 배포
      containers:
        - name: node-exporter
          image: prom/node-exporter:v1.8.0   # 테스트할 새 이미지

 

📌 설명

nodeSelector를 통해 canary=true 노드에만 배포되도록 설정했습니다.

기존 DaemonSet과 구분을 위해 라벨과 이름을 분리했습니다.

 

✅ Canary DaemonSet이 정상적으로 동작함을 확인한 후, 메인 DaemonSet에 반영하면 됩니다.

 


5️⃣ Canary 확인 후 메인 DaemonSet 반영

kubectl set image daemonset/node-exporter node-exporter=prom/node-exporter:v1.8.0

 

📌 설명

Canary에서 검증된 이미지나 구성을 전체 노드에 반영할 때 사용하는 명령어입니다.

 


6️⃣ Canary DaemonSet 삭제

kubectl delete daemonset node-exporter-canary

 

📌 설명

테스트 목적의 Canary DaemonSet이 완료되면 제거하여 리소스를 정리합니다.

 


7️⃣ 롤아웃 전략 구성 시 고려사항

항목 설명
Canary 노드 테스트 대상 노드에서만 DaemonSet을 실행하도록 제한
롤아웃 중단 시점 배포가 자동 진행되지 않도록 pause 명령으로 제어
Canary 라벨 관리 라벨 누락 시 Canary DaemonSet이 배포되지 않음
기존 DaemonSet과 구분 라벨과 이름을 명확히 분리하여 혼동 방지

 

 


🔥 8️⃣ 결론

 

DaemonSet의 롤아웃 상태를 지속적으로 확인하고, 문제 발생 시 되돌릴 수 있는 전략을 마련해야 합니다.

전체 노드에 바로 변경을 적용하기보다, Canary 방식으로 일부 노드에 우선 적용해 안정성을 확보할 수 있습니다.

nodeSelector를 통해 Canary DaemonSet을 분리 배포한 후, 메인 DaemonSet에 반영하는 순서로 구성하는 것이 바람직합니다.

 

728x90