Kubernetes에서 Application을 배포했는데 Pod가 실행되지 않고 계속 Pending 상태로 남아있는 경우가 있습니다.
많은 사용자가 Pending 상태를 보면 Container 문제라고 생각하지만, 실제로는 대부분 Pod가 실행될 Node를 찾지 못하는 Scheduling 문제입니다.
Kubernetes는 Pod를 생성할 때 자동으로 적절한 Worker Node를 선택합니다.
하지만 다음과 같은 상황에서는 Pod를 배치하지 못할 수 있습니다.
- Node CPU·Memory 부족
- Node 조건 불일치
- Resource Request 초과
- Storage 연결 실패
- Taints와 Toleration 문제
이때 Pod는 Pending 상태가 됩니다.
| 상태 | 의미 |
|---|---|
| Pending | Pod 생성 요청 후 실행 Node 대기 |
| Running | Container 정상 실행 |
| Failed | 실행 실패 |
| Succeeded | 작업 완료 |
Kubernetes Pending Pod 문제를 이해하면 Scheduler 동작 방식과 실제 Production 환경에서 발생하는 배포 문제 해결 방법을 알 수 있습니다.
Kubernetes Pending Pod란 무엇인가?
Pending은 Kubernetes가 Pod 생성 요청을 받았지만 아직 실행할 Node를 찾지 못한 상태입니다.
동작 과정:
Deployment 생성
↓
ReplicaSet 생성
↓
Pod 생성
↓
Scheduler 확인
↓
Node 선택 실패
↓
Pending 상태 유지
즉 Container가 시작되기 전 단계에서 발생하는 문제입니다.
Kubernetes Scheduler의 역할
Pending 문제를 이해하려면 Scheduler 구조를 알아야 합니다.
Scheduler는 생성된 Pod를 어떤 Node에서 실행할지 결정합니다.
구조:
API Server
↓
Scheduler
↓
Node 선택
↓
kubelet 실행
↓
Container 시작
Scheduler가 적절한 Node를 찾지 못하면 Pod는 Pending 상태가 됩니다.
Pending Pod 원인 1: Node Resource 부족
가장 흔한 원인입니다.
예:
Pod 요구 사항:
CPU Request: 4 Core
Memory Request: 8GB
현재 Node:
CPU 여유 부족
Memory 여유 부족
결과:
Scheduler:
“실행 가능한 Node 없음”
↓
Pending
확인:
kubectl describe pod pod-name
Event:
Insufficient cpu
Insufficient memory
Resource 상태를 확인해야 합니다.
Kubernetes Resource Request와 Pending 관계
Scheduler는 실제 사용량이 아니라 Request 값을 기준으로 Node를 선택합니다.
예:
Pod A
CPU Request:
2 Core
Memory Request:
4GB
Node에 해당 Resource 공간이 없으면 실행되지 않습니다.
확인:
kubectl describe node node-name
Resource 설계가 중요합니다.
Pending Pod 원인 2: NodeSelector 조건 불일치
Pod가 특정 Node에서만 실행되도록 설정한 경우 문제가 발생할 수 있습니다.
예:
Pod 설정:
nodeSelector:
gpu: true
하지만 Cluster:
GPU Label Node 없음
결과:
Scheduling 실패
확인:
kubectl get nodes --show-labels
Node Label을 확인해야 합니다.
Pending Pod 원인 3: Node Affinity 설정 문제
Affinity는 더 세밀한 Node 배치 조건을 제공합니다.
예:
조건:
SSD Storage Node에서 실행
↓
해당 Node 없음
↓
Pending
확인:
- nodeAffinity
- required 조건
- preferred 조건
잘못된 Affinity 설정은 배포 실패 원인이 됩니다.
Pending Pod 원인 4: Taints와 Tolerations 문제
Kubernetes Node에는 Taint를 설정할 수 있습니다.
예:
Master Node:
NoSchedule Taint 적용
↓
일반 Pod 실행 제한
Pod:
Toleration 없음
↓
Scheduling 실패
확인:
kubectl describe node node-name
Taint 설정을 확인해야 합니다.
Pending Pod 원인 5: Persistent Volume 문제
Storage가 필요한 Pod는 Volume 연결 문제로 Pending 상태가 될 수 있습니다.
구조:
Pod 생성
↓
PVC 요청
↓
PV 검색
↓
Storage 연결 실패
↓
Pending
확인:
kubectl get pvc
StorageClass와 PV 상태를 확인합니다.
Pending Pod 원인 6: Scheduler 문제
Scheduler 자체 문제도 발생할 수 있습니다.
확인:
kubectl get pods -n kube-system
확인:
- kube-scheduler 상태
- Event 오류
Control Plane 상태 확인이 필요합니다.
Kubernetes Pending Pod 분석 순서
실제 운영에서는 다음 순서로 확인합니다.
1단계
Pod 상태 확인
kubectl get pods
↓
2단계
Event 확인
kubectl describe pod pod-name
↓
3단계
Node Resource 확인
kubectl describe nodes
↓
4단계
Label / Affinity 확인
↓
5단계
Storage 확인
문제를 단계별로 좁혀가는 방식이 중요합니다.
Kubernetes Scheduler Event 해석
자주 발생하는 메시지:
| Event | 의미 |
|---|---|
| Insufficient cpu | CPU 부족 |
| Insufficient memory | Memory 부족 |
| No nodes available | 실행 Node 없음 |
| didn’t match node selector | 조건 불일치 |
| unbound immediate PersistentVolumeClaims | Storage 문제 |
Event는 Kubernetes 장애 분석에서 가장 중요한 정보입니다.
Pending Pod 해결 방법
원인에 따라 해결 방법이 다릅니다.
Resource 부족
해결:
- Node 추가
- Resource Request 조정
- Cluster Autoscaler 적용
Label 문제
해결:
- Node Label 수정
- Selector 조건 변경
Storage 문제
해결:
- PV 생성
- StorageClass 확인
Taint 문제
해결:
- Toleration 추가
- Node 설정 변경
Pending Pod와 Cluster Autoscaler 관계
Cloud 환경에서는 Cluster Autoscaler와 함께 사용됩니다.
구조:
Pod Pending 발생
↓
Node 부족 판단
↓
Cluster Autoscaler 실행
↓
Node 추가
↓
Pod 실행
자동 Infrastructure 확장이 가능합니다.
Pending Pod 예방 방법
운영 환경에서는 사전 설계가 중요합니다.
| 항목 | 방법 |
|---|---|
| Resource 관리 | Request 정확히 설정 |
| Node 관리 | 충분한 Capacity 확보 |
| Label 관리 | 배치 조건 검토 |
| Monitoring | Resource 감시 |
예측 가능한 운영 환경을 만들 수 있습니다.
Kubernetes Pending Pod와 Monitoring 관계
Monitoring 시스템을 사용하면 Resource 부족을 미리 확인할 수 있습니다.
확인:
- CPU 사용량
- Memory 사용량
- Node 상태
- Scheduling 실패
장애 발생 전에 대응할 수 있습니다.
자주 묻는 질문
Pending 상태는 Application 오류인가요?
대부분 Application 문제가 아니라 Scheduler가 실행 위치를 찾지 못하는 문제입니다.
Pod를 삭제하면 Pending이 해결되나요?
원인이 해결되지 않으면 다시 Pending 상태가 됩니다.
가장 먼저 확인해야 하는 명령어는 무엇인가요?
kubectl describe pod 명령어로 Event를 확인하는 것이 가장 빠릅니다.
마무리
Kubernetes Pending Pod는 Scheduler가 적절한 Node를 찾지 못했을 때 발생하는 대표적인 운영 문제입니다.
| 확인 항목 | 목적 |
|---|---|
| Pod Event | 원인 확인 |
| Node Resource | CPU·Memory 확인 |
| Label/Affinity | 배치 조건 확인 |
| PVC | Storage 문제 확인 |
Pending Pod 분석 방법을 이해하면 Kubernetes 환경에서 배포 실패 원인을 빠르게 찾고 안정적인 Production 운영 환경을 구축할 수 있습니다.
다음 글에서는 Kubernetes Resource 부족 문제를 다루는 Kubernetes Resource Request 완벽 가이드! Scheduler 배치 기준과 CPU·Memory 관리 구조 이해하기를 알아보겠습니다.