1️⃣ 개요
DaemonSet은 클러스터의 모든 노드에 에이전트 또는 특정 서비스를 자동으로 배포할 수 있는 구조입니다.
하지만 DaemonSet으로 배포된 Pod가 장애로 인해 CrashLoopBackOff 상태에 빠지거나 응답하지 않을 경우, 적절한 재시작 전략이 설정되어 있지 않으면 복구가 지연될 수 있습니다.
이번 글에서는 DaemonSet Pod의 상태를 감지하고 자동 복구할 수 있도록 Liveness Probe 및 재시작 전략을 설정하는 방법을 정리합니다.
2️⃣ DaemonSet Pod의 장애 유형과 대응 전략
장애 유형 | 설명 | 대응 방법 |
CrashLoopBackOff | 애플리케이션이 시작되자마자 종료되거나 실패함 | 재시작 정책 + Liveness Probe |
장기 무응답 상태 | 서비스는 살아있지만 응답이 없는 경우 | Liveness Probe 설정 필요 |
컨테이너 내부 무한루프 | 외형상 Running 상태지만 기능이 정지됨 | Exec 기반 Liveness 감지 |
✅ 적절한 재시작 전략과 Liveness Probe 설정은 장애 탐지 및 자동 복구의 핵심입니다.
3️⃣ DaemonSet의 재시작 정책 기본 이해
DaemonSet은 기본적으로 RestartPolicy: Always로 설정되어 있으며, 이 설정은 변경할 수 없습니다.
spec:
template:
spec:
restartPolicy: Always
📌 설명
• 이 설정은 DaemonSet의 필수 정책으로 모든 Pod이 자동으로 재시작되도록 구성됩니다.
• 단, 이 설정만으로는 장애 탐지를 수행하지 않기 때문에 별도의 Probe 설정이 필요합니다.
4️⃣ Liveness Probe를 통한 자동 복구 설정
✅ Liveness Probe - Exec 기반 예시 (내부 상태 점검)
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10 # 컨테이너가 시작된 후 최초 체크까지 대기 시간 (초)
periodSeconds: 5 # 헬스 체크 주기 (초)
failureThreshold: 3 # 몇 번 연속 실패 시 재시작할지
📌 설명
• /tmp/healthy 파일이 존재하면 “정상”, 없으면 “비정상”으로 판단합니다.
• 해당 파일을 삭제하거나 존재하지 않으면 Liveness Probe가 실패하게 되며, Kubernetes는 컨테이너를 자동으로 재시작합니다.
✅ Liveness Probe - HTTP 기반 예시 (웹 서버 체크)
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 2
failureThreshold: 5
📌 설명
• /health 엔드포인트에 HTTP GET 요청을 보내어 응답이 200 OK가 아니면 실패로 판단합니다.
• 지정된 횟수만큼 실패하면 Pod가 자동으로 재시작됩니다.
✅ HTTP 기반 Liveness는 웹 서버나 REST API 서비스를 운영할 때 권장됩니다.
5️⃣ DaemonSet 전체 구성 예제 (Liveness 포함)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: monitor-agent
spec:
selector:
matchLabels:
app: monitor-agent
template:
metadata:
labels:
app: monitor-agent
spec:
containers:
- name: monitor-agent
image: busybox
command: ["sh", "-c", "touch /tmp/healthy; sleep 3600"]
livenessProbe:
exec:
command: ["cat", "/tmp/healthy"] # 파일 존재 여부로 헬스 체크
initialDelaySeconds: 5 # 컨테이너 시작 후 첫 체크까지 대기 시간
periodSeconds: 5 # 체크 주기
failureThreshold: 2 # 연속 실패 횟수 기준
📌 설명
• monitor-agent는 모든 노드에서 실행되는 에이전트 역할입니다.
• /tmp/healthy 파일을 기준으로 헬스 체크를 수행하며, 파일이 없을 경우 재시작됩니다.
6️⃣ DaemonSet Pod 복구 상태 확인 및 모니터링
✅ 이벤트 확인
kubectl describe pod monitor-agent-xxxx
📌 설명
• Liveness Probe 실패 이력이나 컨테이너 재시작 횟수를 확인할 수 있습니다.
✅ 재시작 횟수 확인
kubectl get pods -o wide
출력 예시:
NAME READY STATUS RESTARTS NODE
monitor-agent-abc12 1/1 Running 3 node-1
📌 설명
• RESTARTS 수치를 통해 해당 Pod가 몇 번 재시작되었는지 확인할 수 있습니다.
• 이 수치가 지속적으로 증가한다면 장애 원인을 추적해봐야 합니다.
🔥 7️⃣ 결론
✔ DaemonSet은 기본적으로 자동 재시작을 지원하지만, Liveness Probe가 설정되지 않으면 상태 감지가 어렵습니다.
✔ exec 또는 http 기반 Liveness Probe를 설정하면 장애 탐지 및 자동 복구가 가능해집니다.
✔ 장애 발생 시 이벤트 로그와 재시작 횟수를 점검하여 원인을 추적할 수 있습니다.
✔ 특히 장기 실행되는 노드 에이전트들은 Liveness Probe 설정을 필수로 구성하는 것이 바람직합니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [DaemonSet 심화편 #6] DaemonSet 롤아웃 관리 및 Canary 배포 전략 구성 (0) | 2025.03.21 |
---|---|
📌 [DaemonSet 심화편 #5] DaemonSet과 Host 네트워크 및 호스트 경로 마운트 구성 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #3] 특정 노드에서만 DaemonSet 실행하는 방법 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #2] DaemonSet 업데이트 전략과 무중단 롤링 배포 적용 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #1] DaemonSet의 개념과 일반적인 활용 사례 (0) | 2025.03.21 |