DEV Community

Sergey Shinder
Sergey Shinder

Posted on

Под, который перезапускался каждые сорок секунд

Мне позвонили ночью с формулировкой «сервис работает, но как-то дёргано». В Kubernetes это классика: под жив, отвечает, но в логах видно, что каждые сорок секунд он молча уходит в перезапуск. Пользователи ловят обрывы соединений, а метрики доступности при этом почти зелёные — потому что рестарты быстрые.

Первым делом я полез смотреть kubectl describe pod и увидел там знакомое: Liveness probe failed. Приложение при старте прогревало кэш секунд тридцать, а liveness-проба била в него уже через пять и с коротким таймаутом. Приложение не успевало ответить, kubelet считал его мёртвым и убивал. Оно перезапускалось, снова прогревало кэш, снова не успевало — и цикл замыкался.

Здесь кроется ошибка, которую я вижу постоянно: люди путают liveness и readiness. Liveness отвечает на вопрос «этот процесс завис насмерть, надо ли его прибить?». Readiness — на вопрос «готов ли он принимать трафик прямо сейчас?». Это разные вопросы. Медленный старт — это про readiness, а не про liveness. Пока приложение прогревается, оно не готово к трафику, но оно абсолютно живо, убивать его не за что.

Мы развели пробы правильно. Readiness — с адекватным начальным окном, чтобы под не получал запросы до готовности. Liveness — с большим initialDelaySeconds и запасом по таймауту, чтобы она срабатывала только на настоящие зависания, а не на честный прогрев. И отдельно добавили startup-пробу для медленно стартующих сервисов — именно для того она и придумана: дать приложению спокойно подняться, прежде чем включатся остальные проверки.

Отдельный урок был про ресурсы. У пода стоял слишком жёсткий CPU-лимит, и во время прогрева его троттлило, отчего старт растягивался ещё сильнее. Мы подняли лимиты и заодно проверили requests, чтобы планировщик не ставил его на перегруженную ноду.

Оркестратор — мощная штука, но он делает ровно то, что вы ему сказали. Если проба говорит «убей под, когда он не отвечает за пять секунд» — он убьёт, даже когда под просто занят делом. Пробы — это не формальность из шаблона, это ваш договор с оркестратором о том, что значит «живой» и «готовый». Пишите этот договор осознанно.

– Sergey Shinder

Top comments (0)