使用普通HPA,可以手动将底层部署扩展到零。这是维护任务所必需的。当缩放回大于零的值时,缩放将继续进行。这是执行的命令:kubectl scale deployment my-deployment --replicas=0
然而,对于KEDA来说,这是不可能的。文件中唯一的位置是:
KEDA不会强制执行该值,这意味着您可以手动将部署扩展到0,KEDA不会将其重新扩展。然而,当KEDA本身扩展部署时,它将尊重那里设置的值。
我无法确认此行为,上一个缩放命令也不起作用。手动将minReplicas
和maxReplicas
更改为零会在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发布说明。