Основной

Что такое liveness probe?

2025-05-19 12:01 Технологии
Liveness Probe — это один из вариантов Kubernetes Probe, который проверяет работоспособность приложения.

Используется, чтобы время от времени проверять, что приложение "не зависло"

Что происходит, когда liveness проба не проходит?

Время от времени kubernetes проверяет работоспособность приложения, если приложение не работает - k8s инициирует перезапуск pod:
  • При отсутствии дополнительных реплик у pod, возникнет временная недоступность.
  • Также, это может привести к каскадным перезапускам (когда недоступность 1 пода выключает остальные по очереди)

Как обнаружить liveness probe failed на графиках?

Чтобы увидеть проблему с probe необходимо отслеживать:
1. Prometheus метрики pod'ов в kubernets:
  • kube_pod_container_status_ready - значение 0 показывает, что конкретный под не готов к трафику
  • kube_pod_container_status_restarts и kube_pod_container_status_restart_count - показывает сколько раз под перезапустился
2. Kubernetes events - журнал событий, как положительных, так и отрицательных. Собирать можно с помощью kubernetes-event-exporter

  • Liveness probe failed


Что делать при liveness probe failed?

1. Посмотреть какой liveness настроен для deployment/pod
2. Немного увеличить порог timeoutSeconds проверки или увеличить количество копий приложения, чтобы снять симптом (по умолчанию 1 секунда)
3. Изучить логи pod, на предмет нарушения проверки, например,
  • Ошибки работы с базой данных/кэш
  • Задержки ответа API
4. Определив причину, внести изменения в:
  • Настройки приложения (например, JVM)
  • Настройки инфраструктуры (например, вынести приложение на более холодную ноду)
  • Настройки базы данных (например, создать новые индексы под новые запросы)
  • Настройки масштабирования приложения (HPA (Horizontal Pod Autoscaler), VPA (Vertical Pod Autoscaler)
  • Архитектурное решение (например, разделить нагрузку на различные компоненты)

5. Настроить алерты и мониторинг, для автоматического отслеживания будущих сбоев

Как настроить probe для API?

Пару шагов для настройки:
1. Добавьте в приложение endpoint, который будет отвечать кодом 200. Например, /healthz или /ping
2. Добавьте в deployment.yaml строки
 # deployment.yaml
  containers:
  - name: application
    ...
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 3
      failureThreshold: 5
  • 8080 - порт, на котором работает ваше приложение
  • initialDelaySeconds - через сколько секунд после запуска будет запущена проверка
  • periodSeconds - интервал между проверка
  • failureThreshold - через сколько неуспешных проверок, приложение будет считаться "мертвым"?

Как настроить probe для Worker?

Пару шагов для настройки
1. Придумайте способ проверки, что приложение живо:
  • Можно время от времени создавать (и удалять) файл в /tmp директории
  • Делать запрос в брокер сообщений и проверять, что соединение активно
2. Добавьте в deployment.yaml строки:
# deployment.yaml  
  containers:
  - name: application
    ...
    livenessProbe:
      initialDelaySeconds: 45
      periodSeconds: 60
      exec:
        command:
        - "/bin/bash"
        - "-c"
        - "СПОСОБ ПРОВЕРКИ, ЧТО ПРИЛОЖЕНИЕ ЖИВО"
  • initialDelaySeconds - через сколько секунд после запуска будет запущена проверка
  • periodSeconds - интервал между проверка