如何在仪表盘展示Kubernetes Pod资源?当前仅显示Worker节点资源
方案调整:在Kubernetes环境下让仪表盘展示Pod资源使用情况
首先纠正一个认知:Pod并非没有资源相关数据——哪怕你没给Pod显式分配requests/limits,K8s也会将其归为BestEffort QoS类别,而且Pod运行时的CPU、内存实时使用量是可以被采集到的。下面是具体的改造方案:
一、获取Pod资源数据的两种核心方式
- 拉取Pod的资源配置信息:调用Kubernetes API的
/api/v1/pods接口,每个Pod的spec.containers[].resources字段里存着requests(资源请求)和limits(资源限制)的配置;如果没显式设置,这部分字段为空,直接标注为「未配置请求/限制(BestEffort)」即可。 - 采集Pod实时资源使用数据:
- 用kubelet内置的cAdvisor:每个Worker节点的kubelet都自带cAdvisor,直接访问kubelet的
/metrics/cadvisor接口,就能拿到该节点上所有Pod的CPU、内存、磁盘IO等实时运行数据。 - 用Prometheus(如果已部署):通过Prometheus的预定义指标,比如
container_cpu_usage_seconds_total(CPU累计使用时长)、container_memory_working_set_bytes(内存工作集),可以查询Pod的实时资源使用率,再做聚合计算后展示。
- 用kubelet内置的cAdvisor:每个Worker节点的kubelet都自带cAdvisor,直接访问kubelet的
二、仪表盘的具体改造步骤
- 新增Pod资源展示模块:在现有节点资源展示区旁边,加一个Pod列表或卡片视图,每个条目至少包含:
- Pod名称、所属命名空间、运行节点
- 资源请求/限制(CPU、内存):无配置时显示「无限制(BestEffort)」
- 实时使用率:CPU使用率(可选择「当前使用量/请求量」或「当前使用量/节点可分配量」)、内存使用率
- 数据关联与展示逻辑:
- 先调用K8s API拉取所有Pod的基础信息和资源配置
- 再从cAdvisor或Prometheus拉取对应实时数据,和Pod做关联匹配
- 对无资源配置的Pod,直接展示实际使用量,或者展示其使用量占所在节点剩余资源的比例
- 优化展示体验:
- 支持按命名空间、节点过滤Pod
- 对资源使用率过高的Pod(比如内存使用率超80%)标红提示
- 可选添加Pod资源使用趋势图(比如最近15分钟的CPU/内存波动)
三、需要注意的细节
- 权限配置:确保仪表盘的服务账号拥有
pods资源的list、watch权限,以及访问kubelet cAdvisor接口的权限,否则拉取不到数据。 - 性能控制:如果集群Pod数量多,别太频繁调用API,建议每30秒拉取一次并做本地缓存,避免给K8s API Server造成压力。
- QoS分类展示:可以按Pod的QoS类别(Guaranteed、Burstable、BestEffort)分组展示,方便快速区分不同优先级的Pod资源状态。
内容的提问来源于stack exchange,提问作者MrTux01
相关产品推荐
相关产品推荐

