Траблшутинг проблем подов Kubernetes в Pending состоянии | Вопросы для собеседования | Skilio
/s/public
DevOps Средний Опубликовано
Траблшутинг проблем подов Kubernetes в Pending состоянии
Вопрос:

Какие распространённые причины того, что контейнеры Kubernetes остаются в состоянии Pending, и как их можно устранить?

Подсказки:

  • Какой механизм указывает на каких узлах должен быть развернут под и на основе каких данных он действует?
  • Как определить, связана ли проблема с ограничениями ресурсов или ограничениями размещения контейнеров, такими как селекторы узлов или правила affinity?
  • Какие использовать команды для исследования состояния узлов, использования ресурсов и конфигурации контейнеров?

Выше ожиданий:

  • Понимание классов приоритетов контейнеров и preemption.
  • Понимание как связано автоматическое масштабирование и состояние Pending подов
  • Знакомство с влиянием PodDisruptionBudgets на планирование.
  • Опыт работы с пользовательскими конфигурациями планировщиков, которые могут повлиять на размещение контейнеров.
Ответ:

Основные причины

Ограничения ресурсов

  • Недостаточно CPU или памяти: У узлов недостаточно запрошенных ресурсов для планирования пода
  • Проблемы с хранилищем: PersistentVolumeClaims не могут быть исполнены
  • Ресурсы GPU: Специализированное оборудование недоступно для под, запрашивающих их

Ограничения планирования

  • Селекторы узлов: Под настроен для запуска только на узлах со специфическими метками
  • Pod/Node Affinity/Anti-affinity: Ограничения размещения, препятствующие планированию
  • Метки и толерантность (Taints and Tolerations): Узлы имеют метки, препятствующие размещению пода

Проблемы на уровне кластера

  • Пределы квот: Превышены квоты ресурсов пространства имён
  • PodDisruptionBudgets: Препятствуют повторному планированию из-за требований доступности
  • Ошибки скачивания образов: Проблемы с доступом к реестру образов контейнеров или rate limit

Подход к устранению неполадок

  1. Проверьте подробности состояния пода:

    kubectl describe pod <pending-pod-name>
    

    Обратите внимание на раздел Events, показывающий ошибки планирования

  2. Изучите ресурсы узла:

    kubectl describe nodes | grep -A 5 "Allocated resources"
    

    Проверьте ресурсы Allocatable по сравнению с Allocated

  3. Просмотрите определение пода: Проверьте запросы ресурсов, селекторы узлов и правила affinity

  4. Проверьте состояние кластера в целом:

    kubectl get events --sort-by='.lastTimestamp'
    

    Обратите внимание на события FailedScheduling

Ограничения ресурсов против проблем affinity

Индикаторы ограничений ресурсов:

  • Сообщения об ошибках, содержащие "Insufficient resources"
  • Высокая утилизация ресурсов на всех узлах
  • Запросы пода превышают доступные мощности узлов

Индикаторы проблем affinity:

  • Сообщения, показывающие "0/N nodes available", несмотря на доступность ресурсов
  • Ссылки на nodeAffinity, nodeSelectorTerms в ошибках
  • Ошибки о конфликтах taint

Продвинутое устранение неполадок

  • Исследуйте настройки PriorityClass, влияющие на порядок работы планировщика
  • Проверьте, включен ли и правильно ли работает cluster autoscaler
  • Просмотрите конфигурации custom scheduler, которые могут повлиять на размещение
  • Проверьте сетевые политики или контексты безопасности, препятствующие планированию
0
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.