Вопрос с собеседования · DevOps

Под в состоянии CrashLoopBackOff. Как найти причину?

MiddleKubernetes
Ещё спрашивают так:
  • Под в статусе 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нельзя выполнить / команда не найдена
137SIGKILL: OOMKilled или liveness
143SIGTERM

Другие статусы:

  • 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 минут бесплатно.

Разбор собеседования