Что такое Health Check (Liveness и Readiness Probe) в Kubernetes Deployment?

«Что такое Health Check (Liveness и Readiness Probe) в Kubernetes Deployment?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Health Check'и (пробы) в Kubernetes — это механизмы, с помощью которых kubelet определяет состояние контейнера внутри пода. В контексте Deployment они критически важны для обеспечения нулевого времени простоя (zero-downtime) при обновлениях и отказоустойчивости.

Я различаю два основных типа проб:

  1. Liveness Probe: Отвечает на вопрос «Жив ли контейнер?». Если проба fails, kubelet убивает контейнер, и он перезапускается согласно политике restartPolicy.
  2. Readiness Probe: Отвечает на вопрос «Готов ли контейнер принимать трафик?». Если проба fails, конечные точки (Endpoints) этого пода удаляются из соответствующего Service, и трафик на него не направляется.

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

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: web-app
        image: myapp:v1.2
        ports:
        - containerPort: 8080
        livenessProbe:
          httpGet:
            path: /healthz  # Эндпоинт для проверки «живучести»
            port: 8080
          initialDelaySeconds: 30  # Даём приложению время на старт
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready    # Эндпоинт для проверки готовности (проверяет подключение к БД, кешу и т.д.)
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
          failureThreshold: 3  # Допускаем 3 неудачи подряд

Из практического опыта:

  • initialDelaySeconds — самый важный параметр. Слишком маленькое значение приведёт к перезапускам контейнера во время его инициализации.
  • Readiness Probe часто сложнее Liveness Probe. Например, она может проверять доступность внешних зависимостей (БД, брокер сообщений), в то время как Liveness Probe проверяет лишь внутреннее состояние процесса.
  • Правильно настроенные пробы позволяют Deployment'у безопасно выполнять rolling update: новый под получает трафик только после успешной readinessProbe, а старый под удаляется только после завершения работы с текущими соединениями.