Kubernetes HPA - 延长冷却时间

2024-01-19

我正在运行一个带有 HPA 的 Kubernetes 集群 v1.16(目前 GKE 上的最新版本),它根据自定义指标(特别是从谷歌云监控获取的rabbitmq消息计数)扩展部署。

问题

当消息计数暂时较高时,部署会非常快地扩展到最大 Pod 计数。

信息

HPA --horizo​​ntal-pod-autoscaler-sync-period 在 GKE 上设置为 15 秒,据我所知无法更改。

我的自定义指标每 30 秒更新一次。

我认为导致这种行为的原因是,当队列中每 15 秒就有大量消息计数时,HPA 会触发扩展,并在几个周期后达到最大 pod 容量。

在 kubernetes api v1.18 中,您可以控制扩展稳定时间,但我在 v1.16 中找不到类似的功能。

我的问题

如何让 HPA 逐步扩大规模?

Edit 1

我的一项部署的 HPA 示例:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: my-deployment-hpa
  namespace: production
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-deployment
  minReplicas: 6
  maxReplicas: 100
  metrics:
  - type: External
    external:
      metricName: "custom.googleapis.com|rabbit_mq|v1-compare|messages_count"
      metricSelector:
        matchLabels:
          metric.labels.name: production
      targetValue: 500
  

首先,需要了解的一个好信息是,Kubernetes 中有一个针对自动缩放器的内置冷却时间。引用《Kubernetes 实践》:

目前,只有在过去三分钟内没有发生重新扩展事件时才会进行扩展。缩减事件的执行频率甚至更低——每五分钟一次。请记住这一点,这样您就不会想知道为什么自动缩放器拒绝执行重新缩放操作,即使指标明确表明它应该执行。

此声明可能已过时,但除非它发生更改,否则这是硬编码的,并且每个扩展/缩减事件的扩展不应超过现有 pod 的 100%。

也就是说,无论哪种方式,您都不是没有选择,您可以采取以下一些方法:

  1. 通过时间平均函数传递用于扩展的自定义指标- 上次我这样做是使用 prometheus 和 promql 可能与您使用的不同,但如果您在问题中分享更多配置,我相信我可以帮助找到语法。
  2. 您可以尝试使用Keda https://keda.sh/docs/2.0/scalers/rabbitmq-queue/- 它有一个cooldownPeriod您可以将其放置在ScaledObject它附带的自定义资源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes HPA - 延长冷却时间 的相关文章

随机推荐