KEDA是否支持现有K8s HPA的两种Prometheus指标及缩容至0功能?
问题解答
KEDA完全支持你提到的两种指标类型,并且能同时满足取两个指标建议副本数最大值和缩容至0的需求,具体细节如下:
1. 两种指标的支持能力
Pod业务自定义指标(来自Prometheus)
KEDA的Prometheus触发器可以直接对接你的Prometheus实例,读取Pod上报的业务指标。配置时只需编写对应的PromQL查询语句,指定targetAverageValue为你要的目标平均值X,逻辑和原生HPA的Pod指标模式一致。
SQS队列长度指标
有两种实现方式可选:
- 直接用KEDA的SQS触发器:无需通过Prometheus,直接调用AWS SQS API获取队列长度,配置更简单,直接设置
queueLength为目标值Y即可; - 通过Prometheus读取:如果你的监控链路已经统一用Prometheus采集SQS指标,也可以用Prometheus触发器,编写PromQL查询出队列长度,设置
targetValue为Y(因为队列长度是全局指标,不是Per-Pod维度)。
2. 取最大值的逻辑实现
KEDA默认支持在同一个ScaledObject中配置多个触发器,其核心逻辑就是取所有触发器计算出的建议副本数的最大值,完全匹配你的需求,不需要额外配置,只要把两个触发器都定义在ScaledObject里就行。
3. 缩容至0的配置
要实现缩容到0,只需在ScaledObject中做两个关键配置:
- 设置
minReplicaCount: 0; - 为每个触发器配置
pollingInterval(指标轮询间隔)和cooldownPeriod(缩容冷却时间),当所有触发器的指标都低于阈值时,KEDA会自动将副本数缩至0。
简化配置示例
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: your-app-scaler spec: scaleTargetRef: name: your-deployment-name minReplicaCount: 0 # 开启缩容至0功能 maxReplicaCount: 10 # 根据业务需求调整最大值 triggers: # 触发器1:Pod业务指标(Prometheus) - type: prometheus metadata: serverAddress: http://prometheus.monitoring.svc:9090 query: sum(your_business_metric{pod=~"your-app-.*"}) by (pod) targetAverageValue: "X" # 替换为你的目标平均值,带单位(如"50") # 触发器2:通过Prometheus读取SQS队列长度 - type: prometheus metadata: serverAddress: http://prometheus.monitoring.svc:9090 query: aws_sqs_queue_length{queue="your-sqs-queue-name"} targetValue: "Y" # 替换为你的目标队列长度 # 可选:直接用SQS触发器(无需Prometheus) # - type: aws-sqs-queue # metadata: # queueURL: "https://sqs.your-region.amazonaws.com/1234567890/your-queue" # queueLength: "Y"
注意事项
- 确保KEDA的ServiceAccount有访问Prometheus服务的权限;
- 如果使用SQS触发器,需要给KEDA的ServiceAccount配置AWS IAM权限(允许读取队列长度);
- 缩容至0前确认你的应用无持久化状态,且支持优雅终止,避免数据丢失或服务中断。
内容的提问来源于stack exchange,提问作者ChonkyCat
相关产品推荐
相关产品推荐

