这个错误信息:
1 | Warning FailedGetResourceMetric horizontal-pod-autoscaler |
表明 Kubernetes 的 Horizontal Pod Autoscaler (HPA) 无法从 Metrics Server 获取 CPU(或其他资源)使用率指标。根本原因是:Metrics Server 没有正确部署或不可用。
🔍 错误原因分析
pods.metrics.k8s.io 是由 Metrics Server 提供的 Kubernetes 资源指标 API。HPA 在基于 CPU 或内存进行自动扩缩容时,依赖该 API 来获取当前 Pod 的资源使用情况。
如果出现上述错误,通常是因为:
- Metrics Server 未安装
- 很多裸金属或自建 K8s 集群默认不安装 Metrics Server。
- Metrics Server 安装失败或 CrashLoopBackOff
- Pod 无法正常运行(如镜像拉取失败、权限不足、网络问题等)。
- API 服务未注册或不可达
metrics.k8s.ioAPI 未在 API Server 中注册,或者 APIService 对象状态异常。
- Istio 不是直接原因,但可能干扰监控(较少见)
- Istio 本身不提供指标给 HPA,HPA 仍依赖 Metrics Server。不过某些 sidecar 注入配置可能影响资源上报(极少见)。
✅ 解决方案
步骤 1:确认 Metrics Server 是否已安装
1 | kubectl get apiservice v1beta1.metrics.k8s.io |
- 如果返回
NotFound,说明未安装。 - 如果存在,检查其状态是否为
Available=True:
1 | kubectl get apiservice v1beta1.metrics.k8s.io -o yaml |
查看 status.conditions 字段。
步骤 2:安装或修复 Metrics Server
官方安装方式(推荐):
1 | # 克隆官方仓库(可选) |
⚠️ 注意:某些云环境(如 AWS EKS、GKE)可能需要额外参数,例如跳过 TLS 验证(仅测试环境):
在
args中添加:
1
2 - --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
kubectl edit deploy metrics-server -n kube-system
在 spec.template.spec.containers[0].args 中加入该参数
检查 Metrics Server Pod 状态:
1 | kubectl get pods -n kube-system | grep metrics-server |
确保 Pod 处于 Running 状态,且无频繁重启。
步骤 3:验证指标是否可获取
安装成功后,等待 1-2 分钟,然后运行:
1 | kubectl top nodes |
如果能正常输出 CPU/内存使用情况,说明 Metrics Server 已工作。
再检查 HPA:
1 | kubectl describe hpa <your-hpa-name> |
应不再出现 FailedGetResourceMetric 警告。
🛠️ 补充建议(尤其在 Istio 环境中)
- Istio 不影响 HPA 对 Metrics Server 的调用,因为 HPA 是控制平面组件,直接与 API Server 通信,不经过 Pod 内的 sidecar。
- 但如果你在 虚拟机或边缘节点 上运行 workload,需确保 kubelet 的指标端口(通常是 10250 或 10255)可被 Metrics Server 访问。
- 若使用 Prometheus + Adapter 替代 Metrics Server(如 custom metrics),则需配置
custom.metrics.k8s.io,但本错误明确指向resource metrics(即 CPU/MEM),必须由 Metrics Server 提供。
✅ 总结
| 问题 | 原因 | 解决方法 |
|---|---|---|
| HPA 无法获取 CPU 指标 | 缺少或故障的 Metrics Server | 安装/修复 Metrics Server,确保 v1beta1.metrics.k8s.io API 可用 |
💡 小贴士:在 Minikube 中启用 Metrics Server:
1 minikube addons enable metrics-server
完成以上步骤后,HPA 应能正常工作,自动扩缩容基于实际 CPU 使用率进行。