HPA с настраиваемыми показателями

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

У меня есть развертывание на GKE, которое включает очистку и экспорт определенной метрики из приложения в stackdriver. с помощью коляски prometheus-to-sd. метрика отображается в драйвере стека как custom.googleapis.com/dummy/foo

теперь, обычно, когда я выполняю HPA для пользовательской метрики, я использую ее следующим образом:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: custom-metric-prometheus-sd
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta1
    kind: Deployment
    name: custom-metric-prometheus-sd
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: External
    external:
      metricName: "custom.googleapis.com|dummy|foo"
      targetAverageValue: 20

теперь та же самая hpa работает также с использованием метрик Pod. нравиться:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: custom-metric-prometheus-sd
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta1
    kind: Deployment
    name: custom-metric-prometheus-sd
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: Pods
    pods:
      metricName: "custom.googleapis.com|dummy|foo"
      targetAverageValue: 20

работает так же. Я понимаю, что при использовании показателей модуля HPA будет извлекать показатели из всех модулей и вычислять среднее значение, которое будет сравниваться с целевым значением, чтобы определить количество реплик. в основном это то же самое, что и при использовании targetAverageValue во внешней метрике. Итак, в моем случае оба будут делать в основном то же самое, не так ли? Может быть, по-разному с точки зрения производительности, задержки и прочего?

спасибо Чен

1 ответ

Да, вы почти правы. Метрики, которые вы указали в своем вопросе, будут работать так же.

Пойдем немного глубже и прочитаем документацию о типах метрик: Kubernetes.io: Docs: Reference: Kubernetes API: v1.18: metricspec-v2beta1-autoscaling

ExternalMetricSource - external относится к глобальной метрике, не связанной ни с одним объектом Kubernetes. Он позволяет автомасштабирование на основе информации, поступающей от компонентов, работающих вне кластера (например, длины очереди в облачной службе обмена сообщениями или QPS от балансировщика нагрузки, работающего вне кластера).

PodsMetricSource - модули - это метрика, описывающая каждый модуль в текущем целевом масштабе (например, количество транзакций в секунду). Значения будут усреднены вместе перед сравнением с целевым значением.

Имейте в виду, что эта ссылка предназначена для api версии 1.18. Используйте версию, соответствующую вашему варианту использования.

В документации показано, что они разработаны как разные метрики, но их можно использовать так же, как вы.

Помимо описания, их отличает еще один показатель:

  • External есть поля:
    • metricName
    • metricSelector
    • targetAverageValue
    • targetValue
  • Pods есть поля:
    • metricName
    • metricSelector
    • targetAverageValue

Как видно выше, Pods метрика не имеет targetValue поле.

Каждый тип метрики имеет свой собственный набор свойств, и некоторые из них дают одинаковые результаты при использовании.

Пожалуйста, дайте мне знать, если у вас возникнут какие-либо вопросы.

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