Ответ
В Kubernetes пробы — это механизм проверки состояния контейнера. Я настраиваю их для всех production-ворклодов, чтобы обеспечить отказоустойчивость и нулевое время простоя.
Три основных типа probe:
-
Liveness Probe (Проба жизнеспособности)
- Назначение: Определяет, жив ли контейнер. Если проба fails, kubelet убивает контейнер и перезапускает его согласно политике
restartPolicy. - Использование: Для восстановления "зависших" приложений, которые не отвечают, но процесс еще работает.
livenessProbe: httpGet: path: /health/live port: 8080 initialDelaySeconds: 30 # Даем приложению время на старт periodSeconds: 10 # Проверяем каждые 10 секунд failureThreshold: 3 # После 3 неудач контейнер будет перезапущен
- Назначение: Определяет, жив ли контейнер. Если проба fails, kubelet убивает контейнер и перезапускает его согласно политике
-
Readiness Probe (Проба готовности)
- Назначение: Определяет, готов ли контейнер принимать трафик. При fail'е контейнер удаляется из эндпоинтов Service.
- Использование: Для ситуаций, когда приложение временно не может обслуживать запросы (загрузка кэша, подключение к БД).
readinessProbe: exec: command: - /app/check-ready.sh # Кастомный скрипт проверки зависимостей initialDelaySeconds: 5 periodSeconds: 5
-
Startup Probe (Проба старта)
- Назначение: Для медленно стартующих приложений. Пока startup probe не станет successful, liveness и readiness пробы не активируются.
- Использование: Защищает приложения с долгим временем инициализации от преждевременных перезапусков.
startupProbe: httpGet: path: /health/startup port: 8080 failureThreshold: 30 # Пробуем много раз periodSeconds: 10 # с большим интервалом
Ключевой момент: Правильная настройка initialDelaySeconds, timeoutSeconds и failureThreshold критически важна, чтобы пробы не мешали нормальной работе приложения.