Kubernetes 监控组件与Metrics Server、HPA配置

Kubernetes 监控组件与Metrics Server、HPA配置

_

一、Kubernetes监控方案

1. 监控概述

Kubernetes能够在节点、Pod、容器等多个层级提供应用资源占用的详细信息。依托这些监控数据,运维人员可以评估应用运行性能,定位系统瓶颈并进行优化,以此提升集群整体运行效率。

资源指标管道为集群组件提供基础监控数据,支撑水平Pod自动扩缩器(Horizontal Pod Autoscaler)、kubelet top命令等功能使用。这类指标由轻量化组件Metrics Server采集,数据仅短期保存在内存中,不进行持久化存储,指标通过metrics.k8s.io API对外暴露。

2. Heapster

Heapster是Kubernetes早期官方推出的集群资源指标聚合组件,充当集群监控数据的汇总中心,统一采集节点、Pod与容器的运行资源指标。Kubernetes内置了监控代理组件cAdvisor,能够采集容器运行产生的各类核心监控指标(Metrics),包含CPU使用率、内存占用、网络流量等关键数据。

Heapster从集群控制平面获取全部节点信息,再与各节点上的kubelet建立通信拉取监控数据。而kubelet的指标数据,正是源自节点本地运行的cAdvisor。采集完成后,Heapster将指标推送至预先配置的后端存储,同时支持对接可视化组件展示监控信息。

该组件目前已经正式退役(Retired),自Kubernetes1.11版本起被标记为废弃,社区不再持续维护,新项目不建议部署使用。

2.1 工作架构与采集流程

  • 数据源:集群每个节点上kubelet内置cAdvisor,持续采集容器CPU、内存、网络、磁盘资源占用指标。

  • 指标汇总:Heapster以Pod形式部署,自动发现集群所有节点,主动从各节点kubelet拉取监控指标,并按照Namespace、Pod、容器维度聚合数据。

  • 数据输出:支持可插拔的后端存储(Sink),常见搭配“Heapster+InfluxDB+Grafana”,指标持久存入时序数据库,通过Grafana实现可视化展现。

  • 对外能力:对外提供REST接口,早期为kubectl top命令、HPA(水平Pod自动扩缩容)控制器提供资源指标数据。

2.2 主要缺陷和淘汰问题

  • 架构设计问题:Heapster 采用集中式单点部署,集群规模增大后容易出现性能瓶颈,存在单点故障风险。

  • API 不标准:自定义指标接口,不属于Kubernetes标准API体系,扩展性差。

  • 功能定位耦合:同时承担指标聚合、数据推送、历史存储转发多重职责,组件臃肿。

  • 社区停止维护:社区拆分需求:基础资源指标由Metrics Server承接;长期监控、指标持久化交给Prometheus等专业时序系统。

3. Weave Scope

Weave Scope是Weaveworks推出的开源容器可视化监控工具,适配Docker和Kubernetes环境。核心优势是自动发现集群资源并生成交互式网络拓扑图,直观展示节点、Pod、容器、进程之间的网络连接与调用关系。该工具由Probe采集探针与Scope App聚合服务两部分组成。

Probe一般以DaemonSet形式部署在各个节点,负责采集CPU、内存、网络流量等运行指标与资源元数据,汇总至中心App后通过Web界面对外提供可视化视图。运维人员可以在页面中查看资源实时性能指标、筛选检索集群对象,还支持直接在浏览器打开容器终端进行调试,实现容器启停等基础管理操作。

Weave Scope侧重集群实时拓扑观测与临时故障排查,适合快速梳理微服务依赖关系,但不具备长期指标持久存储、告警能力,多用于实验环境与临时问题定位,生产环境一般搭配Prometheus等专业监控系统使用。

4. Prometheus

Heapster与Weave Scope的监控对象主要聚焦节点与业务Pod,难以实现集群控制平面自身运行状态的监控,无法获取APIServer、Scheduler、ControllerManager等核心管理组件的健康状态与负载情况。

Prometheus是由SoundCloud推出的开源监控解决方案,项目始于2012年,2015年正式在GitHub开源;2016年正式加入CNCF,是继Kubernetes之后第二个成为CNCF托管项目的成员。

二、Metrics与HPA

1. Metrics Server概述

Metrics Server是Kubernetes集群核心组件之一,属于轻量级指标聚合服务。它会从集群各个节点的kubelet获取cAdvisor采集到的容器资源运行数据,汇总、聚合节点、Pod、容器的基础资源指标,主要包含CPU与内存占用信息。Metrics通常以无状态Pod形式部署在Kubernetes集群内部,需要配置对应的ServiceAccount、RBAC权限,保证能够访问各个节点kubelet获取监控数据。

Heapster是Kubernetes早期官方指标聚合组件,目前已经正式废弃。它采用集中式架构,支持对接InfluxDB等时序数据库实现指标持久化存储。自Kubernetes 1.8起,Metrics Server成为Heapster的替代方案,架构更加轻量化,职责更加单一,仅对外提供标准API输出实时资源指标,不再具备数据持久化存储能力。

