В этом переводе рассказываем о том, как настроить автомасштабирование контроллера Ingress с использованием Prometheus, KEDA и Locust для генерации трафика.

Чтобы настроить автомасштабирование на основе входящих запросов, необходимо следующее:

  1. Метрики (например, количество запросов в секунду).

  2. Коллектор метрик (для хранения метрик).

  3. Автоскейлер (для обработки данных).

Источник

Давайте начнём с метрик.

Можно настроить nginx-ingress для отображения метрик Prometheus. Для подсчета количества активных запросов можно использовать nginx_connections_active.

Источник

Далее необходимо найти способ получения метрик. Как вы уже догадались, для этого можно установить Prometheus. Поскольку Nginx-ingress использует аннотации для Prometheus, я установил сервер без оператора Kubernetes.

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
"prometheus-community" has been added to your repositories
$ helm install prometheus prometheus-community/prometheus
NAME: prometheus
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

Я использовал Locust для генерации трафика на Ingress, чтобы проверить, все ли работает гладко. Открыв приборную панель Prometheus, я проверил, что метрики увеличиваются по мере увеличения трафика на контроллере.

Источник

Последним пазлом стал автоскейлер. Я решил выбрать KEDA, потому что:

  1. Это автоскейлер с сервером метрик (поэтому мне не нужно устанавливать два разных инструмента).

  2. Он проще в настройке, чем адаптер Prometheus.

  3. Я могу использовать Horizontal Pod Autoscaler с PromQL.

Источник

После установки KEDA мне оставалось только создать объект ScaledObject, настроить источник метрик (Prometheus) и масштабировать подсистемы (с помощью запроса PromQL).

Источник

KEDA автоматически создает для меня HPA. Я повторил тесты с Locust и наблюдал, как увеличивается количество реплик по мере увеличения трафика на контроллере Nginx Ingress!

Источник

Можно ли распространить этот паттерн на любое другое приложение? Можно ли автомасштабировать все микросервисы по количеству поступающих запросов? 

Если они не предоставляют метрики, то ответ отрицательный. Однако существует обходной путь.

KEDA поставляется с HTTP-надстройкой для обеспечения масштабирования по протоколу HTTP. Как это работает? KEDA ижектит прокси sidecar в ваш pod, чтобы весь HTTP-трафик маршрутизировался первым. Затем он измеряет количество запросов и выдает метрики. Имея под рукой эти данные, можно запустить автоскейлер.

Источник

Однако KEDA — не единственный вариант. Можно установить Prometheus Adapter. Метрики будут поступать из Nginx в Prometheus, а затем адаптер сделает их доступными для Kubernetes. Оттуда они потребляются Horizontal Pod Autoscaler.

Источник

Лучше ли это, чем KEDA? Они похожи, поскольку оба должны запрашивать и буферизовать метрики из Prometheus. Однако KEDA является подключаемой, а Adapter работает исключительно с Prometheus.

Источник

Есть ли конкурент у KEDA?

Перспективный проект под названием Custom Pod Autoscaler призван сделать автоскейлер подключаемым. Однако проект в большей степени ориентирован на то, как эти поды должны масштабироваться (т.е. на алгоритм), а не на сбор метрик.

Эти ссылки могут быть полезными для дальнейшего изучения темы:

Если вы хотите еще больше узнать об автосклейниге приложений в кластере Kubernetes и научиться подключать кастомные метрики, то приходите в Слёрм на курс Kubernetes: Мега. На нём вы: 

  • Изучите тонкости установки и конфигурации production-ready кластера.

  • Разберетесь с механизмами стабильности, безопасности и отказоустойчивости.

  • Научитесь работать с масштабированием.

  • Разберёте стратегические задачи инфраструктуры.

Это продвинутый курс для тех, кто уже работал с Kubernetes и уже готов заглянуть под капот и решать задачи, связанные с тонкой настройкой.

???? Полную программу курса смотрите на нашем сайте.

Также смотрите запись вебинара Вечерней школы Kubernetes об автоскейлинге на канале Слёрма.

Комментарии (2)


  1. mikegordan
    02.10.2023 07:36

    Не совсем ясны плюсы чем лучше стандартного механизма из коробки. Да и оверхэд в пару сервисов , прометей и т.д.

    А если еще у тебя внутри кубера sidecar , то трудно представить кто кого будет пытаться "перепикать"


    1. Keirichs
      02.10.2023 07:36

      HPA берёт только общее количество CPU всего пода(и всё....), бывают ситуации, когда сайдкар может уйти в 100%, а наш основной сервис переводить треды на режим ожидания или если опертивка кончилась у сервиса - HPA не сработает.