使用 Prometheus 适配器的 Horizontal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)
Posted
技术标签:
【中文标题】使用 Prometheus 适配器的 Horizontal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)【英文标题】:Horizontal Pod Autoscaler (HPA) custom metrics with Prometheus Adapter (How are units defined?) 【发布时间】:2021-12-19 11:26:54 【问题描述】:我正在使用来自应用程序的自定义指标测试 HPA,并使用 Prometheus-adapter 向 K8s 公开。
我的应用公开了一个“jobs_executing”自定义指标,它是 golang 中的一个数值指标 (prometheus-client),公开了应用 (pod) 执行的作业数量。
现在为了在 hpa 中解决这个问题,我的 HPA 配置如下所示:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Pods
pods:
metric:
name: jobs_executing
target:
type: AverageValue
averageValue: 5
我希望自动缩放器在平均没有时缩放我的 pod。整个 pod 执行的作业数等于“5”。这可行,但有时 HPA 配置会显示如下值:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
my-autoscaler Deployment/my-scaling-sample-app 7700m/5 1 10 10 38m
这里的目标显示为“7700m/5”,即使平均没有。执行的工作总数为 7.7。这使得 HPA 只是积极地水平扩展。我不明白为什么将“7700m”放入当前目标值”?
我的问题是,如果有一种方法可以在 HPA 中定义一个浮点,不会将普通整数与 7700m(CPU 单元?)混淆?
或者我错过了什么?谢谢
【问题讨论】:
【参考方案1】:来自文档:
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#appendix-quantities
HorizontalPodAutoscaler 和指标 API 中的所有指标均使用 Kubernetes 中称为数量的特殊整数表示法指定。例如,数量 10500m 将以十进制表示法写为 10.5。指标 API 将尽可能返回不带后缀的整数,否则通常会返回以毫为单位的数量。这意味着您可能会看到您的度量值在 1 到 1500m 之间波动,或者以十进制表示时在 1 到 1.5 之间波动。
因此,您似乎无法调整 HPA 使用的计量单位,即通用数量。
【讨论】:
以上是关于使用 Prometheus 适配器的 Horizontal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)的主要内容,如果未能解决你的问题,请参考以下文章
避免 Prometheus 调用所有 k8s 服务实例(只有一个,应用范围的指标收集)
参赛作品42openGauss/MogDB数据库完美适配Grafana及Prometheus