KubernetesMiddleTechnical

Под в CrashLoopBackOff. С чего начнёшь дебажить?

Смотрю describe, current и previous logs, exit code, events, probes, config/secrets, command/args и ресурсы. CrashLoopBackOff означает повторные падения контейнера с backoff между рестартами.

Суть

CrashLoopBackOff — не причина, а симптом: контейнер стартует, завершается с ошибкой, kubelet перезапускает его и увеличивает задержку между попытками. Начинать нужно с evidence: exit code, логи предыдущего запуска, events и probes. Особенно важно использовать previous logs, потому что текущий контейнер может уже перезапуститься и потерять вывод прошлой попытки.

Как работает

kubectl describe pod покажет restart count, last state, reason, exit code, OOMKilled, failed probes и mounted volumes. kubectl logs --previous даст stdout/stderr предыдущего контейнера. Если exit code 137 или reason OOMKilled, проверяем memory limit и usage. Если приложение завершается сразу, проверяем command/args, config, Secret, env vars, missing files и подключения. Если контейнер жив, но livenessProbe его убивает, нужно анализировать endpoint probe, delay, timeout и внешние зависимости.

Пример

кода

kubectl describe pod api-123
kubectl logs api-123 -c api
kubectl logs api-123 -c api --previous
kubectl get pod api-123 -o jsonpath='{.status.containerStatuses[*].lastState}'
kubectl top pod api-123

Подводные камни

  • Лечить CrashLoopBackOff увеличением replicas. Это только размножит падающий контейнер.
  • Не смотреть --previous logs. Самая полезная ошибка часто была в предыдущем запуске.
  • Игнорировать livenessProbe. Неправильная liveness может сама создавать crash loop.

Что отличает сильный ответ

Хороший кандидат разделяет классы причин: приложение завершилось, runtime не может стартовать, OOMKilled, probe убивает, config отсутствует, dependency недоступна. Дальше он подтверждает гипотезу конкретной командой, а не меняет YAML вслепую. В production дополнительно проверяют, не начался ли массовый crash после релиза, и при необходимости откатывают rollout до глубокого разбора.

Common mistakes

  • Не проверять exit code
  • Не читать previous logs
  • Путать CrashLoopBackOff с ImagePullBackOff

What the interviewer is testing

  • Знает --previous
  • Умеет читать describe status
  • Различает OOM/probe/app crash

Sources

Related topics