Ответ
Это механизмы проверки здоровья (health checks) пода, но они служат разным целям в оркестрации.
| Проба | Цель | Действие Kubernetes при неудаче | Когда использовать |
|---|---|---|---|
livenessProbe |
Проверить, жив ли контейнер (работает ли основное приложение). | Перезапускает контейнер (restart policy). | Когда приложение может "зависнуть" и не восстановиться без перезапуска. |
readinessProbe |
Проверить, готов ли контейнер принимать трафик. | Удаляет IP адрес пода из эндпоинтов Service (исключает из балансировки нагрузки). | Когда приложению нужно время на инициализацию (загрузка кэша, подключение к БД) или оно временно не может обслуживать запросы. |
Практический пример конфигурации для веб-приложения:
containers:
- name: web-app
image: myapp:latest
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /healthz # Эндпоинт для проверки "живости"
port: 8080
initialDelaySeconds: 30 # Даём приложению время на старт
periodSeconds: 10 # Проверяем каждые 10 секунд
failureThreshold: 3 # После 3 неудач подряд -> контейнер мёртв
readinessProbe:
httpGet:
path: /ready # Эндпоинт для проверки готовности
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
failureThreshold: 1 # Быстро исключаем из балансировки
Глубокое понимание для DevOps:
livenessProbe— это "последнее средство". Её эндпоинт должен быть лёгким, но проверять критическую функциональность (например, может ли приложение подключиться к своей собственной БД в памяти). Агрессивная livenessProbe может привести к циклам перезапуска.readinessProbe— это инструмент управления трафиком. Она используется для плавных развёртываний (подам дают время стать ready, прежде чем на них направят трафик) и защиты зависимых сервисов (например, если БД недоступна, приложение помечается not ready, чтобы не получать запросы).startupProbe(Kubernetes v1.16+): Используется для медленно стартующих контейнеров. ПокаstartupProbeне станет успешной,livenessProbeиreadinessProbeотключены. Это предотвращает их убийство приложения до того, как оно успеет запуститься.