使用 Prometheus 适配器的 Horizo​​ntal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)

Posted

技术标签:

【中文标题】使用 Prometheus 适配器的 Horizo​​ntal 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

Horizo​​ntalPodAutoscaler 和指标 API 中的所有指标均使用 Kubernetes 中称为数量的特殊整数表示法指定。例如,数量 10500m 将以十进制表示法写为 10.5。指标 API 将尽可能返回不带后缀的整数,否则通常会返回以毫为单位的数量。这意味着您可能会看到您的度量值在 1 到 1500m 之间波动,或者以十进制表示时在 1 到 1.5 之间波动。

因此,您似乎无法调整 HPA 使用的计量单位,即通用数量。

【讨论】:

以上是关于使用 Prometheus 适配器的 Horizo​​ntal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)的主要内容,如果未能解决你的问题,请参考以下文章

避免 Prometheus 调用所有 k8s 服务实例(只有一个,应用范围的指标收集)

在 Kubernetes 中使用多个自定义指标适配器

参赛作品42openGauss/MogDB数据库完美适配Grafana及Prometheus

如何编辑 Helm Chart 的配置?

Istio通过Prometheus收集遥测数据--《云原生服务网格Istio》书摘06

向 Microsoft 团队发出警报管理器/prometheus 警报