Как настроить liveness и readiness probes в Kubernetes?
Подробный ответ
Liveness probe
Liveness probe отвечает на вопрос: «Нужно ли перезапустить контейнер?». Если проверка не проходит больше допустимого числа раз, kubelet перезапускает контейнер.
Readiness probe
Readiness probe отвечает на вопрос: «Готово ли приложение принимать трафик?». Пока readiness probe не проходит, Pod не включается в endpoints подходящих Service. Если уже работающий Pod перестаёт быть ready, новый трафик к нему не направляется.
Пример HTTP probes
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
template:
spec:
containers:
- name: api
image: ghcr.io/acme/api:1.0.0
ports:
- containerPort: 8000
livenessProbe:
httpGet:
path: /health/live
port: 8000
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 3
readinessProbe:
httpGet:
path: /health/ready
port: 8000
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3Типы проверок
Kubernetes поддерживает HTTP GET, TCP socket и exec probes. Для большинства HTTP API подходит отдельный лёгкий endpoint. Liveness не должен зависеть от временно недоступной внешней системы, иначе Kubernetes может бесконечно перезапускать здоровое приложение.
Startup probe
Если приложение долго стартует, стоит добавить startupProbe. Пока startup probe не пройдёт, Kubernetes не применяет обычную логику liveness, что защищает медленно стартующее приложение от преждевременных перезапусков.
startupProbe:
httpGet:
path: /health/live
port: 8000
periodSeconds: 5
failureThreshold: 30Как ответить на собеседовании
Liveness probe перезапускает контейнер, если приложение зависло или не может восстановиться. Readiness probe управляет включением Pod в Service endpoints и не даёт направлять трафик на неготовый экземпляр. Для долгого старта добавляю startup probe и отдельно подбираю задержки, timeout и failure thresholds.
Оцени свой прогресс