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

Для чего нужен readinessProbe?

1.2 Junior🔥 121 комментариев
#Kubernetes

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

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

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

Назначение readinessProbe в Kubernetes

readinessProbe (проба готовности) — это критически важный механизм в Kubernetes, предназначенный для определения, готов ли Pod принимать входящий трафик. В отличие от livenessProbe, которая проверяет, "жив" ли контейнер и не требует ли его перезапуска, readinessProbe отвечает за управление сетевым трафиком. Её основная цель — предотвратить отправку запросов на контейнеры, которые временно не готовы их обрабатывать, например, во время запуска, выполнения миграций БД или при высокой нагрузке.

Ключевые задачи readinessProbe:

  • Контроль доступа в Service: Когда Pod не проходит проверку готовности, Kubelet на узле удаляет его IP-адрес из списка конечных точек (Endpoints) всех Service, к которым он привязан. Таким образом, kube-proxy и механизмы балансировки нагрузки (например, Ingress-контроллеры) перестают направлять трафик на этот Pod.
  • Обеспечение плавного запуска (Graceful Startup): Многие приложения требуют времени на инициализацию (загрузка конфигурации, подключение к БД,预热 кэша). readinessProbe удерживает трафик до завершения этих процессов.
  • Защита от временных сбоев: При временных проблемах (потеря соединения с внешним сервисом, кратковременная перегрузка) проба может начать возвращать ошибки. Pod будет временно исключён из балансировки, что даст ему возможность восстановиться без сбоев для пользователей. Если проблема не решается, livenessProbe в итоге перезапустит контейнер.
  • Координация развёртываний (Deployments): При использовании стратегии обновления (например, RollingUpdate) readinessProbe обеспечивает, чтобы новый Pod был полностью готов, прежде чем на него будет переключён трафик, а старый Pod — остановлен. Это основа для zero-downtime развёртываний.

Типы проб и примеры конфигурации

readinessProbe поддерживает три основных метода проверки:

  1. HTTP GET: Наиболее распространённый метод. Kubelet отправляет HTTP-запрос на указанный путь и порт. Код ответа от 200 до 399 считается успехом.

    readinessProbe:
      httpGet:
        path: /health/ready
        port: 8080
      initialDelaySeconds: 10  # Ждать 10 сек после старта контейнера
      periodSeconds: 5         # Проверять каждые 5 секунд
      timeoutSeconds: 2        # Таймаут запроса 2 сек
      failureThreshold: 3      # После 3 неудач Pod отмечается как NotReady
      successThreshold: 1      # 1 успешная проверка возвращает статус Ready
    
  2. TCP Socket: Kubelet пытается открыть TCP-соединение на указанном порту. Успех означает, что порт открыт и слушает.

    readinessProbe:
      tcpSocket:
        port: 5432
      initialDelaySeconds: 15
      periodSeconds: 10
    
  3. Exec: Kubelet выполняет команду внутри контейнера. Нулевой код возврата (exit 0) означает успех.

    readinessProbe:
      exec:
        command:
          - /bin/sh
          - -c
          - '[[ -f /var/ready ]]' # Проверка наличия файла-флага готовности
      periodSeconds: 5
    

Практические примеры использования

  • Веб-приложение с кэшем: Проба /health/ready может проверять не только статус HTTP-сервера, но и доступность Redis или Memcached. Пока кэш не подключён, приложение не готово.
  • Приложение с зависимостью от БД: Проба может выполнять "лёгкий" SQL-запрос (например, SELECT 1;). Если база данных недоступна, Pod будет исключён из балансировки.
  • Фоновые workers: Для Pod, которые не принимают входящий трафик (например, обработчики очереди сообщений из RabbitMQ или Kafka), readinessProbe может не понадобиться. Однако её можно использовать для синхронизации с другими системами.

Отличие от livenessProbe и startupProbe

  • livenessProbe (проба жизнеспособности): Определяет, когда контейнер необходимо перезапустить. Её сбой приводит к kill и последующему пересозданию контейнера согласно политике restartPolicy. Используется для лечения "зависших" состояний.
  • startupProbe (проба старта): Используется для долго запускающихся контейнеров. Она отключает проверки livenessProbe и readinessProbe до своего первого успеха, предотвращая их преждевременное срабатывание. После успешного старта её роль заканчивается.

Итог: readinessProbe — это инструмент управления трафиком, а не состоянием контейнера. Её правильная настройка является краеугольным камнем для создания отказоустойчивых (resilient), самовосстанавливающихся приложений в Kubernetes, обеспечивая высокую доступность сервиса и бесперебойную работу пользователей во время обновлений и частичных сбоев.