В чем разница между livenessProbe и readinessProbe в Kubernetes?

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

Ответ

Это механизмы проверки здоровья (health checks) пода, но они служат разным целям в оркестрации.

Проба Цель Действие Kubernetes при неудаче Когда использовать
livenessProbe Проверить, жив ли контейнер (работает ли основное приложение). Перезапускает контейнер (restart policy). Когда приложение может "зависнуть" и не восстановиться без перезапуска.
readinessProbe Проверить, готов ли контейнер принимать трафик. Удаляет IP адрес пода из эндпоинтов Service (исключает из балансировки нагрузки). Когда приложению нужно время на инициализацию (загрузка кэша, подключение к БД) или оно временно не может обслуживать запросы.

Практический пример конфигурации для веб-приложения:

containers:
- name: web-app
  image: myapp:latest
  ports:
  - containerPort: 8080
  livenessProbe:
    httpGet:
      path: /healthz  # Эндпоинт для проверки "живости"
      port: 8080
    initialDelaySeconds: 30  # Даём приложению время на старт
    periodSeconds: 10        # Проверяем каждые 10 секунд
    failureThreshold: 3      # После 3 неудач подряд -> контейнер мёртв
  readinessProbe:
    httpGet:
      path: /ready    # Эндпоинт для проверки готовности
      port: 8080
    initialDelaySeconds: 5
    periodSeconds: 5
    successThreshold: 1
    failureThreshold: 1      # Быстро исключаем из балансировки

Глубокое понимание для DevOps:

  • livenessProbe — это "последнее средство". Её эндпоинт должен быть лёгким, но проверять критическую функциональность (например, может ли приложение подключиться к своей собственной БД в памяти). Агрессивная livenessProbe может привести к циклам перезапуска.
  • readinessProbe — это инструмент управления трафиком. Она используется для плавных развёртываний (подам дают время стать ready, прежде чем на них направят трафик) и защиты зависимых сервисов (например, если БД недоступна, приложение помечается not ready, чтобы не получать запросы).
  • startupProbe (Kubernetes v1.16+): Используется для медленно стартующих контейнеров. Пока startupProbe не станет успешной, livenessProbe и readinessProbe отключены. Это предотвращает их убийство приложения до того, как оно успеет запуститься.