Сопоставляйте предыдущие логи, последнее завершение и события. Ошибка приложения, перезапуск из-за probe и нехватка памяти требуют разных исправлений.
Сохраните данные неудачной попытки
Подставьте настоящие namespace, имя Pod и имя контейнера. В Pod может быть несколько контейнеров, поэтому указывайте -c явно. Предыдущие логи особенно полезны, пока новая попытка ещё не дошла до места сбоя. Они могут отсутствовать, если предыдущий экземпляр не сохранился.
Запишите Last State, Reason, Exit Code, счётчик перезапусков и время событий. Проверьте Deployment и версию релиза. Не удаляйте Pod в начале диагностики: замена может уничтожить нужные данные. Задержка повторного запуска зависит от версии и настроек kubelet; фиксированное время ожидания само по себе не объясняет причину.
NS=demo
POD=api-7d8c9f-example
CONTAINER=api
kubectl get pod "$POD" -n "$NS" -o wide
kubectl describe pod "$POD" -n "$NS"
kubectl logs "$POD" -n "$NS" -c "$CONTAINER" --previous --tail=100
kubectl logs "$POD" -n "$NS" -c "$CONTAINER" --tail=100
kubectl get events -n "$NS" --field-selector "involvedObject.name=$POD" --sort-by=.metadata.creationTimestampВыберите направление по фактам
Представьте новый релиз API: в логах снова появляется booting, затем процесс исчезает без собственного исключения. Это ещё не доказывает ошибку приложения. Сопоставьте завершение с событиями kubelet. Liveness probe может остановить процесс, который продолжает инициализацию; отсутствие настройки может заставить приложение завершиться самостоятельно.
Код 137 соответствует принятому обозначению завершения через SIGKILL, но сам по себе не доказывает превышение лимита памяти. Ищите OOMKilled и данные о ресурсах. ImagePullBackOff и Pending из-за невозможности назначить Pod на узел требуют другого разбора: приложение могло ещё не запуститься.
| Наблюдение | Что проверить |
|---|---|
| Исключение приложения | Настройки, команда, зависимость |
| Unhealthy и Killing | Адрес и время probe |
| OOMKilled | Память и лимит |
| Повторы после exit 0 | Команда и тип workload |
Пример: инициализация занимает 45 секунд
Наш API около 45 секунд загружает индекс и только потом открывает health endpoints. Liveness probe запускается сразу, проверяет процесс каждые 10 секунд и перезапускает после трёх ошибок. События показывают провал probe и Killing, а логи каждый раз обрываются на загрузке. Поэтому инициализация не успевает закончиться.
Добавьте этот фрагмент в описание контейнера API, предварительно реализовав три endpoint. /startedz подтверждает завершение инициализации, /livez — работоспособность самого процесса, /readyz — возможность принимать запросы. Параметры startupProbe дают примерно 90 секунд на запуск. Это бюджет для примера, а не универсальное значение.
startupProbe:
httpGet:
path: /startedz
port: 8080
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 18
livenessProbe:
httpGet:
path: /livez
port: 8080
periodSeconds: 10
timeoutSeconds: 2
failureThreshold: 3
readinessProbe:
httpGet:
path: /readyz
port: 8080
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 2Не смешивайте три вида probe
При наличии startupProbe проверки liveness и readiness ждут её первого успеха. Повторные ошибки startup или liveness могут привести к перезапуску. Ошибка readiness убирает готовность для обычного трафика Service, но сама контейнер не перезапускает. Смягчение readiness не исправит цикл, вызванный liveness.
Не заставляйте liveness падать при каждой краткой недоступности базы. Это может одновременно перезапустить все API-реплики и затянуть восстановление. Временную невозможность обслуживать запросы при необходимости отражайте в readiness. Liveness должна проверять состояние, которое перезапуск способен улучшить. Делайте проверки дешёвыми и задавайте понятные таймауты.
Ошибки запуска и OOM проверяйте отдельно
При немедленном завершении с ненулевым кодом проверяйте команду образа, обязательные переменные, подключённые файлы, права и ошибки зависимостей. Сравните спецификацию с рабочей версией. Если команда успешно заканчивается в Deployment с обычной политикой Always, контейнер тоже будет перезапускаться. Для одноразовой задачи обычно подходит Job.
При OOMKilled изучите пики памяти, параллелизм и лимит. Текущие метрики могут не показать короткий всплеск перед завершением. Увеличение лимита иногда помогает временно, если на узле хватает ресурсов, но затем нужно искать утечку или слишком большой вход. Memory request влияет на размещение Pod и не заменяет лимит.
Подтвердите восстановление всего релиза
Примените исправленную конфигурацию обычным способом развёртывания. Следите за всеми новыми Pod: готовностью, перезапусками и событиями. Проверьте настоящий запрос к API и наблюдайте дольше прежнего интервала сбоя. Фаза Running сама по себе не подтверждает готовность и стабильность сервиса.
В примере с медленным стартом ожидаемый результат — одна завершённая инициализация, успешная startupProbe и стабильный счётчик перезапусков после неё. Сохраните причину и результат проверки в разборе инцидента. Если релиз остаётся неработоспособным, рассмотрите откат по правилам проекта, сохранив логи.
Коротко
Частые вопросы
CrashLoopBackOff — это фаза Pod?
Нет. Он описывает ожидание повторного запуска сбойного контейнера и часто виден в выводе kubectl. Причину ищите в состоянии контейнера и событиях Pod.
Почему текущие логи пустые?
Новая попытка могла ещё ничего не записать. Используйте --previous для нужного контейнера, чтобы увидеть сохранённую предыдущую попытку. Доступность зависит от хранения логов и замены Pod.
Может ли readiness probe перезапустить контейнер?
Сама ошибка readiness этого не делает. Startup и liveness могут вызвать перезапуск после заданного числа ошибок. Проверьте события, прежде чем связывать перезапуск с probe.
Поможет ли удаление Pod?
Контроллер обычно создаст новый Pod с той же ошибочной конфигурацией. Удаление может лишить вас данных для диагностики. Исправьте или откатите workload и проверьте замену.
Источники
Источники и редакционная политика
Сведения проверены 4 октября 2026 г. Ссылки рядом с разделами указывают источники фактов и технических объяснений. Выводы, учебные сценарии и рекомендации по подготовке — редакционная работа RecallDeck.
От чтения к воспроизведению
Отрепетируйте полный цикл интервью.
RecallDeck возвращает сложные темы по расписанию и помогает удерживать в памяти язык, SQL, архитектуру и поведенческие истории.