Горизонтальное автомасштабирование модуля HorizontalPodAutoscaler (HPA)
Горизонтальное автомасштабирование модуля
Горизонтальное автомасштабирование модуля – это автоматическое масштабирование количества реплик модуля, управляемых контроллером. Оно выполняется горизонтальным контроллером, который активируется и конфигурируется путем создания ресурса HorizontalPodAutoscaler (HPA). Данный контроллер периодически проверяет метрики модуля, вычисляет количество реплик, необходимое для соответствия целевому значению метрики, сконфигурированной в ресурсе HorizontalPodAutoscaler, и настраивает поле replicas на целевом ресурсе (развертывании Deployment, наборе реплик ReplicaSet, контроллере репликации ReplicationController или наборе модулей с внутренним состоянием StatefulSet)
Процесс автомасштабирования
Процесс автомасштабирования можно разделить на три этапа:
- получение метрик всех модулей, управляемых масштабируемым ресурсным объектом;
- расчёт количества модулей, необходимого для приведения метрик к указанному целевому значению (или близкому к нему);
- обновление поля replicas масштабируемого ресурса. Далее мы рассмотрим все три этапа
Получение метрик модуля
Автопреобразователь масштаба сам не выполняет сбор метрик модуля. Он получает метрики из другого источника. Метрики модуля и узла собираются агентом под названием cAdvisor, который выполняется в Kubelet на каждом узле, а затем агрегируется кластерным компонентом под названием Heapster. Контроллер автопреобразователя горизонтального масштаба модуля получает метрики всех модулей, запрашивая агрегатор Heapster посредством вызовов REST.
Расчет необходимого количества модулей
После того как автопреобразователь масштаба получил метрики для всех модулей, принадлежащих ресурсу, который автопреобразователь масштабирует Deployment, ReplicaSet, ReplicationController или StatefulSet, он может использовать эти метрики, чтобы выяснить необходимое количество реплик. Он должен найти число, которое сделает среднее значение метрики для всех реплик как можно ближе к сконфигурированному целевому значению. Входными данными для этого вычисления является метрика модуля (возможно, несколько метрик на модуль), а выходными данными является целое число (количество реплик модуля).
Когда автопреобразователь масштаба сконфигурирован на рассмотрение только одной метрики, расчет необходимого количества реплик не представляет труда. Требуется лишь просуммировать значения метрик всех модулей, разделив их на целевое значение, установленное на ресурсе HorizontalPodAutoscaler, а затем округлить до ближайшего целого. Фактическая процедура вычисления немного сложнее, чем тут, потому что она также проверяет, чтобы автопреобразователь масштаба не метался туда-сюда, когда значение метрики неустойчиво и быстро меняется. Когда автомасштабирование основано на нескольких метриках модуля (например, потреблении ЦП и запросах в секунду [QPS]), вычисление ненамного сложнее. Автопреобразователь масштаба вычисляет количество реплик для каждой метрики по отдельности, а затем принимает наибольшее значение (например, если для достижения целевого потребления ЦП требуется четыре модуля, а для достижения целевого QPS требуется три модуля, то автопреобразователь промасштабирует до четырех модулей).
Обновление требуемого количества реплик для масштабируемого ресурса
Последним этапом операции автомасштабирования является обновление поля требуемого количества реплик для объекта масштабируемого ресурса (например, набора реплик ReplicaSet), а затем предоставление контроллеру набора реплик возможности развернуть дополнительные модули или удалить лишние. Контроллер автопреобразования масштаба изменяет поле replicas масштабируемого ресурса с помощью ресурса Scale. Он дает возможность автопреобразователю масштаба делать свою работу, не зная никаких подробностей о ресурсе, который он масштабирует, за исключением того, к чему пре[1]доставляется доступ посредством подресурса Scale.
Это позволяет автопреобразователю масштаба оперировать на любом масштабируемом ресурсе, в случае если сервер API предоставляет доступ к подресурсу Scale. Он доступен для:
- развертываний Deployment;
- наборов реплик ReplicaSet;
- контроллеров репликации ReplicationController;
- наборов модулей с внутренним состоянием StatefulSet.
0