具有自定义指标的 HPA
Posted
技术标签:
【中文标题】具有自定义指标的 HPA【英文标题】:HPA with Custom Metrics 【发布时间】:2020-08-15 00:05:20 【问题描述】:我遇到了两种不同的方法来衡量特定指标,我想知道有什么区别,我的情况是否存在。
我在 GKE 上进行了部署,其中包括从应用程序抓取特定指标并将其导出到堆栈驱动程序。使用 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
它的工作原理相同。 我知道在使用 Pod Metrics 时,HPA 将从所有 pod 中获取指标,并计算一个平均值,该平均值将与目标值进行比较以确定副本数。 它与在外部指标上使用 targetAverageValue 基本相同。 所以,就我而言,两者的作用基本相同,对吧? 在性能、延迟等方面有什么不同吗?
谢谢 陈
【问题讨论】:
【参考方案1】:是的,你说的很对。您在问题中显示的指标将起作用。
再深入一点并阅读有关指标类型的文档: Kubernetes.io: Docs: Reference: Kubernetes API: v1.18: metricspec-v2beta1-autoscaling
ExternalMetricSource - external 指的是与任何 Kubernetes 对象无关的全局指标。它允许根据来自集群外部运行的组件的信息(例如云消息服务中的队列长度,或来自集群外部运行的负载均衡器的 QPS)进行自动缩放。
PodsMetricSource - pods 指的是描述当前规模目标中每个 pod 的指标(例如,每秒处理的事务数)。在与目标值比较之前,这些值将一起平均。
请注意,此参考适用于 api 版本 1.18。请使用适合您用例的版本。
文档显示它们被设计为不同的指标,但它们可以像您一样使用。
除了描述之外,区分它们的另一件事是该指标:
External
有字段:
metricName
metricSelector
targetAverageValue
targetValue
Pods
有字段:
metricName
metricSelector
targetAverageValue
正如您在上面看到的,Pods
指标没有 targetValue
字段。
每种类型的指标都有自己的一组属性,其中一些在使用时会给出相同的结果。
如果您对此有任何疑问,请告诉我。
【讨论】:
以上是关于具有自定义指标的 HPA的主要内容,如果未能解决你的问题,请参考以下文章
使用 Prometheus 适配器的 Horizontal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)