KEDA ScaledObject中ScalingModifiers失效报错及需求实现咨询
问题解决与替代方案
一、公式验证错误的原因与修复
你遇到的invalid argument for float(one)错误,是因为在ScalingModifiers的公式中直接引用触发器名称one不符合KEDA的语法规范。KEDA要求通过triggers.<triggerName>.value的格式来引用触发器的指标数值,这样才能正确解析为浮点型数据进行比较。
修正后的ScalingModifiers配置
scalingModifiers: formula: "triggers.one.value < 75 ? 3 : 5" metricType: "Absolute"
- 用
triggers.one.value替代one,获取CPU触发器的利用率数值 - 将
metricType设为Absolute,因为我们需要直接设置副本数(而非基于利用率的比例) - 公式逻辑:当CPU利用率低于75%时返回3,否则返回5,刚好匹配你的需求
二、替代方案:双ScaledObject分场景配置
如果ScalingModifiers的方式仍有问题,可以通过创建两个ScaledObject分别处理不同场景:
1. CPU利用率≥75%时的cron扩缩容
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: cron-high-cpu-scaler spec: scaleTargetRef: name: your-deployment-name minReplicaCount: 5 maxReplicaCount: 5 triggers: - metadata: desiredReplicas: '5' end: 20 8 * * * start: 10 8 * * * type: cron advanced: activationConditions: - condition: "triggers.cpu.value >= 75" triggers: - name: cpu-check triggers: - metadata: value: '75' metricType: Utilization name: "cpu-check" type: cpu
2. CPU利用率<75%时的cron扩缩容
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: cron-low-cpu-scaler spec: scaleTargetRef: name: your-deployment-name minReplicaCount: 3 maxReplicaCount: 3 triggers: - metadata: desiredReplicas: '3' end: 20 8 * * * start: 10 8 * * * type: cron advanced: activationConditions: - condition: "triggers.cpu.value < 75" triggers: - name: cpu-check triggers: - metadata: value: '75' metricType: Utilization name: "cpu-check" type: cpu
- 两个ScaledObject通过
activationConditions分别绑定不同的CPU条件,仅当条件满足时生效 - 确保KEDA版本≥2.8(activationConditions特性的最低版本要求)
三、注意事项
- 确认你的KEDA版本支持所使用的特性:ScalingModifiers需≥2.10,activationConditions需≥2.8
- 测试时可以通过
kubectl describe scaledobject <name>查看触发器状态和扩缩容事件,排查配置问题
内容的提问来源于stack exchange,提问作者Parag Bhingre
相关产品推荐
相关产品推荐

