728x90
1️⃣ 개요
DaemonSet은 노드마다 하나의 Pod를 실행하는 구조이기 때문에, 노드 재부팅이나 업데이트 등의 이벤트가 발생할 때 전체 서비스의 가용성에 영향을 줄 수 있습니다.
이때 **PodDisruptionBudget(PDB)**을 활용하면, 동시에 중단될 수 있는 Pod의 수를 제한하여 가용성을 유지할 수 있습니다.
이번 글에서는 DaemonSet과 PDB를 연동하여 안정적인 유지보수 및 노드 관리 전략을 구성하는 방법을 정리합니다.
2️⃣ PodDisruptionBudget(PDB)란?
항목 | 설명 |
PDB(PodDisruptionBudget) | 계획된 중단(Drain, Eviction 등) 중에 최소한으로 살아 있어야 하는 Pod 수 또는 비율을 정의하는 리소스 |
대상 | 일반적으로 Deployment, StatefulSet, DaemonSet 등에 적용 가능 |
목적 | 유지보수나 노드 업데이트 시 서비스 중단을 방지하기 위해 사용 |
✅ PDB는 **강제 종료가 아닌 ‘계획된 중단’**에만 영향을 미칩니다. 장애로 인한 강제 삭제에는 작동하지 않습니다.
3️⃣ DaemonSet과 PDB의 관계
DaemonSet은 기본적으로 노드마다 하나의 Pod만 존재하기 때문에,
PDB를 사용할 경우 주의할 점이 있습니다:
- DaemonSet Pod는 기본적으로 Eviction API의 대상이 아님 (수동으로 taint/drain 해야 적용됨)
- 단, 특정 Pod만 강제로 중단되도록 유도할 경우 PDB를 활용할 수 있음
✅ 따라서 DaemonSet에 PDB를 적용하는 경우는 제한적이며, 조건부로 사용하거나 참고 용도로 활용할 수 있습니다.
4️⃣ 예제: DaemonSet에 PodDisruptionBudget 적용
✅ PDB 정의 예시 (최소 1개 Pod 유지)
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: ds-pdb
spec:
minAvailable: 1 # 최소 1개 이상의 Pod이 항상 Running 상태여야 함
selector:
matchLabels:
app: node-exporter # 대상 DaemonSet과 동일한 라벨
📌 설명
- minAvailable을 설정하면 지정된 수 이상의 Pod이 항상 살아 있어야 하며,
그렇지 않으면 해당 Pod에 대한 Eviction이 거부됩니다. - matchLabels는 DaemonSet과 동일한 라벨을 지정해야 정상 동작합니다.
✅ 예시 DaemonSet (node-exporter)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:latest
📌 설명
- 위 DaemonSet과 라벨이 일치하도록 PDB를 구성해야 적용됩니다.
5️⃣ PDB 동작 확인 방법
✅ 강제 노드 드레인 시 PDB 거부 확인
kubectl drain node-1 --ignore-daemonsets
📌 설명
- DaemonSet은 기본적으로 --ignore-daemonsets 옵션이 있어 영향을 받지 않지만,
이 옵션을 제거하고 Pod에 Eviction을 시도하면 PDB 조건에 따라 거부될 수 있습니다.
✅ Eviction 수동 테스트
kubectl evict pod node-exporter-abcde
📌 설명
- 해당 Pod가 PDB 조건을 만족하지 못하면 Eviction이 거부됩니다.
- 이를 통해 PDB 설정이 정상적으로 작동하는지 확인할 수 있습니다.
6️⃣ DaemonSet 운영 중 PDB 설정 시 고려사항
항목 | 설명 |
DaemonSet Pod는 drain 시 기본적으로 보호됨 | --ignore-daemonsets 옵션이 default |
PDB는 수동 Eviction이나 Custom Controller에 의한 중단 통제 시 유용 | 일반 drain에는 직접 영향 없음 |
minAvailable 또는 maxUnavailable 중 하나만 설정 가능 | 동시에 둘 다 설정하면 에러 발생 |
다수 노드에 DaemonSet이 배포된 경우에만 PDB 효과 발생 | 단일 노드만 있는 경우는 의미 없음 |
🔥 7️⃣ 결론
✔ PodDisruptionBudget은 계획된 중단 작업 중 Pod 수를 제한하여 서비스 안정성을 유지할 수 있는 리소스입니다.
✔ DaemonSet은 기본적으로 Eviction 대상이 아니지만, 수동 중단이나 커스텀 환경에서 PDB와 함께 사용할 수 있습니다.
✔ 라벨을 정확히 일치시켜야 PDB가 올바르게 적용됩니다.
✔ 소규모 노드 환경에서는 효과가 제한적일 수 있으므로 환경에 맞게 전략을 설계해야 합니다.
728x90
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [DaemonSet 심화편 #10] DaemonSet과 Lifecycle Hook: 시작 및 종료 시 작업 자동화 (0) | 2025.03.22 |
---|---|
📌 [DaemonSet 심화편 #9] DaemonSet 리소스 관리: CPU와 메모리 제한 설정 전략 (0) | 2025.03.22 |
📌 [DaemonSet 심화편 #7] DaemonSet과 Tolerations: Taint가 적용된 노드에 Pod 배포하기 (0) | 2025.03.22 |
📌 [DaemonSet 심화편 #6] DaemonSet 롤아웃 관리 및 Canary 배포 전략 구성 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #5] DaemonSet과 Host 네트워크 및 호스트 경로 마운트 구성 (0) | 2025.03.21 |