У меня есть модули, развернутые в кластере kubernetes, которые обслуживают некоторые HTTPS-запросы. Я делаю нагрузочное тестирование для api с одновременными пользователями в секунду.
Пока я выполняю нагрузочные тесты, контейнер умирает из-за сбоев живучести и готовности и повторного развертывания модулей. Из-за этого мои API терпят неудачу.
liveness:
initialDelaySeconds: 60
periodSeconds: 20
timeoutSeconds: 60
successThreshold: 1
failureThreshold: 4
readiness:
initialDelaySeconds: 60
periodSeconds: 20
timeoutSeconds: 60
successThreshold: 1
failureThreshold: 4
livenessProbe:
httpGet:
path: /health
port: 8000
scheme: HTTPS
readinessProbe
httpGet:
path: /health
port: 8000
scheme: HTTPS
Как мне избежать этих неудач? Это связано с тем, что мое приложение не может обслуживать запросы на живучесть?
1 ответ
Вам нужно будет более конкретно указать, какие именно нагрузочные тесты вы выполняете. Какие инструменты вы используете.
Пожалуйста, проверьте описание pod
для журналов событий, которые приводят к изменению расписания модуля. Это может быть сделано с помощью kubectl describe pod <pod_name>
. Возможно, вашему поду не хватает памяти или процессора, поэтому вы можете посмотреть запросы и ограничения в Управление вычислительными ресурсами для контейнеров.
Вы упомянули, что готовность и проверки живости не работают во время выполнения теста, что указывает на то, что вы нагружаете http/https до предела, когда он больше не может обслуживать запросы.
Чтобы выполнить проверку, kubelet отправляет HTTPS-запрос GET на сервер, работающий в контейнере и прослушивающий порт 8000. Если обработчик пути /health
сервера возвращает код успеха, kubelet считает, что контейнер будь жив и здоров. Если обработчик возвращает код ошибки, kubelet убивает контейнер и перезапускает его.
Любой код больше или равен 200 и меньше 400 указывает на успех. Любой другой код указывает на сбой.
Чтобы смягчить эти сбои, вы можете увеличить timeoutSeconds
и/или failureThreshold
, но я думаю, вам следует поработать над процессом, который обслуживает запросы.
Также я рекомендую прочитать это замечательное руководство Лучшие практики Kubernetes: настройка проверок работоспособности с проверками готовности и живучести.
Похожие вопросы
Новые вопросы
kubernetes
ВОПРОСЫ КУБЕРНЕТА ДОЛЖНЫ БЫТЬ ОТНОШЕНЫ К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. Настройка и развертывание здесь не по теме. Хорошее эмпирическое правило: если это происходит за пределами группы, это, вероятно, не по теме. Если речь идет о коде, работающем внутри модуля, то, вероятно, все в порядке.