与Keda强制缩放为零



使用普通HPA,可以手动将底层部署扩展到零。这是维护任务所必需的。当缩放回大于零的值时,缩放将继续进行。这是执行的命令:kubectl scale deployment my-deployment --replicas=0

然而,对于KEDA来说,这是不可能的。文件中唯一的位置是:

KEDA不会强制执行该值,这意味着您可以手动将部署扩展到0,KEDA不会将其重新扩展。然而,当KEDA本身扩展部署时,它将尊重那里设置的值。

我无法确认此行为,上一个缩放命令也不起作用。手动将minReplicasmaxReplicas更改为零会在keda日志中引发大量错误,将部署指向假值时也会发生同样的情况。

我需要一种临时缩放到零的方法(删除ScaledObject当然可以,但我需要将它们存储在某个地方,这也是容易出错和违反直觉的(。这应该与minReplicaCount的值无关。

使用Kubernetes 1.15,keda 1.5.0。示例缩放对象:

apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata: ... # left out
spec:
cooldownPeriod: 600
maxReplicaCount: 8
minReplicaCount: 0
pollingInterval: 30
scaleTargetRef:
containerName: main
deploymentName: my-deployment
scaleType: deployment
triggers:
- type: kafka
... # left out
status:
externalMetricNames:
- lagThreshold
lastActiveTime: "2020-07-21T11:32:31Z"

很晚了,但希望能帮助像我这样几年后来到这里的人。。。

KEDA最新版本的文档不包含您提到的片段。然而,由于2022年5月发布的KEDA 2.7,您可以暂停在ScaledObject上应用autoscaling.keda.sh/paused-replicas注释的自动缩放。此注释允许您保持副本数不变(它可以是任何非负整数,不一定是0(。因此,在有问题的情况下,您应该在描述ScaledObject的YAML中添加autoscaling.keda.sh/paused-replicas: "0"行,这样它就会看起来像这样:

apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
annotations:
autoscaling.keda.sh/paused-replicas: "0"
... # other annotations and metadata
spec:
cooldownPeriod: 600
maxReplicaCount: 8
minReplicaCount: 0
pollingInterval: 30
scaleTargetRef:
containerName: main
deploymentName: my-deployment
scaleType: deployment
triggers:
- type: kafka
... # left out
status:
externalMetricNames:
- lagThreshold
lastActiveTime: "2020-07-21T11:32:31Z"

我用KEDA 2.10.1和K8s 1.26.4测试了它,效果很好。

以下是相关文档和KEDA发布说明。

相关内容

  • 没有找到相关文章

最新更新