#kubernetes #autoscaling
#kubernetes #автоматическое масштабирование
Вопрос:
Серверный модуль и клиентский модуль работают в кластере K8S. Я настроил свой серверный модуль на масштабирование, когда его использование памяти достигает порогового значения.
Теперь я хочу увеличивать количество потоков в моем клиентском модуле всякий раз, когда создается новый серверный модуль. Как перехватить это событие автоматического масштабирования в клиентском модуле?
Ответ №1:
Теперь я хочу увеличивать количество потоков в моем клиентском модуле всякий раз, когда создается новый серверный модуль. Как перехватить это событие автоматического масштабирования в клиентском модуле?
Приложение обычно не должно знать, что оно запущено в Kubernetes, например, оно должно быть независимым от такого рода информации.
Но вполне возможно создать приложение (например, ваш клиент?) что известно о среде Kubernetes и что происходит в среде. Для получения этой информации вам необходимо взаимодействовать с сервером APIServer, обычно это делается с помощью client-go (если используется Golang), но есть библиотеки и для других языков, например, Kubernetes Java client. Вы можете, например, следить за событиями или количеством реплик для вашего сервера.
Ответ №2:
Не делайте этого. Концептуально должно быть наоборот: когда ваш клиент загружает больше нагрузки, сервер масштабируется; или, скажем, по-другому, когда клиент масштабируется из-за входящих запросов, например, тогда на сервер возлагается больше нагрузки, что приводит к срабатыванию автоскалера.
Технически можно отслеживать события масштабирования с помощью библиотек программирования K8s для языков, о которых говорил @Jonas.
Комментарии:
1. Продукт является устаревшим продуктом, и фиксированное количество потоков подключается к серверу с использованием сокетов tcp. Будет только один клиент. Таким образом, несмотря на то, что сервер масштабируется, поскольку клиент имеет фиксированное количество потоков, увеличенный серверный модуль не получает никакого трафика и простаивает.