如何在Keda中将Argo Rollout作为ScaledObject实现弹性扩缩容?
解决方案
先修正配置中的明显错误
你的ScaledObject存在两个关键问题,先解决这些基础问题再测试:
- API版本错误:Argo Rollout的API版本是
argoproj.io/v1alpha1,而非apps/v1(你当前配置中scaleTargetRef.apiVersion写错了),这会导致Keda无法定位到目标Rollout资源。 - ScaledObject处于暂停状态:配置中的
autoscaling.keda.sh/paused: "true"会让Keda完全忽略这个ScaledObject,需要移除该注释或设为"false"。
方案一:尝试让Keda生成指向Rollout的HPA(兼容方案)
虽然Keda官方未声明支持Argo Rollout,但由于Rollout的API结构与Deployment高度兼容,且HPA原生支持Rollout,可尝试修正配置后复用Keda的Cron触发器:
修正后的ScaledObject配置:
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: test-application-so annotations: scaledobject.keda.sh/transfer-hpa-ownership: "true" spec: scaleTargetRef: apiVersion: argoproj.io/v1alpha1 kind: Rollout name: test-application-rollout pollingInterval: 5 cooldownPeriod: 10 minReplicaCount: 0 maxReplicaCount: 10 fallback: failureThreshold: 3 replicas: 5 advanced: restoreToOriginalReplicaCount: false horizontalPodAutoscalerConfig: behavior: scaleDown: policies: - type: Percent value: 100 periodSeconds: 15 triggers: - type: cron metadata: timezone: Asia/Seoul schedule: "15-30 17 * * *"
应用配置后执行以下检查:
- 查看Keda是否生成了关联Rollout的HPA:
kubectl get hpa - 检查Keda Operator日志确认无错误:
kubectl logs -n keda deployment/keda-operator - 临时调整Cron的
schedule到最近时间点,验证是否触发副本数变化
方案二:通过CronJob间接控制Rollout/HPA(稳定方案)
如果方案一不生效,可直接用Kubernetes CronJob在非高峰时段修改Rollout副本数和HPA参数,绕开Keda对Rollout的支持限制:
- 创建缩容CronJob(午夜执行):
apiVersion: batch/v1 kind: CronJob metadata: name: rollout-scale-down spec: schedule: "0 0 * * *" jobTemplate: spec: template: spec: containers: - name: kubectl image: bitnami/kubectl:latest command: - /bin/sh - -c - | kubectl patch hpa test-application-hpa -p '{"spec":{"minReplicas":0}}' kubectl patch rollout test-application-rollout -p '{"spec":{"replicas":0}}' restartPolicy: OnFailure
- 创建扩容CronJob(高峰前恢复,比如早上6点):
apiVersion: batch/v1 kind: CronJob metadata: name: rollout-scale-up spec: schedule: "0 6 * * *" jobTemplate: spec: template: spec: containers: - name: kubectl image: bitnami/kubectl:latest command: - /bin/sh - -c - | kubectl patch hpa test-application-hpa -p '{"spec":{"minReplicas":2}}' restartPolicy: OnFailure
注意:需为CronJob绑定的ServiceAccount配置patch HPA和Rollout的权限,避免权限不足导致执行失败。
方案三:结合Argo Workflows实现定时缩放
如果你的环境已部署Argo Workflows,可创建定时Workflow来执行Rollout的副本数调整逻辑,这种方式更贴合Argo生态,适合复杂场景。
内容的提问来源于stack exchange,提问作者YeongJo
相关产品推荐
相关产品推荐

