4. HPA依赖组件:Metrics Server的安装与配置、资源指标管道

HPA(Horizontal Pod Autoscaler)要做出伸缩决策,必须依赖实时的资源使用数据。在Kubernetes生态中,Metrics Server是默认的资源指标聚合器,它从kubelet的cAdvisor接口采集Pod和Node的CPU、内存使用量,并通过Metrics API对外暴露。本章将深入Metrics Server的安装、配置以及资源指标管道的完整链路。

4.1 资源指标管道架构

Kubernetes的资源指标从Pod产生到HPA消费,经历了一条清晰的管道。理解这条管道有助于排查指标缺失、延迟或伸缩不生效的问题。

Kubernetes 资源指标管道架构 Pod / 容器 cAdvisor 采集原始指标 kubelet Summary API 端点 Metrics Server 聚合 / 缓存 kube-apiserver Metrics API 注册 HPA Controller 查询 / 决策 本地通信 /api/v1/nodes/{node}/proxy/metrics 注册资源指标 /apis/metrics.k8s.io 说明 Metrics Server 不存储历史数据,仅保留最近1-2分钟的聚合快照。 HPA 默认每15秒轮询一次 Metrics API,结合伸缩策略做出决策。

4.2 Metrics Server 安装方式对比

Metrics Server 的安装方式取决于集群环境。以下表格对比了三种主流安装路径,帮助你根据集群类型选择最合适的方式。

安装方式 适用环境 命令 / 步骤 注意事项
YAML 直接部署 自建集群、任意Kubernetes kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 需调整kubelet证书参数(如 --kubelet-insecure-tls)
Helm Chart 已有Helm环境 helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm upgrade --install metrics-server metrics-server/metrics-server
可通过values.yaml精细控制资源、副本数
云厂商托管 EKS / AKS / GKE EKS: kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
AKS: 默认已集成
GKE: gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEM
云厂商可能使用自研指标管道,需确认兼容性
最佳实践:生产环境推荐使用Helm部署,便于版本管理和参数定制。自建集群务必检查kubelet证书配置,避免Metrics Server无法抓取指标。

4.3 Metrics Server 核心配置参数

Metrics Server 的启动参数直接影响采集性能和兼容性。以下列出最关键的配置项及其作用。

  • --kubelet-preferred-address-types:指定kubelet通信地址类型,默认 InternalIP,ExternalIP,Hostname。在云环境或混合网络下,可能需要调整为 InternalDNS,InternalIP,Hostname。
  • --kubelet-insecure-tls:跳过kubelet证书验证。自建集群或测试环境常用,生产环境应配置受信任CA。
  • --metric-resolution:指标采集间隔,默认 60s。HPA需要更灵敏的响应时可调小至 30s 或 15s,但会增加集群负载。
  • --kubelet-port:kubelet监听端口,默认 10250。如果kubelet使用自定义端口,需同步修改。
  • --requestheader-client-ca-file:聚合层CA证书路径,用于启用客户端证书认证。在开启API聚合层安全加固时必配。
注意:在 kubeadm 部署的集群中,kubelet默认使用自签名证书。如果未配置 --kubelet-insecure-tls,Metrics Server 将报 x509: certificate signed by unknown authority 错误,导致指标采集失败。

4.4 验证 Metrics Server 安装

安装完成后,通过以下命令验证Metrics Server是否正常工作。

# 检查Pod运行状态
kubectl get pods -n kube-system | grep metrics-server

# 查看Metrics Server日志(排查错误)
kubectl logs -n kube-system deployment/metrics-server

# 测试Metrics API是否可用
kubectl get --raw /apis/metrics.k8s.io/v1beta1

# 查看节点资源使用
kubectl top nodes

# 查看Pod资源使用
kubectl top pods -A

如果 kubectl top nodes 返回正常数据,说明资源指标管道已打通。常见错误及解决方法如下表。

错误现象 可能原因 解决方案
Error from server (NotFound): the server could not find the requested resource Metrics API未注册或Metrics Server未启动 检查Pod状态,确认 kubectl get apiservice 中 v1beta1.metrics.k8s.io 状态为 True
failed to get node: node "node-1" not found kubelet地址类型不匹配 调整 --kubelet-preferred-address-types 参数
x509: certificate is valid for ... not for ... kubelet证书CN与节点名不匹配 添加 --kubelet-insecure-tls 或配置正确CA
unable to fully collect metrics: ... 部分节点网络不通或kubelet未响应 检查节点网络、kubelet状态及防火墙规则

4.5 资源指标管道的关键组件关系

除了Metrics Server,资源指标管道还涉及API Server的聚合层和HPA Controller的轮询机制。下图展示了各组件之间的调用关系与数据流向。

资源指标管道组件关系与调用时序 HPA Controller kube-apiserver Metrics Server kubelet ① HPA 每15s轮询 /apis/metrics.k8s.io/v1beta1 ② API Server 将请求代理到 Metrics Server 的 /metrics 端点 ③ Metrics Server 从各节点 kubelet 的 /metrics/resource 端点拉取数据 ④ kubelet 通过 cAdvisor 获取本地 Pod 的 CPU / 内存使用量

4.6 生产环境配置建议

生产级Metrics Server配置清单:
  • 资源限制:设置CPU request 100m、limit 200m;内存 request 200Mi、limit 500Mi,避免指标采集影响集群稳定性。
  • 高可用:部署2个副本,设置 podAntiAffinity 分散到不同节点。
  • 证书配置:使用集群CA签署kubelet证书,避免使用 --kubelet-insecure-tls。
  • 监控告警:对Metrics Server的Pod状态、指标采集延迟(超过30s)设置Prometheus告警规则。
  • 版本兼容:Metrics Server 0.6.x 支持Kubernetes 1.21+;0.7.x 支持1.25+;升级前查阅兼容性矩阵。