GKE Autopilot上KEDA metrics-api触发15分钟后意外缩容问题
问题排查与解决方案
针对你在GKE Autopilot上使用KEDA v2.17遇到的缩容问题,以下是核心原因分析和解决方法:
核心可能原因
1. KEDA外部指标过期机制
KEDA默认将外部指标的保留时间设为900秒(15分钟),如果指标数据超过这个时长未更新(即使你的API持续返回有效值,也可能因采集链路偶发异常导致KEDA未接收到新数据),HPA会判定指标无效,进而触发缩容至1个副本。
2. HPA指标缺失的默认行为
KEDA生成的HPA在无法获取有效指标时,默认会将副本数调整为1。你可以通过查看HPA状态确认是否存在指标获取异常。
3. 指标采集链路异常
虽然API本身健康,但可能存在KEDA metrics-apiserver无法正确解析返回值、网络链路偶发中断等情况,导致指标未被正常采集。
解决方法
1. 调整KEDA指标保留时间
在ScaledObject中添加advanced配置,延长指标保留时间或禁用过期机制:
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: pod-scaler namespace: default spec: scaleTargetRef: name: minimal-spot-server pollingInterval: 10 cooldownPeriod: 60 minReplicaCount: 0 maxReplicaCount: 8 advanced: metricRetention: 3600 # 设置为1小时,或0表示永不过期 triggers: - type: metrics-api metadata: targetValue: "1.0" url: http://backend.default.svc.cluster.local:80/metrics_test valueLocation: "replicaCount"
2. 自定义HPA缩容行为
通过hpaBehavior配置限制缩容速率,避免突然缩至1个副本:
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: pod-scaler namespace: default spec: scaleTargetRef: name: minimal-spot-server pollingInterval: 10 cooldownPeriod: 60 minReplicaCount: 0 maxReplicaCount: 8 hpaBehavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 10 periodSeconds: 60 selectPolicy: Max triggers: - type: metrics-api metadata: targetValue: "1.0" url: http://backend.default.svc.cluster.local:80/metrics_test valueLocation: "replicaCount"
3. 验证指标采集链路
- 查看KEDA metrics-apiserver日志,确认指标解析情况:
kubectl logs -n keda deployment/keda-operator-metrics-apiserver | grep metrics_test
- 在集群内测试API可用性,确认返回值格式正确:
kubectl run -it --rm --image=curlimages/curl curl-test -- curl http://backend.default.svc.cluster.local:80/metrics_test
内容的提问来源于stack exchange,提问作者Romain Giraudeau
相关产品推荐
相关产品推荐

