← Назад к вопросам

Какие типы проб знаешь, как они работают?

1.8 Middle🔥 272 комментариев
#Kubernetes

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Типы проб (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/3xxREST 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, который превращает контейнеры из статических процессов в динамические, управляемые сущности, способные адаптироваться к изменяющимся условиям. Правильная настройка проб напрямую влияет на доступность приложения и устойчивость всей системы к сбоям.