Как перехватить событие автоматического масштабирования в другом модуле?

#kubernetes #autoscaling

#kubernetes #автоматическое масштабирование

Вопрос:

Серверный модуль и клиентский модуль работают в кластере K8S. Я настроил свой серверный модуль на масштабирование, когда его использование памяти достигает порогового значения.

Теперь я хочу увеличивать количество потоков в моем клиентском модуле всякий раз, когда создается новый серверный модуль. Как перехватить это событие автоматического масштабирования в клиентском модуле?

Ответ №1:

Теперь я хочу увеличивать количество потоков в моем клиентском модуле всякий раз, когда создается новый серверный модуль. Как перехватить это событие автоматического масштабирования в клиентском модуле?

Приложение обычно не должно знать, что оно запущено в Kubernetes, например, оно должно быть независимым от такого рода информации.

Но вполне возможно создать приложение (например, ваш клиент?) что известно о среде Kubernetes и что происходит в среде. Для получения этой информации вам необходимо взаимодействовать с сервером APIServer, обычно это делается с помощью client-go (если используется Golang), но есть библиотеки и для других языков, например, Kubernetes Java client. Вы можете, например, следить за событиями или количеством реплик для вашего сервера.

Ответ №2:

Не делайте этого. Концептуально должно быть наоборот: когда ваш клиент загружает больше нагрузки, сервер масштабируется; или, скажем, по-другому, когда клиент масштабируется из-за входящих запросов, например, тогда на сервер возлагается больше нагрузки, что приводит к срабатыванию автоскалера.

Технически можно отслеживать события масштабирования с помощью библиотек программирования K8s для языков, о которых говорил @Jonas.

Комментарии:

1. Продукт является устаревшим продуктом, и фиксированное количество потоков подключается к серверу с использованием сокетов tcp. Будет только один клиент. Таким образом, несмотря на то, что сервер масштабируется, поскольку клиент имеет фиксированное количество потоков, увеличенный серверный модуль не получает никакого трафика и простаивает.