インフラ作業支援ラボInfra Support Lab ← ガイド一覧← 戻る

KubernetesのPodがPendingのままになる原因|FailedScheduling・Node・PVC

KubernetesでPodがPendingのまま変わらないとき、ノードへスケジュールできない問題と、配置後のコンテナ準備の問題を分けて調査するガイドです。

この記事の目的

PodのConditionsとEventsから、リソース・Node制約・ストレージ・イメージ取得のどれが原因か絞ります。

まず確認すること

kubectl describe podでPodScheduled条件とEventsを確認し、FailedSchedulingの有無を調べます。

本番作業前:requests削減やtaint削除、PVC削除を原因未確認のまま行わないでください。 app・APP・POD_NAMEなどは説明用です。作業前にcontext・namespace・対象オブジェクトを照合してください。

1. Pendingが意味する範囲

PendingはPodが受け付けられてから、すべてのコンテナが正常に開始できるまでの段階を含みます。まだNodeに配置されていない場合だけでなく、配置後のイメージ取得・Volume準備などで止まる場合もあります。

kubectlの一覧に表示されるステータスと、Podのstatus.phaseは同じ意味とは限らないので、詳細情報を確認します。

2. まずkubectlで状態を集める

kubectl config current-context kubectl get pods -n app -o wide kubectl describe pod POD_NAME -n app kubectl get events -n app --sort-by=.metadata.creationTimestamp # phaseとConditionsが分かる詳細(機密情報を含む可能性) kubectl get pod POD_NAME -n app -o yaml

kubectl describe podのEventsからFailedSchedulingが出ていればscheduler側の理由を調べます。PodScheduled=TrueでNode名がある場合はImagePull・Mount・ContainerCreatingなど別の準備段階を疑います。

3. FailedSchedulingの理由別に分ける

イベント例想定される領域次の確認
Insufficient cpuPodのCPU requestsとNode allocatablePod要求量・各Node割当可能量
Insufficient memoryPodのメモリrequestsとNode allocatable実測使用率ではなくschedulerの要求量
untolerated taintNode taintとPod tolerations隔離ポリシーを理解して合わせる
didn't match Pod's node affinity/selectornodeSelector・affinity・ラベルPod側制約とNodeラベル
unbound immediate PersistentVolumeClaimsPVC・StorageClass・ProvisionerPVCの状態とvolumeBindingMode
Node not readyNode条件・メンテナンス状態Node可用性と運用状況
注意:「Insufficient memory」を見てNodeの空きメモリだけ確認するのは不十分です。スケジューラのリソース判断にはrequests・allocatable・割当済み要求量が関係します。

4. Node・requests・affinityの調査

kubectl get nodes -o wide kubectl describe node NODE_NAME # Pod要求リソースやスケジューリング条件 kubectl describe pod POD_NAME -n app # Metric Serverがある環境のみ kubectl top nodes

NodeのAllocated resourcesはPodのrequests/limitsに基づく情報であり、瞬間的なCPU・メモリ使用率とは異なります。kubectl topが使えなくても、schedulerのEventsやNode定義から確認できます。

注意:RBACによりNodeを参照できない場合はForbiddenを確認し、必要な情報を権限を持つ担当者へ依頼します。

5. PVCがPendingになっているとき

kubectl get pvc -n app kubectl describe pvc PVC_NAME -n app kubectl get storageclasses

PVCの容量・StorageClass・accessModes・Provisioner・Storage容量を確認します。WaitForFirstConsumerはPodの配置とvolumeバインドを連動させるため、PVCだけがPendingという理由で即異常とは断定できません。

危険操作:PVCやPVを原因不明のまま削除しないでください。ReclaimPolicy・ストレージプロバイダー設定によっては実データが削除されます。

6. Nodeへ配置済みだがPendingの場合

PodScheduled=Trueでもコンテナの作成・マウント・イメージ取得が進まないことがあります。ErrImagePull等の理由が出ていれば、CPU不足ではなくImagePullBackOff・認証/通信の切り分けへ進みます。Volumeのマウント失敗ならPod Eventsやkubelet側情報を確認します。

7. Pendingの原因別対処・変更前チェック

想定例(実測ではありません):0/3 nodes are available: 3 Insufficient cpu はNodeの現在使用率だけではなく、Podのrequestsと割当可能量・予約済み要求量の確認が必要な状態です。まずPodScheduled・配置Node・FailedScheduling Eventsを照合します。

# 参照のみ:Podの配置先と資源要求、PVC状況 kubectl describe pod POD_NAME -n app kubectl get pod POD_NAME -n app -o jsonpath='{.spec.nodeName}' kubectl get nodes -o wide kubectl get pvc -n app
確認結果・想定イベント次に取る具体的な行動
Insufficient cpu / Insufficient memoryPod requests、Node allocatable/Allocated resources、他Podの予約を比較。要求量が過大なら根拠を確認し管理元で見直すか、運用者へ容量拡張を依頼。原因確認前にrequestsを削らない
untolerated taintNodeのtaint目的とPodのtolerationsを照合。隔離ポリシーを侵さない範囲でスケジューリング設計を調整。Node側のtaintを安易に除去しない
didn't match node affinity/selectorPod側のnodeSelector/affinityとNodeラベルを照合し、管理元の正しい配置制約を修正。ラベルを無条件に変更しない
unbound immediate PersistentVolumeClaimsPVC、StorageClass、provisioner、容量、accessModesを確認。WaitForFirstConsumerならPod配置との連動を踏まえ判断。PVC/PVは削除しない
PodScheduled=True / FailedMount / ContainerCreatingスケジューリングは完了している可能性。volumeマウントのEvents、Node状態とkubelet・CSI側エラーを担当者へ調査依頼
ErrImagePullリソース不足として処理せず、レジストリ・認証・通信の調査へ進む

変更前:context・Namespace・対象ワークロード・可用性要件、変更前の管理済みマニフェスト、リソース制約とストレージ保護方針を確認し、運用承認を得ます。完了条件:PodScheduled、Pod Ready、再発する警告がないこと、業務通信の正常性を確認します。改善しない場合はscheduler Events、Node割当量、PVC/CSIの状態と変更履歴を管理担当へ引き継ぎます。Kubernetes公式 — Podのデバッグ。

8. 修正後の確認

kubectl get pods -n app -o wide kubectl describe pod POD_NAME -n app kubectl get events -n app --sort-by=.metadata.creationTimestamp

スケジューリングが解消しただけではアプリが正常とは限りません。PodのReady状態・コンテナログ・依存サービスへの接続を確認します。起動後にCrashLoopBackOffになるならCrashLoopBackOffの専用調査へ切り替えます。

公式・一次資料

対象と実行前チェックを継続する

読み取り操作、設定変更、削除操作を分け、作業後の状態と業務影響を確認します。

柱ガイドへ戻る