1. Kubernetes: устранение неполадок в продакшене

(Частые проблемы с подами, причины, команды отладки и исправления)

1. Жизненный цикл пода

Pending
  • Ожидание ресурсов
  • Загрузка образа
  • Проблема планирования
→
Container Creating
  • Загрузка образа
  • Создание контейнера
  • Монтирование томов
→
Running
  • Приложение работает
→
Succeeded / Failed
  • Завершён или завершился с ошибкой

2. Полезные команды kubectl

3. Топ-10 частых проблем с подами в продакшене

#ПроблемаСимптомы / ошибкаВозможные причиныКоманды для диагностикиИсправление
1CrashLoopBackOff Под постоянно перезапускается Сбой приложения, неверный конфиг, отсутствует env, ошибка подключения к БД kubectl describe pod <pod>
kubectl logs <pod> --previous
  • Проверить логи
  • Исправить конфиг / env
  • Проверить зависимости
2ImagePullBackOff Не удаётся загрузить образ Неверное имя образа, нет прав, приватный репозиторий kubectl describe pod <pod>
kubectl get events -n <ns>
  • Проверить имя образа
  • Проверить секрет для pull
  • Проверить доступ к репозиторию
3Pending Под застрял в Pending Недостаточно ресурсов, проблемы узлов, taints/tolerations, PVC не привязан kubectl describe pod <pod>
kubectl get nodes
kubectl get pvc -n <ns>
  • Проверить ресурсы узлов
  • Исправить PVC / хранилище
  • Добавить tolerations / nodeSelector
4OOMKilled Контейнер завершён (код выхода 137) Превышен лимит памяти kubectl describe pod <pod>
kubectl logs <pod> --previous
  • Увеличить лимит памяти
  • Оптимизировать приложение
5RunContainerError Под не запускается Неверные command/args, отсутствуют файлы, проблема с правами kubectl describe pod <pod>
kubectl logs <pod>
  • Проверить command / args
  • Проверить права на файлы
6CreateContainerError Ошибка создания контейнера Неверная конфигурация, нет secrets / configmap, проблема с томом kubectl describe pod <pod>
  • Проверить secrets / configmap
  • Исправить монтирование томов
7ContainerNotReady Под запущен, но не готов Readiness probe не проходит, приложение не запустилось kubectl describe pod <pod>
kubectl logs <pod>
  • Проверить readiness probe
  • Проверить работоспособность приложения
8NodeNotReady Поды не планируются Узел недоступен, проблемы с сетью, нехватка ресурсов kubectl get nodes
kubectl describe node <node>
  • Исправить проблемы узла
  • Проверить статус узла и сервисы k8s
9Evicted Под выселен с узла Давление по диску или памяти, состояние узла kubectl get events -n <ns>
kubectl describe pod <pod>
  • Освободить место на диске
  • Увеличить ресурсы
  • Задать корректные requests / limits
10Terminating (Stuck) Под завис в статусе Terminating Finalizers, процесс не завершается, проблема с сетью kubectl describe pod <pod>
kubectl get pod <pod> -o yaml
  • Удалить finalizer
  • При необходимости принудительно удалить
kubectl delete pod <pod> --force --grace-period=0

4. Пример вывода kubectl describe

Имя:           my-app-7d6f9c8bdf-abc12
Namespace:      production
Статус:         CrashLoopBackOff
IP:             10.244.1.23
Узел:           ip-10-0-1-23 / 10.0.1.23
Контейнеры:
  my-app:
    Состояние:        Ожидание
      Причина:        CrashLoopBackOff
    Последнее состояние: Завершён
      Причина:        Error
      Код выхода:     1
    Готов:          False
    Перезапусков:   5

5. Порядок диагностики

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