как кластер понимает, что под работает и готов принимать запросы
Kubernetes не может оценить состояние приложения без специальных проверок. Процесс может быть запущен, но при этом висеть в дедлоке или ещё не успеть прогрузить кеш.
Для этого и существуют probes — проверки, по результатам которых kubelet принимает решения о перезапуске и направлении трафика.
➡️ Виды probe
— livenessProbe — контролирует работоспособность контейнера. При провале kubelet перезапускает контейнер. Применяется, когда приложение может «зависнуть» без падения процесса.
— readinessProbe — проверяет, готов ли контейнер принимать трафик. При провале под убирается из конечных точек сервиса, но не перезапускается. Используется для прогрева, ожидания зависимостей (БД, кеш).
— startupProbe — проверяет, успело ли приложение стартовать. Пока она не пройдена, liveness и readiness заморожены. Нужна для медленно стартующих приложений, чтобы их не убивало раньше времени.
➡️ Как работают?
Каждая probe выполняется одним из трёх способов:
— httpGet — HTTP-запрос на путь и порт, успех при коде 200–399
— tcpSocket — проверка, что порт открыт
— exec — выполнение команды внутри контейнера, успех при коде возврата 0
containers:
- name: app
image: my-app
startupProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 10
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 0
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
periodSeconds: 5
failureThreshold: 2
🔧 Основные параметры
—
initialDelaySeconds — задержка перед первой проверкой —
periodSeconds — как часто выполнять проверку —
timeoutSeconds — таймаут одной проверки —
successThreshold — сколько успехов подряд считать восстановлением (для liveness/startup всегда 1)—
failureThreshold — сколько провалов подряд считать отказомПример со startupProbe выше даёт приложению до
30 × 10 = 300 секунд на запуск, после чего управление переходит к liveness.Probes — это не формальность в манифесте, а контракт между приложением и кластером. Liveness помогает kubelet принять решение о перезапуске контейнера, readiness показывает, можно ли направлять на pod трафик, startup даёт приложению время на корректный запуск. Разделение этих ролей напрямую влияет на стабильность сервиса при деплоях и сбоях.
#заметкиИнженера
