Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #22] DaemonSet이 적용되지 않는 노드 감지 및 복구 자동화 방안

ygtoken 2025. 3. 22. 21:05
728x90

1️⃣ 개요

DaemonSet은 클러스터의 모든 노드에 Pod을 하나씩 자동으로 배포하는 구조입니다.
하지만 다양한 이유로 인해 특정 노드에 DaemonSet Pod이 배포되지 않거나, 실패한 상태로 남는 경우가 있습니다.

이 글에서는 DaemonSet이 일부 노드에 정상적으로 배포되지 않았을 때 이를 자동으로 감지하고, 복구하는 방법에 대해 설명합니다.


2️⃣ DaemonSet이 노드에 배포되지 않는 주요 원인

유형 설명
Taint/Toleration 불일치 해당 노드에 Taint가 설정되어 있고, DaemonSet이 이를 Toleration하지 않음
NodeSelector/NodeAffinity 조건 불일치 노드의 라벨 조건과 맞지 않아 스케줄링에서 제외됨
리소스 부족 CPU, 메모리 부족으로 스케줄링 불가
Pod 스케줄러 오류 스케줄링 중 실패 또는 충돌 발생
노드 상태 이상 NotReady 또는 SchedulingDisabled 상태일 경우

✅ 이 모든 경우에 DaemonSet은 일부 노드에 배포되지 않은 채로 남을 수 있습니다.


3️⃣ 현재 배포 상태 확인 명령어

kubectl get daemonset -n <namespace>

 

출력 예시:

NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
log-agent       5         4         4       4            4            <none>         1h

📌 설명

  • DESIRED 수(노드 수)와 CURRENT, READY 수가 일치하지 않으면 일부 노드에 배포되지 않은 상태입니다.

4️⃣ 어떤 노드에 DaemonSet이 빠졌는지 확인하기

kubectl get pods -o wide -l app=log-agent -n <namespace>
kubectl get nodes

✅ 비교하여 Pod이 없는 노드를 찾을 수 있습니다.

또는 다음 스크립트를 통해 자동으로 누락된 노드를 탐지할 수 있습니다:

# 모든 노드 목록
nodes=$(kubectl get nodes -o jsonpath='{.items[*].metadata.name}')

# DaemonSet이 배포된 노드 목록
pods=$(kubectl get pods -n kube-system -l app=log-agent -o jsonpath='{.items[*].spec.nodeName}')

# 누락된 노드 출력
for node in $nodes; do
  echo $pods | grep -w $node >/dev/null || echo "❗ DaemonSet 누락된 노드: $node"
done

📌 설명

  • log-agent DaemonSet이 배포되지 않은 노드를 자동으로 출력합니다.

5️⃣ 자동 감지 및 알림 시스템 구성 방안

구성 요소 설명
CronJob 일정 주기로 누락 노드 감지 스크립트 실행
ConfigMap + Script 탐지 로직을 ConfigMap에 저장하고 Pod에서 실행
알림 연동 감지 결과를 Slack, Email, Alertmanager 등으로 전송

예시: curl -X POST를 이용해 슬랙 웹훅 연동 가능


6️⃣ 복구 전략

상황 대응 방법
노드 조건 불일치 NodeSelector, Toleration 조건 확인 및 수정
리소스 부족 리소스 쿼터 확인, 스케줄링 제한 해제
노드 상태 이상 노드 상태 점검 후 cordon, uncordon, 재등록 수행
이미지 문제 이미지 태그, 레지스트리 접근 권한 재확인

🔥 7️⃣ 결론

DaemonSet이 모든 노드에 배포되지 않을 수 있으므로 주기적으로 상태를 점검하는 것이 중요합니다.
노드 라벨, Taint/Toleration, 리소스 상태, 스케줄러 문제 등 다양한 원인을 고려하여 탐지 및 복구 전략을 마련해야 합니다.
자동화된 감지 스크립트와 알림 시스템을 통해 운영의 신뢰성을 높일 수 있습니다.

 

728x90