Некоторые запросы не выполняются во время автомасштабирования в kubernetes - PullRequest
5 голосов
/ 05 июля 2019

Я настроил кластер k8s на microk8s и перенес на него свое приложение.Я также добавил горизонтальное автоматическое масштабирование, которое добавляет модули в зависимости от загрузки процессора.Автоскалер работает нормально и добавляет стручки, когда есть нагрузка за пределы цели, и когда я через некоторое время снимаю нагрузку, она убивает стручки.

Проблема в том, что я заметил в те же самые моменты, чтоauto-scaler создает новые модули, некоторые запросы не выполняются:

POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code :  502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code :  200
POST Response Code :  502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code :  502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200

Мне нравится знать, в чем причина этого и как я могу это исправить?

Обновление: я так думаюЛучше я дам вам больше информации относительно моей установки:

Трафик поступает из-за пределов кластера, но и узел k8s, и программа, которая генерирует запросы, находятся на одной машине, поэтому проблем с сетью нет.Существует специальный компонент nginx, который не выполняет балансировку нагрузки, а просто действует как обратный прокси-сервер и отправляет трафик соответствующим службам.

Я провел другой тест, который дал мне больше информации.Я запустил тот же самый тест, но на этот раз вместо отправки запросов обратному прокси-серверу (nginx) я использовал IP-адрес этой конкретной службы, и у меня не было неудачного запроса, пока auto-scaler выполнял свою работу и запускал несколько модулей.Я не уверен, что проблема в Nginx или k8s?

Ответы [ 2 ]

3 голосов
/ 05 июля 2019

Когда появляются новые модули, Kubernetes немедленно начинает перенаправлять трафик на них. Однако, как правило, загрузка модуля и запуск его в эксплуатацию (готов) занимает некоторое время.

Чтобы этого не происходило, вы можете определить Датчик готовности для ваших стручков. K8s будет периодически вызывать модуль в предоставленной вами конечной точке готовности, чтобы определить, работает ли этот модуль и готов ли он принимать запросы. K8s не будет перенаправлять трафик на модуль, пока конечные точки готовности не вернут успешный результат в зависимости от типа датчика (см. Раздел « Типы датчиков »).

1 голос
/ 05 июля 2019

О вашем вопросе:

Я не уверен, что проблема в Nginx или k8s?

Согласно документации ingress-nginx:

Входной контроллер NGINX не использует службы для маршрутизации трафика. к стручкам. Вместо этого он использует API конечных точек, чтобы обойти kube-proxy для поддержки функций NGINX, таких как сессия и пользовательские настройки алгоритмы балансировки нагрузки. Это также устраняет некоторые накладные расходы, такие как записи контратаки для iptables DNAT

Таким образом, я считаю, что проблема в Nginx, который не использует все возможности Kubernetes (например, kube-proxy) и отправляет запросы в Pod до того, как они будут полностью готовы.
Однако, очевидно, эта проблема была исправлена ​​ в 0.23.0 (февраль / 2019), поэтому вам следует проверить свою версию.
Лично я испытываю меньше проблем после переключения с Ingress-Nginx на Ambassador , который по умолчанию перенаправляет запросы в службы (поэтому Kubernetes отвечает за балансировку нагрузки и отправляет ее на соответствующий Pod).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...