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

Keda ScaledObject无法读取Prometheus指标问题排查求助

AKS中Keda结合Prometheus触发器实现HPA失败排查问题

在Azure Kubernetes Service(AKS)3节点集群中,使用Keda ScaledObject结合Prometheus触发器实现水平Pod扩缩容时遇到异常:Prometheus已成功抓取到.NET应用暴露的hs_ready_readiness指标,但Keda无法读取该指标。查看HorizontalPodAutoscaler时显示ScalingActive为False,报错为无法从外部指标API获取指标,出现流错误INTERNAL_ERROR。

环境与操作详情

  • AKS集群信息:
kubectl get nodes -o wide

NAME                                STATUS   ROLES   AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
aks-nodepool1-42472506-vmss00000l   Ready    agent   39m   v1.24.9   10.224.0.4    <none>        Ubuntu 18.04.6 LTS   5.4.0-1104-azure   containerd://1.6.18+azure-1
aks-nodepool1-42472506-vmss00000m   Ready    agent   39m   v1.24.9   10.224.0.6    <none>        Ubuntu 18.04.6 LTS   5.4.0-1104-azure   containerd://1.6.18+azure-1
aks-nodepool1-42472506-vmss00000n   Ready    agent   39m   v1.24.9   10.224.0.5    <none>        Ubuntu 18.04.6 LTS   5.4.0-1104-azure   containerd://1.6.18+azure-1
  • .NET应用部署:通过deployment.yaml和service.yaml完成部署,已配置镜像拉取密钥与ConfigMap挂载。

  • Prometheus部署与配置:通过kube-prometheus安装Prometheus Operator,创建了Prometheus实例与ServiceMonitor,确认Prometheus可正常抓取到hs_ready_readiness指标。

  • Keda安装:通过Helm完成Keda安装,所有组件运行状态正常。

  • ScaledObject配置:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: prometheus-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    name: servant-deploy
  triggers:
  - type: prometheus
    metadata:
      serverAddress: http://prometheus-operated.monitoring.svc.cluster.local:80
      metricName: hs_ready_readiness
      threshold: '1'
      query: hs_ready_readiness
  • 报错信息:
kubectl describe horizontalpodautoscaler.autoscaling/keda-hpa-prometheus-scaledobject

  Type           Status  Reason                   Message
  ----           ------  ------                   -------
  AbleToScale    True    SucceededGetScale        the HPA controller was able to get the target's current scale
  ScalingActive  False   FailedGetExternalMetric  the HPA was unable to compute the replica count: unable to get external metric default/s0-prometheus-hs_ready_readiness/&LabelSelector{MatchLabels:map[string]string{scaledobject.keda.sh/name: prometheus-scaledobject,},MatchExpressions:[]LabelSelectorRequirement{},}: unable to fetch metrics from external metrics API: Get "https://hcp-kubernetes.6416bc6ff2dbef0001660539.svc.cluster.local:443/apis/external.metrics.k8s.io/v1beta1/namespaces/default/s0-prometheus-hs_ready_readiness?labelSelector=scaledobject.keda.sh%!F(MISSING)name%!D(MISSING)prometheus-scaledobject": stream error: stream ID 29285; INTERNAL_ERROR; received from peer

排查方向与解决方案建议

1. 验证Keda与Prometheus的网络连通性

在Keda Operator Pod内部执行curl命令,测试能否正常访问Prometheus并获取指标:

kubectl exec -it <keda-operator-pod-name> -n keda -- curl http://prometheus-operated.monitoring.svc.cluster.local:80/api/v1/query?query=hs_ready_readiness

若无法返回指标数据,检查集群网络策略、Prometheus Service的标签选择器是否配置正确。

2. 修正ScaledObject的Prometheus查询语句

当前查询未做聚合,Keda需要单个数值作为扩缩容依据,建议修改为聚合后的查询,例如:

query: sum(hs_ready_readiness{pod=~"servant-deploy-.*"})

可根据实际标签筛选后使用sum/avg等聚合函数,确保返回单个数值而非多实例指标集合。

3. 查看Keda Operator日志获取详细错误

执行命令查看Keda Operator的日志,定位具体错误原因:

kubectl logs -n keda deployment/keda-operator

若Prometheus启用了认证,需在ScaledObject的Prometheus触发器配置中添加authToken或tlsConfig相关参数。

4. 检查AKS HCP相关配置

报错中出现hcp-kubernetes域名,确认集群是否启用Azure HCP服务,检查API网关/代理是否允许Keda的外部指标API请求通过,排查是否存在TLS证书失效或不匹配导致的流错误。

5. 验证版本兼容性

  • 确认Keda版本与AKS集群版本(v1.24.9)是否兼容,Keda 2.x对Kubernetes 1.24+的支持情况,必要时调整Keda版本。
  • 检查Prometheus Operator版本与Keda Prometheus触发器的兼容性。

内容的提问来源于stack exchange,提问作者Arvinder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:53:14