Можно ли установить имя внешнего метри c для HorizontalPodAutoscaler из configmap? GKE - PullRequest
1 голос
/ 11 июля 2020

Я изменяю развертывание, которое автоматически масштабируется с помощью HorizontalPodAutoscaler (HPA). Это развертывание является частью конвейера, в котором работники читают сообщения из подписок pubsub, выполняют некоторую работу и публикуют sh на следующей вершине c. Прямо сейчас я использую configmap для определения конвейера для развертываний (configmap содержит входную подписку и выходные темы). HPA автоматически масштабируется в зависимости от количества сообщений во входной подписке. Я хотел бы иметь возможность извлечь имя подписки для HPA из configmap, если это возможно? Есть ли способ сделать это?

пример HPA:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: my-deployment-hpa
  namespace: default
  labels:
    name: my-deployment-hpa
spec:
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - external:
        metricName: pubsub.googleapis.com|subscription|num_undelivered_messages
        metricSelector:
          matchLabels:
            resource.labels.subscription_id: "$INPUT_SUBSCRIPTION"
        targetAverageValue: "2"
      type: External
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-deployment

Текущее значение HPA $INPUT_SUBSCRIPTION в идеале могло бы быть получено из configmap.

1 Ответ

0 голосов
/ 31 августа 2020

Публикация этого ответа как вики-сообщества для лучшей видимости, а также ответ был предоставлен в комментариях.

Отвечая на вопрос из сообщения:

Я бы хотел чтобы иметь возможность получить имя подписки для HPA из configmap, если это возможно? Есть ли способ сделать это?

Как указал пользователь @Abdennour TOUMI, нет возможности установить метрику c, используемую HPA, с помощью ConfigMap:

К сожалению, нельзя .. но можно с помощью prometheus-adapter + HPA. Проверьте этот туто: itnext.io /...

Что касается обходного пути вручную , вы можете использовать сценарий, который будет извлекать необходимое метри c имя из configMap и использовать шаблон для замены и применения нового HPA.

С configMap вроде:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example
data:
  metric_name: "new_awesome_metric" # <-
  not_needed: "only for example" 

И следующим скриптом:

#!/bin/bash

# variables
hpa_file_name="hpa.yaml"
configmap_name="example"
string_to_replace="PLACEHOLDER"

# extract the metric name used in a configmap
new_metric=$(kubectl get configmap $configmap_name -o json | jq '.data.metric_name')

# use the template to replace the $string_to_replace with your $new_metric and apply it
sed "s/$string_to_replace/$new_metric/g" $hpa_file_name | kubectl apply -f -

Этот скрипт должен иметь hpa.yaml с шаблоном для его применения в качестве ресурса (пример из вопроса можно использовать с изменением:

  • resource.labels.subscription_id: PLACEHOLDER

Для получения дополнительной информации это определение HPA может быть основано на этом руководстве:

Cloud.google.com: Kubernetes Engine: Учебники: Autoscaling-metrics: PubSub

...