글 목록으로 돌아가기
최오키 개발블로그 3분 읽기

Kubernetes에서 Pending 상태의 Pod 원인과 해결 방법

Kubernetes에서 Pod가 Pending 상태로 남아 있는 원인을 분석하고, 이를 해결하기 위한 방법을 정리했습니다.


증상 및 오류 메시지

Kubernetes 클러스터에서 Pod가 Pending 상태로 남아 있는 경우, 이는 스케줄러가 해당 Pod를 적절한 노드에 배치하지 못하고 있다는 것을 의미합니다. 이러한 상태는 다양한 원인으로 발생할 수 있으며, 일반적으로는 리소스 부족, 노드의 문제, 또는 설정 오류 등이 있습니다. 예를 들어, 아래와 같은 명령어로 Pod의 상태를 확인할 수 있습니다.

kubectl get pods --all-namespaces

이 명령어를 실행했을 때, Pod의 상태가 Pending으로 표시되면 문제를 해결하기 위한 원인 분석이 필요합니다.

대표 원인

Pod가 Pending 상태에 머무르는 주된 원인은 다음과 같습니다:

  1. 리소스 부족: 요청된 CPU나 메모리 리소스가 클러스터 내의 노드에서 사용 가능한 자원보다 많을 경우.
  2. 노드의 상태 문제: 노드가 NotReady 상태일 경우, 해당 노드에 Pod를 스케줄할 수 없습니다.
  3. Affinity 및 Taints: Pod의 Affinity 설정이나 노드의 Taints가 맞지 않아 스케줄링이 되지 않는 경우.
  4. PriorityClass: 특정 PriorityClass가 설정된 Pod가 다른 Pod보다 우선적으로 스케줄되어야 할 경우, 일반 Pod가 Pending 상태로 남을 수 있습니다.

확인 명령어

Pod의 상태와 이벤트를 확인하기 위해 아래 명령어를 사용할 수 있습니다:

kubectl describe pod [pod-name] -n [namespace]

이 명령어를 통해 Pod의 상세 정보와 이벤트 로그를 확인할 수 있습니다. 로그에서 “FailedScheduling” 메시지가 포함되어 있다면, 스케줄링 실패 원인을 파악할 수 있습니다.

해결 절차

  1. 리소스 확인: 클러스터의 리소스를 확인하여 충분한 CPU와 메모리가 있는지 확인합니다. 아래 명령어로 노드의 리소스를 확인할 수 있습니다:
    kubectl describe nodes
  2. 노드 상태 확인: 노드가 정상 상태인지 확인합니다. 만약 NotReady 상태라면, 해당 노드를 재시작하거나 문제를 해결해야 합니다.
  3. Affinity 및 Taints 설정 점검: Pod의 Affinity 설정이나 노드의 Taints를 점검하여 설정이 올바른지 확인합니다. 필요시 설정을 수정합니다.
  4. PriorityClass 조정: PriorityClass가 설정된 Pod가 우선적으로 스케줄될 수 있도록 조정합니다. 필요시 PriorityClass의 우선순위를 변경합니다.

흔한 실수

  • 리소스 요청을 과도하게 설정하여 Pod가 스케줄되지 않는 경우가 많습니다. 이럴 경우, 요청 값을 조정하여 해결할 수 있습니다.
  • 노드의 상태를 확인하지 않고 Pod의 문제로만 진단하는 경우도 있습니다. 노드 상태를 항상 확인하는 습관을 들이는 것이 좋습니다.

재발 방지 체크리스트

  • 클러스터의 리소스를 정기적으로 모니터링하여 부족한 리소스를 미리 확보합니다.
  • Pod의 리소스 요청을 적절하게 설정하여 스케줄링 문제를 예방합니다.
  • 노드의 상태를 주기적으로 점검하여 문제가 발생하지 않도록 합니다.
  • Affinity, Taints, PriorityClass 설정을 명확히 이해하고 문서화하여 팀원들과 공유합니다.

이와 같은 절차를 통해 Kubernetes에서 Pod가 Pending 상태로 남아 있는 문제를 해결하고, 향후 발생할 수 있는 유사한 문제를 예방할 수 있습니다.

실무 적용 체크리스트

  • Kubernetes Pending pod 원인 분석을 적용하기 전에 현재 운영 환경의 기준값과 예외 상황을 먼저 정리합니다.
  • 변경 전후로 확인할 지표를 정하고, 문제가 생겼을 때 되돌릴 수 있는 절차를 문서화합니다.
  • 한 번에 모든 서버나 서비스에 적용하기보다 작은 범위에서 검증한 뒤 점진적으로 확대합니다.
  • 담당자, 확인 시간, 장애 판단 기준을 명확히 남겨 같은 문제가 반복될 때 빠르게 대응할 수 있게 합니다.

참고한 자료

Related posts

Grafana Prometheus 쿼리 타임아웃 문제 해결하기 Other Git push 시 발생하는 non-fast-forward 오류 해결 방법 Other HTTP 504 Gateway Timeout 오류의 원인과 해결 방법