Sobes.tech
Middle
147
questionbank

Что произойдет, если не пройдет liveness-проба в Kubernetes?

Ответ от нейросети

sobes.tech AI

Если pod не проходит liveness-пробу, Kubernetes выполнит действие, указанное в manifest'е pod'а. По умолчанию это перезапуск контейнера.

Возможные действия при сбое liveness-пробы:

  • Restart: Перезапуск контейнера внутри pod'а. Это действие используется по умолчанию.
  • None: Kubernetes не будет предпринимать никаких действий при сбое liveness-пробы. Контейнер останется в текущем состоянии (Running или Crashing).
  • Exec Command: Выполнение определенной команды внутри контейнера. Если команда завершается с ненулевым кодом возврата, liveness-проба считается неудачной.

Сценарий с действием по умолчанию (Restart):

  1. kubelet на узле регулярно проверяет контейнер с помощью liveness-пробы.
  2. Условие liveness-пробы не выполняется (например, HTTP-сервер не отвечает, команда завершается с ошибкой).
  3. kubelet регистрирует сбой пробы.
  4. После некоторого количества неудачных попыток (настраивается параметрами failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds) kubelet определяет, что контейнер неисправен.
  5. kubelet отправляет сигнал SIGKILL неисправному контейнеру.
  6. Контейнер завершается.
  7. kubelet перезапускает контейнер в том же pod'е.
  8. Процесс liveness-пробы возобновляется.

Важно отличать liveness-пробу от readiness-пробы. Readiness-проба определяет готовность контейнера принимать трафик. Сбой readiness-пробы приводит к тому, что Service не направляет трафик на этот экземпляр pod'а, но контейнер при этом не перезапускается. Сбой liveness-пробы указывает на неисправность и потребность в перезапуске.

# Пример liveness-пробы в spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Задержка перед первой проверкой
      periodSeconds: 20      # Интервал между проверками
      timeoutSeconds: 5       # Время ожидания ответа
      failureThreshold: 3     # Количество неудачных попыток перед перезапуском