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
поле.
Каждый тип метрики имеет свой собственный набор свойств, и некоторые из них дают одинаковые результаты при использовании.
Пожалуйста, дайте мне знать, если у вас возникнут какие-либо вопросы.