Установка KEDA с поддержкой Yandex Monitoring
Важно
Функциональность доступна только в регионе Россия.
KEDA
Приложение KEDA:
- Интегрирует автомасштабирование Kubernetes с Yandex Monitoring.
- Позволяет масштабировать приложения на основе метрик из Monitoring, например метрик Application Load Balancer или управляемых баз данных.
- Поддерживает настройку временных окон, агрегирование и обработку
NaN
-значений.
Перед началом работы
-
yc iam service-account create --name keda-sa
-
Назначьте роль
monitoring.viewer
сервисному аккаунту, созданному ранее:yc resource-manager folder add-access-binding \ --id <идентификатор_каталога> \ --service-account-name keda-sa \ --role monitoring.viewer
Идентификатор каталога можно получить со списком каталогов.
-
Создайте авторизованный ключ для сервисного аккаунта, созданного ранее, и сохраните его в файл
authorized-key.json
:yc iam key create \ --service-account-name keda-sa \ --output authorized-key.json
-
Убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Установите kubectl
и настройте его на работу с созданным кластером.
Установка с помощью Yandex Cloud Marketplace
-
Перейдите на страницу каталога
и выберите сервис Managed Service for Kubernetes. -
Нажмите на имя нужного кластера Managed Service for Kubernetes и выберите вкладку
Marketplace. -
В разделе Доступные для установки приложения выберите KEDA с поддержкой Yandex Monitoring и нажмите кнопку Перейти к установке.
-
Задайте настройки приложения:
- Пространство имен — создайте новое пространство имен
keda-system
. Если вы оставите пространство имен по умолчанию, KEDA может работать некорректно. - Название приложения — укажите название приложения.
- Ключ сервисного аккаунта — скопируйте в это поле содержимое файла
authorized-key.json
.
- Пространство имен — создайте новое пространство имен
-
Нажмите кнопку Установить.
-
Дождитесь перехода приложения в статус
Deployed
. -
Создайте ресурс
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 .
Установка с помощью Helm-чарта
-
Установите менеджер пакетов Helm
версии не ниже 3.8.0. -
Для установки Helm-чарта
с KEDA выполните команду:helm pull oci://cr.yandexcloud.kz/yc-marketplace/yandex-cloud/keda/keda-external-scaler-yc \ --version 1.1.1 \ --untar && \ helm install \ --namespace keda-system \ --create-namespace \ --set-file secret.data=./authorized-key.json \ --set keda.enabled=true \ keda ./keda
Если вы укажете в параметре
namespace
пространство имен по умолчанию, KEDA может работать некорректно.Примечание
Если вы используете версию Helm ниже 3.8.0, добавьте в начало команды строку
export HELM_EXPERIMENTAL_OCI=1 && \
, чтобы включить поддержку Open Container Initiative (OCI) в клиенте Helm.
Пример использования приложения
-
Разверните приложение
nginx
в кластере Managed Service for Kubernetes. -
Установите приложение ALB Ingress Controller и ресурс
Ingress
для приложенияnginx
. -
Создайте ресурс
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"