Ответ
В Kubernetes существует три основных типа проб для мониторинга состояния контейнеров:
-
Liveness Probe
- Назначение: Проверяет, "живо" ли приложение внутри контейнера. Если проба начинает постоянно падать, kubelet убивает контейнер и перезапускает его согласно политике
restartPolicy. - Когда использовать: Для восстановления "зависших" приложений, которые не отвечают, но процесс продолжает работать.
- Назначение: Проверяет, "живо" ли приложение внутри контейнера. Если проба начинает постоянно падать, kubelet убивает контейнер и перезапускает его согласно политике
-
Readiness Probe
- Назначение: Определяет, готов ли контейнер принимать входящий трафик. Если проба падает, конечные точки (Endpoints) Pod'а удаляются из сервиса, и он перестаёт получать запросы.
- Когда использовать: Во время запуска приложения, требующего длительной инициализации (загрузка кэша, подключение к БД), или для временного исключения перегруженного Pod'а из балансировки.
-
Startup Probe
- Назначение: Используется для медленно стартующих приложений. Пока эта проба не станет успешной, liveness и readiness пробы отключены. Если startup проба не завершится успехом за заданное время, контейнер будет убит.
- Когда использовать: Для legacy-приложений, которым может потребоваться несколько минут на старт, чтобы избежать преждевременных перезапусков из-за liveness-проб.
Пример конфигурации в манифесте Pod:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp
image: myapp:latest
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15 # Ждем 15 секунд перед первой проверкой
periodSeconds: 10 # Проверяем каждые 10 секунд
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
startupProbe:
httpGet:
path: /startup
port: 8080
failureThreshold: 30 # Пробуем 30 раз
periodSeconds: 10 # с интервалом в 10 секунд (итого 5 минут на старт)
Ключевые параметры для всех проб: initialDelaySeconds, periodSeconds, timeoutSeconds, successThreshold, failureThreshold. Выбор механизма проверки (httpGet, tcpSocket, exec) зависит от возможностей приложения.