Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы проб (Probes) в Kubernetes и принцип их работы
В Kubernetes пробы (probes) — это механизм проверки состояния контейнеров в подах, который помогает kubelet принимать решения о перезапуске контейнеров и маршрутизации трафика. Существует три основных типа проб, каждый из которых играет критическую роль в обеспечении отказоустойчивости приложений.
1. Liveness Probe (Проба жизнеспособности)
Назначение: Определяет, жив ли контейнер и должен ли он быть перезапущен. Если проба fails, kubelet убивает контейнер и перезапускает его согласно политике restartPolicy.
Типичные сценарии использования:
- Приложение "зависло" (deadlock) и не обрабатывает запросы, но процесс продолжает работать.
- Проверка внутреннего состояния приложения (например, доступность критического ресурса в памяти).
Как работает:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
- Kubelet отправляет HTTP-запрос на
/healthzпорта 8080. - После старта контейнера первая проверка выполняется через 15 секунд (
initialDelaySeconds). - Далее проверки повторяются каждые 10 секунд (
periodSeconds). - Контейнер будет перезапущен после 3 последовательных неудачных проверок (
failureThreshold).
2. Readiness Probe (Проба готовности)
Назначение: Определяет, готов ли контейнер принимать трафик. Если проба fails, контейнер исключается из балансировщика нагрузки Service.
Типичные сценарии использования:
- Приложение запустилось, но требуется время для загрузки конфигурации или подключения к зависимостям (БД, кеш).
- Временная неготовность из-за высокой нагрузки (перевод в состояние "не готов" для graceful degradation).
Как работает:
readinessProbe:
exec:
command:
- cat
- /tmp/ready
initialDelaySeconds: 5
periodSeconds: 5
- Kubelet выполняет команду
cat /tmp/readyвнутри контейнера. - Если команда возвращает код 0 — контейнер готов. Иначе — не готов.
- Пока контейнер не готов, Service не направляет к нему запросы.
3. Startup Probe (Проба старта)
Назначение: Определяет, запустилось ли приложение. Используется для медленно стартующих контейнеров, чтобы избежать преждевременных срабатываний liveness/readiness проб.
Типичные сценарии использования:
- Legacy-приложения с временем запуска от 1-2 минут.
- Приложения, требующие миграции данных или сложной инициализации перед готовностью.
Как работает:
startupProbe:
tcpSocket:
port: 8080
failureThreshold: 30
periodSeconds: 10
- Kubelet проверяет доступность TCP-порта 8080.
- Проверка повторяется каждые 10 секунд, максимум 30 попыток (итого до 300 секунд на запуск).
- Важно: Пока
startupProbeне succeeds,livenessProbeиreadinessProbeотключены.
Методы реализации проб
Kubernetes поддерживает три механизма выполнения проб:
| Метод | Описание | Пример использования |
|---|---|---|
| HTTP GET | Отправка HTTP-запроса, успех при коде 2xx/3xx | REST API, веб-приложения |
| TCP Socket | Попытка установить TCP-соединение | БД, кастомные TCP-протоколы |
| Exec | Выполнение команды в контейнере, успех при коде 0 | Скрипты проверки, файловые флаги |
Ключевые параметры конфигурации
probe:
initialDelaySeconds: 10 # Задержка перед первой проверкой
periodSeconds: 5 # Интервал между проверками
timeoutSeconds: 2 # Таймаут на выполнение пробы
successThreshold: 1 # Кол-во успешных проверок для перехода в успешное состояние
failureThreshold: 3 # Кол-во неудачных проверок для перехода в неудачное состояние
Практические рекомендации по использованию
- Для монолитных приложений: Обычно достаточно
livenessProbeиreadinessProbe. - Для микросервисов с долгим стартом: Добавляйте
startupProbe, чтобы избежать "цикла перезапусков". - Разделение ответственности:
livenessProbe— проверка "работает ли процесс" (жесткие требования).readinessProbe— проверка "может ли принимать трафик" (мягкие требования).
- Избегайте одинаковых настроек для liveness и readiness проб — это может привести к ненужным перезапускам.
- Используйте легковесные эндпоинты для проб, чтобы минимизировать нагрузку на приложение.
- Учитывайте
failureThresholdиperiodSeconds— слишком агрессивные настройки могут вызывать ложные срабатывания при временных сбоях.
Пробы — это фундаментальный механизм самоисцеления (self-healing) в Kubernetes, который превращает контейнеры из статических процессов в динамические, управляемые сущности, способные адаптироваться к изменяющимся условиям. Правильная настройка проб напрямую влияет на доступность приложения и устойчивость всей системы к сбоям.