Kubernetes — Как прочитать тело ответа в livenessProbe контейнера?

#kubernetes #kubelet #livenessprobe

#kubernetes #kubelet #livenessprobe

Вопрос:

Ниже приведена текущая конфигурация для livenessProbe:

    livenessProbe:
        httpGet:
          path: /heartbeat
          port: 8000
        initialDelaySeconds: 2
        timeoutSeconds: 2
        periodSeconds: 8
        failureThreshold: 2
 

Но тело ответа для URL .well-known/heartbeat -адреса отображается status: "DOWN" , а статус возврата http равен 200

Итак, Kubelet не перезапускает контейнер из-за состояния ответа http 200


Как убедиться, что Kubelet считывает тело ответа, а не статус возврата http? использование livenessProbe конфигурации

Ответ №1:

Вы можете интерпретировать тело в своем зонде, используя команду оболочки, пример:

 livenessProbe:
  exec:
    command:
    - sh
    - -c
    - curl -s localhost | grep 'status: "UP"'
 

grep возвращает ненулевое значение if status: "DOWN" , которое приведет к сбою readinessProbe. Вы, конечно, можете настроить скрипт в соответствии с вашим фактическим телом ответа.

Ответ №2:

Как убедиться, что Kubelet считывает тело ответа, а не статус возврата http? использование конфигурации livenessProbe

Это не соответствует «контракту», предоставляемому Kubernetes. Вероятно, вам нужно реализовать пользовательскую конечную точку, которая следует контракту для проверки работоспособности HTTP, как показано ниже.

Из Определения HTTP-проверки живучести

Если обработчик возвращает код сбоя, kubelet завершает работу контейнера и перезапускает его.

Любой код, больший или равный 200 и меньший 400, указывает на успех. Любой другой код указывает на сбой.