Metrics Server对外通过“metrics.k8s.io”API提供标准资源指标,是集群基础监控能力的关键支撑。Metrics Server仅在内存中临时保存实时指标,不会持久化存储历史监控数据,只提供短时基础指标,无法实现长期性能趋势分析。如果需要持久存储、指标监控、大盘可视化,则需要部署Prometheus等监控方案。

2. Metrics核心作用

2.1 支撑kubelet top命令

“kubectl top node”、“kubectl top pod”获取节点与Pod实时资源使用率,底层数据全部源自于Metrics Server。没有部署Metrics Server时,该命令无法使用。

2.2 支撑HPA(Horizontal Pod Autoscaler,水平Pod自动扩缩容)

原生HPA根据CPU、内存负载自动扩缩Pod副本,依赖metrics.k8s.io获取实时资源指标,Metrics Server是原生HPA正常运行的必要条件。

3. HPA自动扩容

HPA(Horizontal Pod Autoscaler,水平Pod自动扩缩器)是Kubernetes内置原生控制器。它持续采集Pod负载指标,依据预设阈值自动调整Deployment、StatefulSet资源的Pod副本数量,实现应用弹性伸缩。

  • 水平扩容(Horizontal):通过增加/减少Pod副本数量实现扩容,新增或销毁应用实例,HPA仅支持水平扩缩容。

  • 垂直扩容(VPA,Vertical Pod Autoscaler):调整单个Pod的CPU、内存资源配额,不会改变Pod副本数量。

HPA控制器会周期性从指标数据源中拉取Pod实时负载,将当前负载与配置的目标阈值进行对比,计算出合理的副本数量,并自动更新Deployment和StatefulSet的副本数,完成扩容或缩容操作。同时扩缩容动作设置了冷却时间,避免指标短暂波动造成副本频繁震荡。

HPA支持两类主流指标数据源:基础资源指标(CPU、内存)与自定义业务指标。

  • 基础资源指标:依赖Metrics Server提供数据,若集群未部署Metrics Server,基于CPU、内存的HPA策略无法生效。

  • 自定义指标:如接口QPS、并发连接数等业务层面指标,一般依靠Prometheus搭配Prometheus Adapter对外暴露指标供HPA调用。

4. 常见维护操作

维护命令

说明

kubectl describe pod xxx

查看指定Pod的详细信息,可以通过event字段查看事件

kubectl logs xxx

查看指定Pod的日志

kubectl top pod xxx

查看指定Pod的资源使用量

kubectl top nodes

查看节点资源使用量

kubectl cordon xxx

禁止调度新Pod到该节点,已运行在节点上的Pod不受影响,正常运行。

kubectl uncordon xxx

恢复调度新的Pod到该节点

kubectl drain xxx

驱逐节点上的所有Pod,重建到其他节点(先执行cordon,再驱逐)。需要注意的是,drain没有逆命令,只能通过kubectl uncordon解除节点封锁、允许新的Pod调度,无法召回已被驱逐迁移至其他节点的Pod。

三、Metrics部署

如果无法正常下载,可以访问我提供的百度云链接下载。

Metrics组件包链接: https://pan.baidu.com/s/1ZSO3Cf9a7mDAuCWjkuhhuw?pwd=cu3y

提取码: cu3y

[Step1] 从GitHub上下载Metrics Server官方描述文件,其实也可以使用“kubectl apply -f”一步下载和导入,但是为了方便区分安装错误的原因,这里将下载和导入步骤分开进行。

root@k8s-master:~# wget https://gh-proxy.org/https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.8.1/components.yaml

[Step2] 默认情况下,Metrics Server访问各节点kubelet时,校验kubelet自签名证书。自建kubeadm集群节点kubelet证书CN不包含节点IP,证书校验会失败,无法采集指标,服务内部报错。这里需要添加启动参数增加跳过kubelet证书校验。

root@k8s-master:~# vim components.yaml
​
# 在args参数下增加一行
- --kubelet-insecure-tls

[Step3] 安装Metrics Server,需要注意的是Metrics Server依赖“metrics-server:v0.8.1”镜像,如果无法正常拉取可以访问我的百度云链接手动导入镜像。

root@k8s-master:~# kubectl create -f components.yaml

[Step4] 验证:基于文件内定义的资源清单,查询集群中该资源的运行状态与基础信息。

root@k8s-master:~# kubectl get -f components.yaml

[Step5] 验证:Metrics Server默认部署在kube-system命名空间内。

root@k8s-master:~# kubectl get pod -n kube-system

[Step6] 验证:部署完成后,能够正常查询集群节点资源使用信息。

root@k8s-master:~# kubectl top nodes
root@k8s-master:~# kubectl top pod

Kubernetes QoS服务质量与资源配额管理 2026-10-29
Kubernetes 环境下Prometheus监控栈部署 2026-10-30

评论区