KEDA с поддержкой Yandex Monitoring

Обновлено 19 февраля 2026 г.

KEDA — приложение, которое выполняет автомасштабирование ресурсов Kubernetes в кластере Managed Service for Kubernetes на основе мониторинга нагрузки.

Приложение KEDA:

  • Интегрирует автомасштабирование ресурсов Kubernetes с Yandex Cloud Monitoring.
  • Позволяет масштабировать приложения на основе метрик из Yandex Monitoring, например метрик Application Load Balancer или управляемых баз данных.
  • Поддерживает настройку временных окон, агрегирование и обработку NaN-значений.
Инструкция по развертыванию
  1. Создайте сервисный аккаунт, необходимый для работы KEDA.

  2. Назначьте сервисному аккаунту роль monitoring.viewer.

  3. Создайте для сервисного аккаунта авторизованный ключ и сохраните в файл sa-key.json:

    yc iam key create \
       --service-account-name <имя_сервисного_аккаунта> \
       --output sa-key.json
    
  4. Задайте настройки приложения:

    • Пространство имен — создайте новое пространство имен keda-system. Если вы оставите пространство имен по умолчанию, KEDA может работать некорректно.
    • Название приложения — укажите название приложения.
    • Ключ сервисного аккаунта — скопируйте в это поле содержимое файла sa-key.json.
  5. Нажмите кнопку Установить.

  6. Дождитесь перехода приложения в статус Deployed.

  7. Создайте ресурс ScaledObject с настройками автомасштабирования ресурсов:

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: <имя_ресурса>
    spec:
      scaleTargetRef:
        name: <имя_ресурса_для_автомасштабирования>
      pollingInterval: <интервал_проверки_событий_мониторинга>
      cooldownPeriod: <период_ожидания_после_события>
      minReplicaCount: <минимальное_количество_реплик_для_автомасштабирования>
      maxReplicaCount: <максимальное_количество_реплик_для_автомасштабирования>
      triggers:
      - type: external
        metadata:
          scalerAddress: keda-external-scaler-yc.keda-system.svc.cluster.local:8080
          query: <запрос_метрики_Yandex_Monitoring>
          folderId: "<идентификатор_каталога>"
          targetValue: "<целевое_значение_метрики>"
          downsampling.disabled: <включить_режим_прореживания_данных>
          downsampling.gridAggregation: "<функция_агрегации_данных>"
          downsampling.gridInterval: "<ширина_временного_окна_прореживания>"
          downsampling.maxPoints: <максимальное_количество_точек>
          downsampling.gapFilling: <заполнение_данных>
    
          timeWindow: "<окно_временного_интервала>"
          timeWindowOffset: "<отступ_временного_окна>"
     
          logLevel: "<уровень_логирования>"
          logMetrics: "<разрешить_логирование_запросов_Monitoring>"
          logAggregation: "<разрешить_логирование_агрегации_данных>"
    

    Обязательные метаданные в поле triggers:

    • scalerAddress — адрес сервиса автомасштабирования. Всегда keda-external-scaler-yc.keda-system.svc.cluster.local:8080.
    • query — запрос метрики Monitoring.
    • folderId — идентификатор каталога, в котором будет работать провайдер.
    • targetValue — целевое значение метрики, при превышении которого добавляется под для реплики.

    Параметры прореживания (downsampling). Для работы автомасштабирования нужно выбрать хотя бы один из параметров:

    • downsampling.gridAggregation — функция агрегации данных. Возможные значения: MAX, MIN, SUM, AVG, LAST, COUNT. Значение по умолчанию — AVG.

    • downsampling.gapFilling — настройки заполнения пропусков в данных:

      • NULL — возвращает null в качестве значения метрики и timestamp в качестве временной метки.
      • NONE — не возвращает значений.
      • PREVIOUS — возвращает значение из предыдущей точки.
    • downsampling.maxPoints — максимальное количество точек, которое будет получено в ответе на запрос. Значение параметра должно быть больше 10.

    • downsampling.gridInterval — ширина временного окна (сетки) в миллисекундах. Используется для прореживания: точки внутри окна объединяются в одну при помощи функции агрегации. Значение параметра должно быть больше 0.

    • downsampling.disabled — отключение прореживания данных. Возможные значения: true или false.

      Используйте только один из параметров downsampling.maxPoints, downsampling.gridInterval или downsampling.disabled. Подробнее о параметрах прореживания см. в документации API.

    Параметры временного окна:

    • timeWindow — временной период, в котором рассчитывается функция агрегации (в формате DdHhMmSs, например 5d10h30m20s).
    • timeWindowOffset — задержка вычисления функции во временном окне.

    Параметры логирования:

    • logLevel — уровень логирования. Возможные значения: debug, info, warn, error, none. Значение по умолчанию — info.
    • logMetrics — разрешить логирование запросов Monitoring: true или false. Значение по умолчанию — false.
    • logAggregation — разрешить логирование агрегации данных: true или false. Значение по умолчанию — false.

    Подробнее о параметрах ресурса ScaledObject см. в документации проекта на Github.

Тип тарификации
Free
Тип
Приложение Kubernetes®
Категория
Администрирование и DevOps
Издатель
Yandex Cloud
Примеры использования
  1. Разверните приложение nginx в кластере Managed Service for Kubernetes.

  2. Установите приложение ALB Ingress Controller и ресурс Ingress для приложения nginx.

  3. Создайте ресурс ScaledObject с настройками автомасштабирования подов веб-приложения по метрикам Application Load Balancer:

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: demo-app-scaler
    spec:
      scaleTargetRef:
        name: <имя_ресурса_Deployment>
      pollingInterval: 30
      cooldownPeriod: 60
      minReplicaCount: 1
      maxReplicaCount: 20
      triggers:
      - type: external
        metadata:
          scalerAddress: keda-external-scaler-yc.keda-system.svc.cluster.local:8080
          query: |
           alias(replace_nan(series_sum("load_balancer.requests_count_per_second"{
           service="application-load-balancer", 
           load_balancer="<идентификатор_балансировщика>", 
           http_router="*", virtual_host="*", 
           route="<идентификатор_маршрута>", 
           backend_group="*", backend="*", 
           zone="*", code="total"}), 0), "Total requests count")
          folderId: "<идентификатор_каталога>"
          targetValue: "<целевое_значение_метрики>"
          downsampling.gridAggregation: "AVG"
          downsampling.gridInterval: "120000"
    
          timeWindow: "2m"
          timeWindowOffset: "30s"
     
          logLevel: "debug"
          logMetrics: "true"
          logAggregation: "true"
    
Техническая поддержка

Служба технической поддержки Yandex Cloud отвечает на запросы 24 часа в сутки, 7 дней в неделю. Доступные виды запросов и срок их обработки зависят от тарифного плана. Подключить платную поддержку можно в консоли управления. Подробнее о порядке оказания технической поддержки.

Состав продукта
Helm-чартВерсия
Pull-команда
Документация
yandex-cloud/keda/chart/keda-external-scaler-yc1.1.3Открыть
Docker-образВерсия
Pull-команда
yandex-cloud/keda/keda-external-scaler-yc1763061034264074249206115368493092305252254738064v1.2.19
Лицензионное соглашение
Используя данный продукт, вы соглашаетесь с Условиями использования Yandex Cloud Marketplace и с условиями использования следующих продуктов: Лицензия KEDA
Тип тарификации
Free
Тип
Приложение Kubernetes®
Категория
Администрирование и DevOps
Издатель
Yandex Cloud