Ответ
CrashLoopBackOff — это состояние пода, в котором контейнеры постоянно завершаются с ошибкой, и Kubelet перезапускает их с экспоненциальной задержкой (backoff). Основные причины:
1. Ошибки в самом приложении (Код контейнера) Контейнер запускается, но главный процесс (PID 1) завершается с ненулевым кодом выхода.
- Диагностика: Проверить логи пода.
kubectl logs <pod-name> --previous # Логи предыдущего запуска kubectl logs <pod-name> -c <container-name> # Логи конкретного контейнера
2. Недостаточные или некорректные ресурсы (CPU/RAM)
- Out of Memory (OOMKilled): Контейнер превысил лимит памяти и был убит ядром.
- Нехватка CPU для старта: Процессу не хватает CPU для инициализации в разумное время.
- Диагностика: Проверить запросы (requests) и лимиты (limits) в манифесте, события пода.
kubectl describe pod <pod-name> kubectl get pod <pod-name> -o yaml | grep -A 5 resources
3. Проблемы с зависимостями и пробами (Probes)
- Liveness-проба постоянно падает: Kubelet убивает контейнер, так как проба проверки "живучести" не проходит.
- Приложение зависит от внешнего сервиса (БД, кэш), который недоступен.
- Диагностика: Проверить конфигурацию
livenessProbeиreadinessProbe, логи приложения на этапе инициализации.
4. Проблемы с томами (Volumes) и файловой системой
- Отсутствующий Volume: Под пытается смонтировать PersistentVolumeClaim, который не существует или не привязан.
- Неправильные права доступа: Контейнер запускается от non-root пользователя и не может записать в смонтированную директорию.
- Диагностика:
kubectl describe pod— секцияVolumesиMounts.
5. Некорректная конфигурация
- Неверные переменные окружения (ConfigMap/Secret): Отсутствующие или синтаксически неверные значения.
- Ошибки в аргументах командной строки (command/args).
- Использование неправильного образа (image) или тега.
6. Проблемы с безопасностью (SecurityContext)
- Запуск от непривилегированного пользованика (runAsNonRoot) с образом, требующим root.
- Запрет на запись в корневую файловую систему (readOnlyRootFilesystem: true) без корректного монтирования томов.
Общий алгоритм отладки:
kubectl describe pod <name>— ищем Events внизу вывода.kubectl logs <pod-name> --previous— смотрим, почему упал предыдущий запуск.- Проверяем манифест пода на очевидные ошибки в ресурсах, пробах, томах.