为啥 Kubernetes HPA 转换自定义指标?

Posted

技术标签:

【中文标题】为啥 Kubernetes HPA 转换自定义指标?【英文标题】:Why Kubernetes HPA convert custom metric?为什么 Kubernetes HPA 转换自定义指标? 【发布时间】:2019-08-16 16:52:37 【问题描述】:

Kubernetes Horisontal Pod Autoscaling (HPA) 修改了我的自定义指标:StackDriver 显示正确的指标,但 HPA 显示另一个数字。 例如,StackDrives 值为 118K,但 HPA 显示 1656144。 我知道 HPA 对浮点数使用了一些对话,但我的指标是整数:单位:数字种类:量规值类型:Int64。

在 GKE 1.11.7 中运行。

有什么想法吗?

【问题讨论】:

嗨@Vitaly,你能分享你的HPA清单吗?默认 HPA 实现为 控制循环,由控制器管理器的 --horizo​​ntal-pod-autoscaler-sync-period 标志控制。这些指标可能取决于对 HPA 算法 有影响的某些字段,例如 targetAverageValuetargetAverageUtilization。这是一般信息kubernetes.io/docs/tasks/run-application/… 请上传您的 HPA 清单。 当然:apiVersion:autoscaling/v2beta1 种类:Horizo​​ntalPodAutoscaler 元数据:名称:myhpa 命名空间:默认规范:scaleTargetRef:apiVersion:apps/v1beta1 种类:部署名称:mydeploy minReplicas:1 maxReplicas:10 指标:-类型:外部外部:metricName:custom.googleapis.com|rabbit_q_size targetValue:10000 【参考方案1】:

如果您指定targetValue,它将是一个整数,因此不会缩小 pod。 如果您使用targetAverageValue,它将根据创建的 pod 数量进行计算。

【讨论】:

【参考方案2】:

在您的 HPA 清单中,您没有指定 --horizontal-pod-autoscaler-sync-period 标志的值。默认情况下,它设置为 15 秒。

在您的情况下,这意味着 HPA 值在过去 15 秒内占整个部署队列的数量。更多信息可以在HPA Documentation 中找到。

正如您在 StackDriver 中提到的,您使用 GAUGE 指标来衡量特定时间点的值 - Stackdriver

简而言之,StackDriver 显示准确时间的当前值,HPA 值是最近 15 秒的量。

【讨论】:

>HPA 值是最后 15 秒的量我不确定我是否理解你。 您的 HPA 从整个部署中收集信息。由于 TargetValue 为 10000,当 RabbitMQ 队列达到此值时,HPA 将创建另一个 pod。 HPA 的值将是过去 15 秒内收到的所有 pod 的所有消息的总和。这就是为什么 StackDriver 在您检查值的那一刻有 118k 条消息,而 HPA 有 160 万条消息,因为它是过去 15 秒内所有部署消息的总和。 我不这么认为。在我的例子中,我使用了来自独立 RabbitMQ 服务器的自定义指标。

以上是关于为啥 Kubernetes HPA 转换自定义指标?的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes HPA 为自定义指标获取错误的当前值

Kubernetes AWS Cloudwatch 适配器未获取 EKS HPA 自动缩放的自定义指标值

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

HPA 缩减 kubernetes pod

具有 2 个或更多指标的 kubernetes HPA 的行为如何——尤其是副本数计算?

如何使用 Istio 的 Prometheus 配置 kubernetes hpa?