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

«Для чего нужен readinessProbe в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

readinessProbe определяет, готов ли контейнер внутри пода принимать сетевой трафик. Если проба не проходит, Kubernetes временно удаляет IP-адрес этого пода из списка конечных точек (Endpoints) соответствующего Service. Это позволяет избежать отправки запросов пользователей на поды, которые еще не завершили инициализацию или находятся в неработоспособном состоянии.

Пример конфигурации в манифесте пода:

readinessProbe:
  httpGet:
    path: /health/ready
    port: 8080
  initialDelaySeconds: 10  # Ждать 10 секунд перед первой проверкой
  periodSeconds: 5         # Проверять каждые 5 секунд
  failureThreshold: 3      # Под считается неготовым после 3 неудачных проверок

Типичные сценарии использования:

  • Долгая инициализация: Приложение загружает большие конфигурации, подключается к базам данных или кэшам.
  • Временная зависимость: Под ожидает доступности внешнего сервиса (например, очереди сообщений).
  • Graceful shutdown: Во время остановки пода проба начинает фейлиться, что сигнализирует Service о необходимости перенаправить новый трафик на другие поды.

Ключевое отличие от livenessProbe:

  • livenessProbe определяет, жив ли контейнер. При неудаче Kubernetes перезапускает контейнер.
  • readinessProbe определяет, готов ли контейнер к работе. При неудаче Kubernetes лишь временно исключает под из балансировки нагрузки, не перезапуская его.