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

为何Keda的HPA在AWS EKS中无法采集CPU/内存指标?

解决Keda+HPA基于CPU/内存扩缩容失败的问题

我们团队部署Keda后,原本想同时基于Redis队列长度、CPU和内存利用率实现Kubernetes Pod的水平自动扩缩容,但遇到了一系列问题:

  • ArgoCD里的水平Pod自动扩缩器(HPA)报错:
    unable to get metrics for resource memory: unable to fetch metrics from resource metrics API: the server could not find the requested resource (get pods.metrics.k8s.io)
    
  • 执行kubectl get --raw "/apis/metrics.k8s.io/v1beta1"返回Error from server (NotFound): the server could not find the requested resource
  • 运行kubectl top nodes提示error: Metrics API not available
  • 当CPU/内存利用率达到预设阈值时,Pod完全没触发扩缩容,但Redis队列长度触发的扩缩容却正常工作。

问题根源

Keda实现Redis队列扩缩容用的是外部指标(External Metrics),不依赖Kubernetes内置的资源指标API;但CPU、内存属于资源指标(Resource Metrics),必须依赖metrics-server提供的metrics.k8s.io API服务。当前集群缺少这个组件,导致HPA拿不到CPU/内存数据,自然无法触发扩缩。

解决步骤

1. 检查集群是否已安装metrics-server

先确认集群里有没有metrics-server:

kubectl get deployment metrics-server -n kube-system

如果返回NotFound,说明没安装,继续下一步部署。

2. 部署metrics-server

根据你的集群环境选一种方式部署:

  • 通用K8s集群:用官方Manifest部署
    kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    
  • AWS EKS集群:用eksctl快速部署
    eksctl utils install-metrics-server --cluster <你的集群名称> --region <集群所在区域>
    

3. 验证metrics-server运行状态

  • 检查Pod是否正常启动:
    kubectl get pods -n kube-system -l k8s-app=metrics-server
    
    确保所有Pod都处于Running状态。
  • 验证指标API是否可用:
    kubectl get --raw "/apis/metrics.k8s.io/v1beta1"
    
    能返回包含NodeMetrics和PodMetrics的JSON数据就算正常。
  • 测试kubectl top命令:
    kubectl top nodes
    kubectl top pods
    
    能正常显示节点和Pod的CPU、内存使用率,说明metrics-server工作正常。

4. 验证HPA功能

最后检查HPA的状态:

kubectl get hpa

观察TARGETS列,原本的<unknown>应该会变成实际的CPU/内存使用率数值。之后当CPU/内存达到阈值时,HPA就会自动触发Pod的扩缩容了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:54:34