Pending Pod의 scheduler 이벤트를 시작점으로 리소스·taint·affinity, PVC 바인딩, Node Ready·Pressure 상태를 분리하고 데이터 손실 없는 조치만 선택합니다.
Pod PendingFailedSchedulingunbound immediate PersistentVolumeClaimsPVC PendingNode NotReadyDiskPressure MemoryPressure
환경Kubernetes v1.35·v1.36·v1.37 · CSI/PersistentVolume · Linux worker Node
분류컨테이너
검토일2026-09-02
진행5단계 · 조회 우선
SAFE OPERATING BOUNDARY
중단·복구 기준부터 확인하세요
STOP CONDITIONS
여기서는 멈추세요
Bound PVC 삭제, finalizer 강제 제거, PV reclaimPolicy 변경이 필요해 보이면 데이터 소유자와 스토리지 담당자 승인 전 중단합니다.
control plane 다수 Node가 NotReady이거나 etcd/API 응답도 불안정하면 개별 workload 조치 대신 클러스터 장애 절차로 전환합니다.
현재 cordon 이유, workload disruption budget, 스토리지 백업 상태를 모르면 drain·uncordon·재부팅을 실행하지 않습니다.
ROLLBACK
복구 기준
workload 변경은 적용 전 백업 manifest와 정상 Git revision으로 복원하고 rollout을 검증합니다. PVC/PV는 삭제로 롤백하지 않으며 storageClass·reclaimPolicy·실데이터 백업을 확인한 공급자 복구 절차를 따릅니다. uncordon한 Node에 문제가 재발하면 새 배치를 멈출지 운영 영향과 PDB를 확인해 승인받습니다.
ESCALATION PACK
담당자에게 전달할 자료
FailedScheduling 원문과 Pod request·selector·affinity·toleration, Node allocatable·taint
PVC·StorageClass·PV 상태와 CSI Warning 이벤트, 실제 데이터 백업·reclaimPolicy 정보
Node conditions·lease·kubelet/containerd 로그와 변경 전후 Pod Ready·PVC Bound 결과
2026년 9월 2일 기준 upstream 공식 문서와 현재 지원 버전을 대조했습니다. 먼저 읽기 전용 명령으로 사실을 확인하고, 변경 명령은 영향·백업·복구 경로를 확인한 뒤 승인된 대상에만 적용하세요. <...> 자리표시자는 승인된 리터럴 값으로 직접 치환하고 외부 입력으로 shell 명령을 조립하거나 eval하지 마세요.
BEFORE YOU START
이런 증상에서 시작합니다
Pod가 Pending 상태에서 Node에 배치되지 않음
이벤트에 FailedScheduling 또는 Insufficient cpu/memory가 표시됨
이벤트 메시지의 workload 이름·Node·PVC 등 내부 식별정보는 외부 공유 전 마스킹합니다.
request·selector·affinity·toleration
kubectl get pod -n <NAMESPACE> <POD> -o jsonpath='{range .spec.containers[*]}{.name}{" requests="}{.resources.requests}{"\n"}{end}{"nodeSelector="}{.spec.nodeSelector}{"\naffinity="}{.spec.affinity}{"\ntolerations="}{.spec.tolerations}{"\n"}'
전체 YAML 대신 스케줄링 진단 필드만 조회합니다. label 값과 topology 정보는 내부 자산 정보일 수 있어 외부 공유 전 마스킹합니다.
Node allocatable·taint·조건
kubectl get nodes -o custom-columns='NAME:.metadata.name,CPU:.status.allocatable.cpu,MEMORY:.status.allocatable.memory,PODS:.status.allocatable.pods,TAINTS:.spec.taints[*].key'
필요한 수용량과 taint key만 조회합니다. Node 이름도 내부 자산 정보이므로 외부 공유 전에 마스킹합니다.
결과 읽기
Insufficient는 request 대비 allocatable 부족, untolerated taint는 정책 불일치, node affinity/selector는 적합한 label의 Node 부재를 뜻합니다.
다음 판단
용량 증설, workload request 조정, label/affinity 수정 중 원인에 맞는 하나만 변경안으로 준비합니다.
Deployment에는 literal env.value·annotation·내부 URL, PVC에는 storageClass·volumeName·annotation이 포함될 수 있습니다. 전용 0700 디렉터리와 0600 파일에서만 보관하고 원문을 외부에 공유하지 않습니다.