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消费,经历了一条清晰的管道。理解这条管道有助于排查指标缺失、延迟或伸缩不生效的问题。
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.yamlAKS: 默认已集成 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的轮询机制。下图展示了各组件之间的调用关系与数据流向。
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+;升级前查阅兼容性矩阵。