У меня есть модули, развернутые в кластере 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

Как мне избежать этих неудач? Это связано с тем, что мое приложение не может обслуживать запросы на живучесть?

0
PGS 17 Апр 2020 в 19:54
Как узнать, что контейнер убивают из-за сбоя проверки готовности/живости?
 – 
Arghya Sadhu
17 Апр 2020 в 20:09

1 ответ

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

Пожалуйста, проверьте описание pod для журналов событий, которые приводят к изменению расписания модуля. Это может быть сделано с помощью kubectl describe pod <pod_name>. Возможно, вашему поду не хватает памяти или процессора, поэтому вы можете посмотреть запросы и ограничения в Управление вычислительными ресурсами для контейнеров.

Вы упомянули, что готовность и проверки живости не работают во время выполнения теста, что указывает на то, что вы нагружаете http/https до предела, когда он больше не может обслуживать запросы.

Чтобы выполнить проверку, kubelet отправляет HTTPS-запрос GET на сервер, работающий в контейнере и прослушивающий порт 8000. Если обработчик пути /health сервера возвращает код успеха, kubelet считает, что контейнер будь жив и здоров. Если обработчик возвращает код ошибки, kubelet убивает контейнер и перезапускает его.

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

Чтобы смягчить эти сбои, вы можете увеличить timeoutSeconds и/или failureThreshold, но я думаю, вам следует поработать над процессом, который обслуживает запросы.

Также я рекомендую прочитать это замечательное руководство Лучшие практики Kubernetes: настройка проверок работоспособности с проверками готовности и живучести.

0
Crou 20 Апр 2020 в 16:13