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):
- kubelet на узле регулярно проверяет контейнер с помощью liveness-пробы.
- Условие liveness-пробы не выполняется (например, HTTP-сервер не отвечает, команда завершается с ошибкой).
- kubelet регистрирует сбой пробы.
- После некоторого количества неудачных попыток (настраивается параметрами
failureThreshold,initialDelaySeconds,periodSeconds,timeoutSeconds) kubelet определяет, что контейнер неисправен. - kubelet отправляет сигнал
SIGKILLнеисправному контейнеру. - Контейнер завершается.
- kubelet перезапускает контейнер в том же pod'е.
- Процесс 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 # Количество неудачных попыток перед перезапуском