Kubernetes HPA-放大冷却时间



我正在运行一个带有HPA的Kubernetes集群v1.16(目前是GKE上的最新版本(,该集群基于自定义指标(特别是从谷歌云监控中获取的rabbitmqmessages计数(来扩展部署。

问题

当消息数量暂时较高时,部署会迅速扩展到最大pod数量。

信息

HPA——水平吊舱自动缩放器同步周期在GKE上设置为15秒,据我所知无法更改。

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

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

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

我的问题

如何使HPA逐步扩大?

编辑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-它有一个cooldownPeriod对象,您可以将其放置在附带的ScaledObject自定义资源中

我们构建了一个可高度配置的开源自定义HPA
特别针对您的情况,您可以将HPA设置为在缩减事件之间冷却

为了使用自定义HPA,您需要做的就是:

; add nanit helm repo
$ helm repo add nanit https://nanit.github.io/helm-charts
; install the chart in the cluster
helm install nanit/custom-hpa  
  --version 1.0.7 
  --set target.deployment=<deployment> 
  --set target.namespace=<namespace> 
  --set target.value=100 
  --set minReplicas=10 
  --set maxReplicas=50 
  --set behavior.scaleDownCooldown=120 
  --set prometheus.url=<prometheus-url> 
  --set prometheus.port=<prometheus-port> 
  --set prometheus.query=<prometheus-target-metric>

您要查找的设置是behavior.scaleDownCooldown,它规定HPA在再次按比例缩小之前应等待的时间(以秒为单位(。

目前,自定义HPA仅支持prometheus作为度量提供程序,但您可以使用RabbitMQ导出器并将queue_messages_ready设置为目标度量。

相关内容

  • 没有找到相关文章

最新更新