You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keda中将Argo Rollout作为ScaledObject实现弹性扩缩容?

解决方案

先修正配置中的明显错误

你的ScaledObject存在两个关键问题,先解决这些基础问题再测试:

  1. API版本错误:Argo Rollout的API版本是argoproj.io/v1alpha1,而非apps/v1(你当前配置中scaleTargetRef.apiVersion写错了),这会导致Keda无法定位到目标Rollout资源。
  2. 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的支持限制:

  1. 创建缩容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
  1. 创建扩容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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:32:03