В Kubernetes часто добавляют health checks, но readinessProbe и livenessProbe нужны для разных вещей.
livenessProbe нужна, чтобы понять, жив ли контейнер вообще. Если приложение зависло и уже не может восстановиться, Kubernetes перезапустит Pod.
Простой пример проверки:
livenessProbe:
httpGet:
path: /health/live
port: 8080
readinessProbe решает другую задачу. Она говорит, можно ли прямо сейчас отправлять трафик в этот Pod.
Например, приложение уже запустилось, но ещё прогревает кэш, ждёт миграции, подключение к базе или загрузку конфигурации. Перезапускать его в этот момент не нужно.
Для этого лучше сделать отдельный endpoint:
readinessProbe:
httpGet:
path: /health/ready
port: 8080
Если readiness падает, Pod просто убирается из endpoints сервиса. Новые запросы туда не идут, но контейнер продолжает работать и может вернуться в строй.
А если slow start долгий, добавляют startupProbe:
startupProbe:
httpGet:
path: /health/startup
port: 8080
failureThreshold: 30
periodSeconds: 2
Она даёт приложению время на старт и не позволяет livenessProbe убить контейнер слишком рано.
Состояние проб удобно смотреть через describe:
kubectl describe pod api-7f9c
liveness отвечает за перезапуск, readiness отвечает за трафик, startupProbe отвечает за долгий старт.
➡️ DevOps Ready | #совет
