Как подключить 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
установлен в вашем контейнере.