Как подключить http-ответ к зондам готовности и живучести

Я пытаюсь перезапустить модуль, когда конечная точка возвращает HTTP 500 для конечной точки /health. Служба probe-pod никогда не должна отправлять трафик на модуль, пока он не работает.

  • У приложения должна быть конечная точка / начало, которая укажет, может ли оно принимать трафик, возвращая HTTP 200. Если конечная точка возвращает HTTP 500, приложение не завершило инициализацию.
  • У приложения должна быть другая конечная точка / работоспособность, которая укажет, работает ли приложение должным образом, путем возврата HTTP 200. Если конечная точка возвращает HTTP 500, приложение больше не отвечает.
  • Зонды должны использовать порт 8080

Я знаю, как работает зонд готовности и живучести, но как подключить их базу ответов на выходе? Не могу решить первый и второй пункты. Как я мог протестировать решение? Кто-нибудь может мне помочь?

2 ответа

Решение

Я думаю, вы можете выбрать следующий способ, также обратитесь к этой ссылке для ясности

 livenessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: as-required-by-you
    
 readinessProbe:
      httpGet:
        path: /start
        port: 8080

Я пытаюсь перезапустить модуль, когда конечная точка возвращает HTTP 500 для конечной точки /health. Служба probe-pod никогда не должна отправлять трафик на модуль, пока он не работает.

Это поведение по умолчанию в Kubernetes с тестами готовности. Если зонд не работает, модуль не "готов", и никакая служба не пересылает трафик на этот модуль. Вы можете контролировать его реакцию (с некоторыми последствиями для снижения производительности) с помощью periodSeconds вариант. Например, вы можете установить его на 1 секунду, чтобы быть уверенным, что как только зонд откажет, он будет выведен из пула трафика.

Что касается проверок готовности, жизнеспособности и запуска, у них есть httpGet механизм. Считают все коды статуса200-399 как прохождение, а все остальное как неудачное, но они не позволяют вам контролировать, какие коды состояния являются "Успешно", а какие - "Неудачными".

Если вы хотите больше контролировать код состояния, вы можете использовать ExecAction механизм и просто используйте такой скрипт:

CODE=`curl -s -o /dev/null -w '%{http_code}' http://www.example.org/`; if [ "$CODE" -ge 200 ] && [ "$CODE" -le 399 ]; then exit 0; else exit 1; fi

В приведенном выше случае вы должны убедиться, что curl установлен в вашем контейнере.

Другие вопросы по тегам