Траблшутинг проблем подов Kubernetes в Pending состоянии
Вопрос:
Какие распространённые причины того, что контейнеры Kubernetes остаются в состоянии Pending, и как их можно устранить?
Подсказки:
- Какой механизм указывает на каких узлах должен быть развернут под и на основе каких данных он действует?
- Как определить, связана ли проблема с ограничениями ресурсов или ограничениями размещения контейнеров, такими как селекторы узлов или правила affinity?
- Какие использовать команды для исследования состояния узлов, использования ресурсов и конфигурации контейнеров?
Выше ожиданий:
- Понимание классов приоритетов контейнеров и preemption.
- Понимание как связано автоматическое масштабирование и состояние Pending подов
- Знакомство с влиянием PodDisruptionBudgets на планирование.
- Опыт работы с пользовательскими конфигурациями планировщиков, которые могут повлиять на размещение контейнеров.
Ответ:
Основные причины
Ограничения ресурсов
- Недостаточно CPU или памяти: У узлов недостаточно запрошенных ресурсов для планирования пода
- Проблемы с хранилищем: PersistentVolumeClaims не могут быть исполнены
- Ресурсы GPU: Специализированное оборудование недоступно для под, запрашивающих их
Ограничения планирования
- Селекторы узлов: Под настроен для запуска только на узлах со специфическими метками
- Pod/Node Affinity/Anti-affinity: Ограничения размещения, препятствующие планированию
- Метки и толерантность (Taints and Tolerations): Узлы имеют метки, препятствующие размещению пода
Проблемы на уровне кластера
- Пределы квот: Превышены квоты ресурсов пространства имён
- PodDisruptionBudgets: Препятствуют повторному планированию из-за требований доступности
- Ошибки скачивания образов: Проблемы с доступом к реестру образов контейнеров или rate limit
Подход к устранению неполадок
-
Проверьте подробности состояния пода:
kubectl describe pod <pending-pod-name>
Обратите внимание на раздел Events, показывающий ошибки планирования
-
Изучите ресурсы узла:
kubectl describe nodes | grep -A 5 "Allocated resources"
Проверьте ресурсы Allocatable по сравнению с Allocated
-
Просмотрите определение пода: Проверьте запросы ресурсов, селекторы узлов и правила affinity
-
Проверьте состояние кластера в целом:
kubectl get events --sort-by='.lastTimestamp'
Обратите внимание на события FailedScheduling
Ограничения ресурсов против проблем affinity
Индикаторы ограничений ресурсов:
- Сообщения об ошибках, содержащие "Insufficient resources"
- Высокая утилизация ресурсов на всех узлах
- Запросы пода превышают доступные мощности узлов
Индикаторы проблем affinity:
- Сообщения, показывающие "0/N nodes available", несмотря на доступность ресурсов
- Ссылки на nodeAffinity, nodeSelectorTerms в ошибках
- Ошибки о конфликтах taint
Продвинутое устранение неполадок
- Исследуйте настройки PriorityClass, влияющие на порядок работы планировщика
- Проверьте, включен ли и правильно ли работает cluster autoscaler
- Просмотрите конфигурации custom scheduler, которые могут повлиять на размещение
- Проверьте сетевые политики или контексты безопасности, препятствующие планированию
0