Ответ вслух Middle Отладка в кластере спрашивают часто обновлено

Сценарий: CrashLoopBackOff

Вопрос

После деплоя новые поды api в CrashLoopBackOff, старые ещё работают. Опиши, как будешь разбираться.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала фиксирую, что старые поды работают: rolling update застрял, потому что новые не становятся готовыми, и это хорошо, пользователи не пострадали. Если нужно, сразу откатываю rollout undo и разбираюсь спокойно.

Что должно прозвучать в ответе

  • `kubectl describe pod`: Last State, Reason и Exit Code, события; это сразу сужает круг

  • `kubectl logs --previous`: ошибка упавшего экземпляра

  • Код 1 и исключение: конфиг, переменные окружения, секреты, миграции, недоступная зависимость

  • Код 137: OOMKilled или убит liveness; 127/126: неверная команда; 0: процесс завершается

  • Сравнить с прошлой версией: что изменилось в образе, конфиге, манифесте

  • Если логов нет: `kubectl debug --copy-to` с `sleep` или запуск команды руками; при необходимости откат `rollout undo`

Что могут спросить следом

  • Почему старые поды продолжают работать?
  • Что делать, если ошибка только на одном узле?
  • Как liveness может вызывать CrashLoopBackOff?

Разбор

Сначала фиксирую, что старые поды работают: rolling update застрял, потому что новые не становятся готовыми, и это хорошо, пользователи не пострадали. Если нужно, сразу откатываю rollout undo и разбираюсь спокойно. Дальше kubectl describe pod по новому поду: Last State, Reason и Exit Code. Код 1 с исключением говорит об ошибке приложения, и kubectl logs --previous обычно её показывает: не хватает переменной окружения, нет ключа в секрете, не применена миграция, не доступна зависимость. 137 с OOMKilled значит лимит памяти, 137 без OOMKilled или 143 часто означают, что контейнер убила liveness probe, тогда в событиях будет Liveness probe failed, и надо смотреть startupProbe и таймауты. 127 и 126 это неверная команда или права в образе, 0 значит процесс просто завершился. Сравниваю с предыдущей версией: diff образа, конфигурации и манифеста, обычно причина там. Если процесс падает мгновенно без логов, делаю копию пода через kubectl debug --copy-to с командой sleep infinity и запускаю приложение руками внутри.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.