📌 [DaemonSet 심화편 #6] DaemonSet 롤아웃 관리 및 Canary 배포 전략 구성
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에 반영하는 순서로 구성하는 것이 바람직합니다.