Что такое "Pod stuck in Pending state"?

Ошибка Pod stuck in Pending state возникает, когда под в Kubernetes не может быть запланирован на узел и остается в состоянии ожидания.

Причины возникновения

  • Недостаточно ресурсов на узлах
  • Нет доступных узлов
  • Проблемы с taints и tolerations
  • Неправильная конфигурация nodeSelector
  • Проблемы с PersistentVolume

Как отладить ошибку

  1. Проверь статус пода - kubectl get pods
  2. Опиши под - kubectl describe pod pod-name
  3. Проверь узлы - kubectl get nodes
  4. Проверь события - kubectl get events

Как исправить ошибку

1. Проверь доступность узлов

1# Проверь статус узлов
2kubectl get nodes
3
4# Проверь детали узла
5kubectl describe node node-name
6
7# Проверь ресурсы узлов
8kubectl top nodes

2. Проверь ресурсы

 1# Уменьши запросы ресурсов
 2apiVersion: v1
 3kind: Pod
 4metadata:
 5  name: my-app
 6spec:
 7  containers:
 8  - name: app
 9    image: nginx:latest
10    resources:
11      requests:
12        memory: "64Mi"
13        cpu: "100m"
14      limits:
15        memory: "128Mi"
16        cpu: "200m"

3. Проверь taints и tolerations

 1# Проверь taints на узлах
 2kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
 3
 4# Добавь toleration в под
 5apiVersion: v1
 6kind: Pod
 7metadata:
 8  name: my-app
 9spec:
10  tolerations:
11  - key: "node-role.kubernetes.io/master"
12    operator: "Exists"
13    effect: "NoSchedule"
14  containers:
15  - name: app
16    image: nginx:latest

4. Проверь PersistentVolume

1# Проверь доступные PV
2kubectl get pv
3
4# Проверь PVC
5kubectl get pvc
6
7# Проверь StorageClass
8kubectl get storageclass

5. Принудительно запланируй под

1# Удали под
2kubectl delete pod pod-name
3
4# Или принудительно запланируй
5kubectl patch pod pod-name -p '{"spec":{"nodeName":"specific-node"}}'

6. Проверь nodeSelector

 1# Убери nodeSelector если он неправильный
 2apiVersion: v1
 3kind: Pod
 4metadata:
 5  name: my-app
 6spec:
 7  # nodeSelector: # закомментируй если проблема
 8  #   node-type: worker
 9  containers:
10  - name: app
11    image: nginx:latest

Как мониторить подобные ошибки

  • Мониторь ресурсы узлов
  • Настрой алерты на Pending поды
  • Проверяй доступность узлов
  • Логируй события планирования

FAQ

В: Что делать, если нет доступных узлов?

О: Добавь новые узлы в кластер или освободи ресурсы на существующих узлах.

В: Как проверить taints на узлах?

О: Используй kubectl describe node для просмотра taints и добавь соответствующие tolerations.

В: Что делать с проблемами PersistentVolume?

О: Проверь доступность PV, убедись в правильности StorageClass и access modes.

Лучшие практики

  • Устанавливай разумные запросы ресурсов
  • Мониторь использование ресурсов узлов
  • Используй nodeSelector для контроля размещения
  • Настрой правильные taints и tolerations
  • Проверяй доступность PV перед деплоем