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поле.

См. KEDA: Масштабирование развертываний

Другие вопросы по тегам