Что произойдет, если провалится Health Check (Liveness или Readiness Probe) в Deployment?

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

Ответ

Реакция зависит от типа пробы:

1. Liveness Probe (проба жизнеспособности): Если контейнер не проходит проверку livenessProbe после заданного количества попыток (failureThreshold), kubelet убивает контейнер и перезапускает его согласно политике перезапуска (restartPolicy). Это механизм восстановления "зависших" приложений.

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

Пример конфигурации в Deployment:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: app
        image: myapp:latest
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
          failureThreshold: 1

Мои действия при падении проб:

  1. Проверить логи пода: kubectl logs <pod-name>.
  2. Изучить события пода: kubectl describe pod <pod-name> для деталей провала проб.
  3. Проверить доступность эндпоинтов пробы изнутри пода: kubectl exec <pod-name> -- curl -f http://localhost:8080/healthz.
  4. Убедиться, что настройки initialDelaySeconds, periodSeconds и failureThreshold соответствуют реальному времени запуска приложения.
  5. Проверить потребление ресурсов (CPU/память) пода, которое может приводить к зависанию.