EKS CronJob Pending 현상: “Preemption is not helpful for scheduling” 원인 분석

문제 현상

EKS 환경에서 특정 CronJob 실행 시 다음과 같은 메시지와 함께 Pod가 Pending 상태에 머무르며 일정 시간 이후에야 실행되는 현상이 발생했습니다:

Warning  FailedScheduling  pod-name  0/7 nodes are available: Preemption is not helpful for scheduling

원인 분석

이 메시지는 Kubernetes 스케줄러가 다음과 같은 조건 중 하나 이상으로 인해 Pod를 즉시 스케줄하지 못했음을 의미합니다:

1. 리소스 부족

  • 요청한 resources.requests 값(CPU, 메모리 등)이 현재 어느 노드에도 수용되지 않는 경우 발생
  • 예: CPU 2코어 요청, 노드당 남은 CPU가 모두 1.5 미만일 때

2. 스케줄 조건 미충족 (Affinity, Toleration 등)

  • nodeAffinity, tolerations 등이 설정되어 특정 노드만 사용 가능한 경우
  • 해당 조건을 만족하는 노드에 자원이 없으면 스케줄링 불가

3. Preemption으로도 해결 불가

  • 우선순위가 낮은 Pod가 없거나, 중단시켜도 충분한 자원이 확보되지 않는 경우
  • PodDisruptionBudget(PDB), system-critical Pod 등으로 인해 Preemption이 제한될 수도 있음

4. Soft Affinity 조건이 너무 좁은 경우

  • 실행 환경을 제한하기 위해 preferredDuringSchedulingIgnoredDuringExecution 등을 활용했지만 실제로는 선택 가능한 노드가 거의 없음

해결 방법

  • 리소스 요청 조정: 필요 이상으로 높은 CPU/메모리 요청값을 현실적인 수준으로 조정
  • 노드 오토스케일링 확인: 새로운 노드가 자동 생성될 수 있도록 설정
  • Affinity 및 Toleration 점검: 지나치게 좁은 조건은 없는지 확인
  • 우선순위 클래스 점검: priorityClassName을 사용 중이라면 적절한 값인지 확인

디버깅 팁

다음 명령어로 Pod의 상태와 스케줄 실패 이유를 상세히 확인할 수 있습니다:

kubectl describe pod 

예시 출력:

0/7 nodes are available: 3 Insufficient cpu, 4 node(s) didn't match node selector

마무리

해당 메시지는 일시적 리소스 부족 또는 제한된 스케줄 조건 때문에 발생하는 경우가 많습니다.
특히 CronJob처럼 정해진 시간에 실행되는 작업은 클러스터 리소스 상황에 민감하므로, 스케줄 조건과 리소스 사용량을 정기적으로 점검하는 것이 중요합니다.

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다