Keda с интеграцией prometheus
Ниже приведены подробности установки:keda установлена,prometheus развернут, через приложение с использованием масштабированного ниже шаблона объекта для hpa:
keda:
triggers:
- metadata:
metricName: container_memory_usage
query: avg(floor((container_memory_usage_bytes{pod=~"pythonb-.*",container=~"proxy"} / container_spec_memory_limit_bytes != +Inf) * 100))
serverAddress: <serveraddress>
threshold: '70'
type: prometheus
в основном мы хотим масштабировать развертывание на основе заданного запроса prom(на основе использования памяти контейнера для конкретных модулей ... если он превышает 70%, тогда hpa будет масштабировать модули). когда мы пытаемся выполнить вышеуказанный запрос на Prometheus, он возвращает результаты. как 8., 10.. , 25.3. В основном ответ с одним элементом. Но хотя кеда дает результат, как показано ниже:
kubectl get hpa -n integration keda-pythonb
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
keda-pythonb Deployment/pythonb 3500m/70 (avg), 34%/87% + 1 more... 2 10 2 14m
Вместо одного значения он дает 3500 м в качестве текущего значения. преобразует ли кеда данные, возвращаемые из запроса выпускного вечера? Любые указатели будут полезны. Я надеюсь, что запрос выпускного вечера правильный.
1 ответ
Мы только что решили эту проблему после долгих поисков. Оказывается, у KEDA есть опция, которую вы можете указать в разделе . TLDR, вам нужно установить это на"Value"
.
Чтобы понять, почему вам нужно погрузиться в то, как HPA работает в Kubernetes. Когда вы определяетеkind: HorizontalPodAutoscaler
вы указываете метрики, которые используются для масштабирования. KEDA сделает это за вас и создаст такую внешнюю метрику:
metrics:
- external:
metric:
name: ...
selector:
matchLabels:
scaledobject.keda.sh/name: ...
target:
type: AverageValue
averageValue: ...
type: External
Есть и метрические типы.AverageValue
значение по умолчанию, предназначенное для таких показателей, какhttp-requests-per-second
, которое необходимо разделить на количество реплик перед сравнением с целью. , с другой стороны, берет прямое значение из вашей метрики, не усредняя его.
Поскольку ваш запрос Prometheus уже возвращает среднее значение по модулям, вам нужно использоватьValue
. Подсказка в вашемkubectl get hpa
выход:3500m/70 (avg)
.
См. документы по HPA с внешними метриками .
В KEDA, указанном с помощьюmetricType
вариант подtriggers
поле.