1️⃣ 개요
DaemonSet은 클러스터의 모든 노드에 Pod를 배포하는 강력한 도구이지만, 업데이트 전략을 적절히 구성하지 않으면
애플리케이션이 일시적으로 중단되거나 비효율적으로 배포될 수 있습니다.
이번 글에서는 DaemonSet의 업데이트 전략의 개념을 이해하고, 무중단 롤링 배포(Rolling Update)를 적용하는 방법을 소개합니다.
2️⃣ DaemonSet 업데이트 전략이 필요한 이유
상황 | 문제점 | 업데이트 전략 필요성 |
이미지 버전 변경 | 기존 Pod가 중단되고 새로 생성됨 | 순차적 롤링 배포 필요 |
환경 변수 변경 | 모든 노드에서 한 번에 재시작 | 트래픽 손실 가능 |
설정 누락 시 | 업데이트 적용되지 않음 | 전략 명시 필요 |
✅ 업데이트 전략을 명확히 설정하지 않으면 수동 업데이트를 반복해야 하며, 장애나 서비스 중단 가능성이 커집니다.
3️⃣ DaemonSet의 기본 업데이트 전략 구성 방법
✅ RollingUpdate 전략을 명시적으로 설정
updateStrategy:
type: RollingUpdate # 롤링 업데이트 방식으로 지정
rollingUpdate:
maxUnavailable: 1 # 동시에 업데이트될 수 있는 최대 노드 수
📌 주석 설명
• type: RollingUpdate : DaemonSet의 기본 동작을 순차 업데이트로 전환합니다.
• maxUnavailable: 1 : 전체 노드 중 최대 1개의 Pod만 동시에 중단될 수 있도록 설정합니다.
예를 들어, 노드가 10개면 한 번에 1개씩만 업데이트되므로 서비스 안정성을 유지할 수 있습니다.
✅ 이 전략을 사용하면 DaemonSet이 점진적으로 모든 노드의 Pod를 재생성합니다.
✅ 전체 DaemonSet 구성 예제 (Node Exporter 기준)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
labels:
app: node-exporter
spec:
selector:
matchLabels:
app: node-exporter # Pod 선택 기준
updateStrategy:
type: RollingUpdate # 업데이트 전략 설정
rollingUpdate:
maxUnavailable: 1 # 무중단 배포를 위한 제한
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:v1.7.0 # 특정 버전 명시 (버전 업데이트 테스트 가능)
ports:
- containerPort: 9100 # Node Exporter 기본 포트
📌 설명
• 이 설정은 node-exporter를 모든 노드에 배포하면서도, 최대 1개의 노드에서만 Pod를 동시에 재시작합니다.
• 운영 중에도 무중단으로 배포가 가능하도록 구성되었습니다.
4️⃣ DaemonSet 롤링 업데이트 수행 명령어
✅ 이미지 버전 변경 시 적용 방법
kubectl set image daemonset/node-exporter node-exporter=prom/node-exporter:v1.7.1
📌 설명
• DaemonSet에 정의된 node-exporter 컨테이너 이미지를 v1.7.1로 변경합니다.
• 이 변경 사항은 RollingUpdate 전략에 따라 점진적으로 각 노드에 적용됩니다.
✅ 수동 롤링 업데이트 트리거 (내용은 동일하나 재시작 필요할 때)
kubectl rollout restart daemonset node-exporter
📌 설명
• 구성 값은 바뀌지 않았지만, 재시작이 필요할 때 사용하는 명령어입니다.
• 모든 노드에서 Pod가 순차적으로 재시작됩니다.
✅ 롤링 업데이트 상태 확인
kubectl rollout status daemonset node-exporter
📌 설명
• 업데이트가 정상적으로 완료되었는지 확인할 수 있습니다.
• 아직 업데이트 중인 노드가 있으면 출력에 남아있고, 모두 완료되면 메시지가 종료됩니다.
5️⃣ DaemonSet 업데이트 실패 시 롤백 방법
✅ 히스토리 확인
kubectl rollout history daemonset node-exporter
📌 설명
• 이전에 배포된 DaemonSet의 버전과 변경 사항을 확인할 수 있습니다.
✅ 롤백 실행
kubectl rollout undo daemonset node-exporter
📌 설명
• 마지막 안정된 버전으로 DaemonSet 구성을 되돌릴 수 있습니다.
• 롤링 업데이트와 동일한 방식으로 Pod가 다시 재시작됩니다.
6️⃣ DaemonSet 업데이트 전략 적용 시 고려 사항
항목 | 설명 |
Pod 수 | 노드 수가 많을 경우 maxUnavailable 값을 늘릴 수 있음 |
네트워크 부하 | 동시에 많은 Pod가 재시작되면 네트워크/디스크에 부담 가능 |
상태 점검 | kubectl get ds -o wide, rollout status로 상태 지속 확인 필요 |
Sidecar 사용 시 | Istio, Linkerd 등과 연동되는 경우 재시작 순서에 주의 |
✅ 특히 운영 환경에서는 maxUnavailable 값을 1~2 수준으로 유지하는 것을 추천합니다.
🔥 7️⃣ 결론
✔ DaemonSet은 기본적으로 자동 롤링 업데이트가 활성화되지 않으므로 명시적 설정이 필요합니다.
✔ RollingUpdate 전략을 활용하면 무중단 배포가 가능하며, 서비스 안정성을 유지할 수 있습니다.
✔ 업데이트 적용 후에는 rollout 명령어를 통해 상태를 반드시 확인해야 합니다.
✔ 이미지 변경, 환경 변수 변경 등 모든 변경 사항에 이 전략이 적용됩니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [DaemonSet 심화편 #4] DaemonSet Pod 재시작 전략과 장애 복구 패턴 (0) | 2025.03.21 |
---|---|
📌 [DaemonSet 심화편 #3] 특정 노드에서만 DaemonSet 실행하는 방법 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #1] DaemonSet의 개념과 일반적인 활용 사례 (0) | 2025.03.21 |
📌 [StatefulSet 심화편 #21] StatefulSet과 Horizontal Pod Autoscaler(HPA) 적용 방법 (0) | 2025.03.15 |
📌 [StatefulSet 심화편 #30] StatefulSet을 활용한 고성능 데이터 저장소 운영 전략 (0) | 2025.03.15 |