为啥 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 实现为 控制循环,由控制器管理器的 --horizontal-pod-autoscaler-sync-period 标志控制。这些指标可能取决于对 HPA 算法 有影响的某些字段,例如targetAverageValue
或 targetAverageUtilization
。这是一般信息kubernetes.io/docs/tasks/run-application/… 请上传您的 HPA 清单。
当然:apiVersion:autoscaling/v2beta1 种类:HorizontalPodAutoscaler 元数据:名称: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 AWS Cloudwatch 适配器未获取 EKS HPA 自动缩放的自定义指标值