KEDA с поддержкой Yandex Monitoring
KEDA — приложение, которое выполняет автомасштабирование ресурсов Kubernetes в кластере Managed Service for Kubernetes на основе мониторинга нагрузки.
Приложение KEDA:
- Интегрирует автомасштабирование ресурсов Kubernetes с Yandex Cloud Monitoring.
- Позволяет масштабировать приложения на основе метрик из Yandex Monitoring, например метрик Application Load Balancer или управляемых баз данных.
- Поддерживает настройку временных окон, агрегирование и обработку
NaN-значений.
-
Создайте сервисный аккаунт, необходимый для работы KEDA.
-
Назначьте сервисному аккаунту роль
monitoring.viewer. -
Создайте для сервисного аккаунта авторизованный ключ и сохраните в файл
sa-key.json:yc iam key create \ --service-account-name <имя_сервисного_аккаунта> \ --output sa-key.json -
Задайте настройки приложения:
- Пространство имен — создайте новое пространство имен
keda-system. Если вы оставите пространство имен по умолчанию, KEDA может работать некорректно. - Название приложения — укажите название приложения.
- Ключ сервисного аккаунта — скопируйте в это поле содержимое файла
sa-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.
-
Разверните приложение
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"
Служба технической поддержки Yandex Cloud отвечает на запросы 24 часа в сутки, 7 дней в неделю. Доступные виды запросов и срок их обработки зависят от тарифного плана. Подключить платную поддержку можно в консоли управления. Подробнее о порядке оказания технической поддержки.
| Helm-чарт | Версия | Pull-команда | Документация |
|---|---|---|---|
| yandex-cloud/keda/chart/keda-external-scaler-yc | 1.1.3 | Открыть |
| Docker-образ | Версия | Pull-команда |
|---|---|---|
| yandex-cloud/keda/keda-external-scaler-yc1763061034264074249206115368493092305252254738064 | v1.2.19 |