Какие статусы приложения существуют, например готовность принимать запросы
Что проверяют
Как приложение сообщает о своём состоянии оркестратору и балансировщику. Интервьюер хочет услышать разницу между «жив» и «готов принимать трафик» и то, как это устроено в Spring Boot. Следом обычно спрашивают, какие проверки вы бы включили в каждую пробу.
Как отвечать
Разделите три состояния, которые понимает Kubernetes:
- startup: приложение ещё стартует.
startupProbeоткладывает остальные проверки, иначе liveness убьёт под, не дождавшись поднятия контекста; - liveness: процесс жив и не завис. Провал означает перезапуск контейнера;
- readiness: приложение готово обслуживать запросы. Провал не перезапускает под, а убирает его из балансировки, пока проверка снова не пройдёт.
В Spring Boot Actuator это отражено напрямую. /actuator/health агрегирует индикаторы и отдаёт статусы UP, DOWN, OUT_OF_SERVICE, UNKNOWN: при UP код 200, при DOWN и OUT_OF_SERVICE по умолчанию 503. Группы /actuator/health/liveness и /actuator/health/readiness в Kubernetes включаются автоматически, вне его свойством management.endpoint.health.probes.enabled=true. Внутри это LivenessState (CORRECT, BROKEN) и ReadinessState (ACCEPTING_TRAFFIC, REFUSING_TRAFFIC), сменить их можно публикацией AvailabilityChangeEvent. Например, пока греются кеши и грузятся справочники, держите REFUSING_TRAFFIC.
Упомяните остановку: при server.shutdown=graceful приложение перестаёт брать новые запросы и доделывает текущие в пределах spring.lifecycle.timeout-per-shutdown-phase, а readiness уже отвечает отказом.
Где спотыкаются
Кладут проверку базы в liveness. База моргнула, и Kubernetes перезапускает все поды разом, хотя сами приложения исправны. Внешним зависимостям место в readiness, и то с осторожностью.
Направляют liveness и readiness на один и тот же эндпоинт. Тогда временная перегрузка превращается в цепочку перезапусков.
Отвечают про «загрузку» и «ошибку» в интерфейсе или путают статусы приложения с кодами ответов бизнес-запросов, не называя ни одного реального механизма проверки.