Под в состоянии CrashLoopBackOff. Как найти причину?
- Под в статусе Pending или ImagePullBackOff — что делать?
- Как отлаживать под в Kubernetes?
CrashLoopBackOff — контейнер запускается и падает, kubelet перезапускает его с растущей паузой (до 5 минут). Порядок: kubectl describe pod (события, Last State, код выхода, причина) → kubectl logs --previous (лог упавшего экземпляра) → по коду выхода: 137 — OOMKilled или убит пробой, 1 — ошибка приложения, 127 — команда не найдена.
- Частые причины: нет переменной или секрета, недоступна БД при старте, неверная команда, OOM, liveness убивает до старта
- Pending — не помещается на узлы (requests), нет PVC, taints; ImagePullBackOff — неверный образ или нет доступа к реестру
- kubectl get events --sort-by=.lastTimestamp — что происходило в namespace
А ещё kubectl debug — временный контейнер с инструментами рядом с упавшим
Подробно
Последовательность:
kubectl get pod orders-7d9f -o wide
kubectl describe pod orders-7d9f # Events, Last State, Exit Code
kubectl logs orders-7d9f --previous # лог прошлого запуска
kubectl get events --sort-by=.lastTimestamp
kubectl debug -it orders-7d9f --image=busybox --target=app
Коды выхода:
| код | смысл |
|---|---|
| 0 | процесс завершился без ошибки — для сервиса это тоже сбой: команда отработала и вышла |
| 1 | ошибка приложения: смотреть лог |
| 126/127 | нельзя выполнить / команда не найдена |
| 137 | SIGKILL: OOMKilled или liveness |
| 143 | SIGTERM |
Другие статусы:
- Pending —
describeпокажет «Insufficient memory», «didn't match node selector», «unbound PVC»; - ImagePullBackOff — опечатка в теге, приватный реестр без imagePullSecrets, лимиты реестра;
- CreateContainerConfigError — отсутствует ConfigMap или Secret.
Если лог пуст, приложение падает до инициализации логирования — запустить образ локально с теми же переменными.
Что хотят услышать
- Последовательность команд диагностики.
- Чтение кодов выхода.
- Причины Pending, ImagePullBackOff и прочих статусов.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Удалить кластер и создать заново
- ✗Код выхода 137 означает «команда не найдена»
- ✗Достаточно kubectl logs текущего контейнера пода — в его логах всегда видна причина прошлого падения
- ✓kubectl describe pod и logs --previous: события и код выхода (137 — убит, 1 — ошибка приложения)
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.