Kubernetes/Kubernetes Advanced

📌 [Job 심화편 #3] Job 실행 중 Node 장애 시 복구 시나리오 분석

ygtoken 2025. 3. 25. 15:58
728x90

 

1️⃣ 개요

 

Job은 일회성 작업 또는 배치 작업을 위한 중요한 리소스입니다.

하지만 Job 실행 중 해당 Pod이 올라간 노드가 장애(예: 전원 다운, 네트워크 단절) 상태가 되면, Job의 처리 흐름이 중단될 수 있습니다.

 

이 글에서는 Job이 노드 장애 상황에서 어떻게 반응하는지, 그리고

복구를 위해 어떤 설정을 적용해야 하는지에 대해 설명합니다.

 


2️⃣ 기본 동작 원리

조건 Kubernetes의 기본 반응
Job Pod 실행 중 노드가 다운됨 해당 Pod이 Unknown 또는 Terminating 상태로 유지됨
Kubelet이 응답 불가 상태 Pod이 삭제되지 않고 그대로 남음
일정 시간 경과 후 Controller가 Pod을 새로 생성할 수 있음 (노드 상태 감지 후 재시도)

✅ 이 과정은 빠르게 전환되지 않으며, 일부 설정이 없으면 Job이 진행되지 않고 멈춘 상태로 대기할 수 있습니다.

 


3️⃣ 문제 예시 상황

Job이 실행되던 노드가 갑자기 전원 OFF됨

Job Controller는 해당 Pod이 여전히 “실행 중”으로 간주

실제로는 실행되지 않음

새로운 Pod을 생성하지 못해 Job이 무기한 대기

 


4️⃣ 해결 전략 요약

전략 설명
activeDeadlineSeconds 설정 무한 대기 방지 (전체 실행 시간 제한)
Pod 삭제 감시 노드 장애 감지 시 수동 또는 자동으로 해당 Pod 삭제
TTL 설정 완료 후 자원 정리
스케줄러에 taint 감지 기능 활용 장애 노드에 Pod 재스케줄 방지

 

 


5️⃣ 예제 Job: 노드 장애 감지를 위한 제한 포함

apiVersion: batch/v1
kind: Job
metadata:
  name: resilient-job                      # Job 이름
spec:
  backoffLimit: 2                          # 실패 시 최대 2회 재시도 허용
  activeDeadlineSeconds: 180              # 전체 실행 제한 시간 3분
  template:
    spec:
      restartPolicy: OnFailure             # Pod 실패 시 재시작 허용
      containers:
        - name: unstable-work
          image: busybox
          command:
            - sh
            - -c
            - |
              echo "작업 시작"; sleep 600   # 의도적으로 오래 걸리는 작업

📌 설명 요약

sleep 600으로 인해 Job이 긴 시간 실행됩니다.

도중에 노드가 장애가 나면, activeDeadlineSeconds를 통해 무한 대기를 방지합니다.

 


6️⃣ 수동 복구 절차 예시

# Job에 연결된 Pod 확인
kubectl get pod -l job-name=resilient-job

# Pod 상태가 Unknown 또는 Terminating일 경우 강제 삭제
kubectl delete pod <pod-name> --force --grace-period=0

📌 수동 삭제 후, Job 컨트롤러는 새로운 Pod을 다시 생성하여 작업을 재시작합니다.

 


7️⃣ 자동화된 복구 설계 팁

구성 요소 설명
livenessProbe Pod이 실제로 동작 중인지 감지하여 실패 처리 유도 가능
taint-based eviction 노드 장애 감지 시 Pod 강제 제거 정책 활성화
cluster autoscaler 비정상 노드 감지 시 자동 제거 및 재배치 가능
controller manager 설정 --node-monitor-grace-period, --pod-eviction-timeout 설정 최적화 가능

 

 


🔥 8️⃣ 결론

 

✔ Job이 실행 중인 노드가 장애를 겪으면, 작업이 멈춘 채로 대기할 수 있습니다.

activeDeadlineSeconds, 수동 Pod 정리, 스케줄러 감지 기능 등을 통해 이러한 상황을 복구할 수 있습니다.

✔ 장애 상황에서 자동 복구 흐름을 구축하려면 노드 헬스체크 정책과 Pod 재스케줄링에 대한 이해가 필요합니다.

 

728x90