Короткий ответ
Pending чаще всего означает, что планировщик ещё не нашёл подходящий узел: типичные причины — нехватка ресурсов (CPU/память) на узлах, отсутствие узла, снимающего taints через соответствующие tolerations, незакреплённый PersistentVolumeClaim, или под ещё ждёт скачивания образа.
Как это работает подробнее
до момента, пока планировщик не назначит Pod на конкретный узел (или назначил, но контейнеры ещё не запущены), Pod остаётся в фазе Pending. Причина всегда фиксируется в секции Events объекта Pod, доступной через kubectl describe pod.
Пример кода
Команды и вывод
kubectl describe pod web-9f8c7
Events:
Warning FailedScheduling 30s default-scheduler 0/3 nodes are available: 3 Insufficient memory.Что использовать на практике
- Практика. сообщение вида
0/5 nodes are available: insufficient cpuпрямо указывает на нехватку ресурсов;node(s) had taint that the pod didn't tolerate— на несовпадение taints/tolerations;pod has unbound immediate PersistentVolumeClaims— на проблему с хранилищем. Каждая из этих причин требует разных действий: добавить узлы/снизить requests, настроить toleration, или разобраться со StorageClass.
Подводные камни
- Риски. сразу перезапускать под командой
kubectl delete pod, не посмотрев причину вdescribe— это не решает первопричину и под снова зависнет вPending; путать нехватку ресурсов кластера с ограничением ResourceQuota конкретного namespace, которые дают похожий внешний эффект, но требуют разных решений.