Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #4] DaemonSet Pod 재시작 전략과 장애 복구 패턴

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

 

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 설정을 필수로 구성하는 것이 바람직합니다.

 

728x90