Я столкнулся с двумя различными подходами к масштабированию по конкретному c metri c, и мне интересно, в чем разница, и если таковое есть в моем случае.
У меня есть развертывание на GKE, которое включает в себя очистку и экспорт указанного c metri c из приложения в драйвер стека. с помощью коляски Прометей-на-SD. metri c появляется на стековом драйвере как custom.googleapis.com/dummy/foo
сейчас, обычно, когда я делаю HPA для настраиваемого metri c, я использую его следующим образом:
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
работает так же. Я понимаю, что при использовании Pod Metrics HPA будет извлекать метрики из всех модулей и вычислять среднее значение, которое будет сравниваться с целевым значением для определения количества реплик. в основном это то же самое, как если бы вы использовали targetAverageValue в метрике External c. так, в моем случае оба будут делать то же самое, верно? может быть, что-то другое в аспектах производительности, задержки, чего-нибудь еще?
спасибо Чен