集群运维看板脚本
本文介绍如何使用 dashboard.tar.gz 中的 pod-list.sh、pod-stat.sh 和 node-list.sh,对已部署的 NineData 高可用集群执行日常巡检和资源排查。
适用场景
- 快速查看各命名空间下 Pod 的状态、所在节点和实时资源占用。
- 持续观察某个关键 Pod 的 CPU、内存和网络吞吐变化。
- 从节点维度查看 CPU、内存、磁盘以及 Pod Request 水位,辅助容量评估和故障定位。
前提条件
- 已将
dashboard.tar.gz上传到可访问 NineData Kubernetes 集群的主机上。通常建议在任意一个 Master 节点执行。 - 当前环境已配置可用的
kubectl上下文,并且具备读取 Pod、Node、Metrics API 以及 Node Proxy 的权限。 - 集群中已正常安装
metrics-server。否则pod-list.sh和node-list.sh的 CPU / 内存数据可能显示为0。 - 脚本包中已包含
jq可执行文件。若当前主机无法执行该二进制,可自行安装系统jq,脚本会优先使用系统中的jq。
准备脚本
- 解压脚本包并进入目录。
tar -zxvf dashboard.tar.gz
cd dashboard
- 为脚本和内置
jq添加执行权限。
chmod +x pod-list.sh pod-stat.sh node-list.sh jq
- 如果内置
jq不可用,可安装系统jq。
yum install -y jq
apt-get update && apt-get install -y jq
查看 Pod 列表:pod-list.sh
pod-list.sh 用于按命名空间、节点、Pod 名称、状态等条件筛选 Pod,并展示 Pod 的创建时间、运行状态、所在节点、实时 CPU / 内存、Request 和 Limit。
命令格式
./pod-list.sh [Options]
选项说明
| 选项 | 说明 |
|---|---|
| `-n, --namespace ` | 按命名空间过滤,多个命名空间使用英文逗号分隔。 |
| `-N, --node ` | 按节点名称过滤。 |
| `-p, --pod ` | 按 Pod 名称模糊匹配。 |
| `-s, --status ` | 按 Pod 状态过滤,例如 Running、Succeeded。 |
| `--sort ` | 按实际 CPU 或内存占用排序。 |
--asc | 使用升序排序,默认按降序输出。 |
-h, --help | 查看帮助。 |
输出列说明
| 列名 | 说明 |
|---|---|
NAMESPACE | Pod 所在的 Kubernetes 命名空间。 |
POD_NAME | Pod 名称。 |
CREATED | Pod 创建时间。 |
STATUS | Pod 当前状态,例如 Running、Pending、Succeeded。 |
NODE | Pod 当前调度到的节点。 |
CPU | Pod 的实时 CPU 使用量,单位为毫核(m)。 |
MEMORY | Pod 的实时内存使用量。 |
REQUEST | Pod 汇总后的 CPU / 内存 Request。 |
LIMIT | Pod 汇总后的 CPU / 内存 Limit。 |
使用示例
./pod-list.sh
./pod-list.sh -n jz-component,jzcloud-console
./pod-list.sh --sort cpu
./pod-list.sh -p nginx --sort mem --asc
./pod-list.sh -N worker-01 -s Running
输出示例
NAMESPACE POD_NAME CREATED STATUS NODE CPU MEMORY REQUEST LIMIT
---------------- ----------------------------------------- ------------------- --------- ------------- --- ------ ------------ ------------
default rp-dhcec38w47mw-full-s2rtm 2026-03-26 03:50:58 Pending - 0m 0Mi 2000m/2048Mi 2000m/2048Mi
default rp-dhcec38w47mw-reader-inc-reader-mzgpq 2026-03-26 03:33:43 Running 192.168.2.178 13m 426Mi 1000m/2048Mi 1000m/2048Mi
jz-component kafka-0 2026-03-25 07:04:58 Running 192.168.2.178 13m 459Mi 50m/200Mi 1000m/2048Mi
jz-component ninedata-meta-cluster-0 2026-03-25 06:51:53 Running 192.168.2.178 34m 1013Mi 0m/0Mi 0m/0Mi
jzcloud-console jzcloud-console-5d789db8c4-6f4vm 2026-03-25 06:57:41 Running 192.168.2.178 13m 1115Mi 30m/600Mi 1000m/2048Mi
jzcloud-console jzcloud-console-frontend-7589776cd9-zzx5b 2026-03-25 06:57:40 Running 192.168.2.178 68m 5Mi 1m/10Mi 100m/64Mi
监控单个 Pod 指标:pod-stat.sh
pod-stat.sh 用于持续监控单个 Pod 的 CPU、内存和网络吞吐。脚本会在每次循环时重新查询 Pod 当前所在节点,因此即使 Pod 发生重调度,也会自动跟随新的节点继续采集。
命令格式
./pod-stat.sh <namespace> <pod_name>
如果未提供参数,脚本会输出帮助信息。
参数说明
| 参数 | 说明 |
|---|---|
namespace | Pod 所在命名空间。省略时默认使用 default。 |
pod_name | 需要监控的 Pod 名称。 |
输出列说明
| 列名 | 说明 |
|---|---|
COLLECT_TIME | 本地采集时间。 |
CPU | 通过 CPU 累计纳秒差值换算得到的实时 CPU 使用量,单位为毫核(m)。 |
MEMORY | Pod Working Set 内存。 |
NET_IN | 网络入流量吞吐。 |
NET_OUT | 网络出流量吞吐。 |
使用示例
./pod-stat.sh jz-component kafka-0
./pod-stat.sh kube-system coredns-85cb-xyz
输出示例
COLLECT_TIME CPU MEMORY NET_IN NET_OUT
------------------------------------------------------------------------------------------------
2026-03-26 16:31:53 11m 459.13MB 374B/s 148B/s
2026-03-26 16:32:09 11m 459.13MB 386B/s 154B/s
使用说明
- 脚本内部每 5 秒轮询一次,但只有当 Kubelet Summary API 刷新后才会输出新的一行数据,因此实际刷新间隔通常约为 10 到 15 秒。
- 首次执行时只有表头、暂时没有数据属于正常现象,请等待下一轮有效采样。
- 如果 Pod 未调度成功或已经被删除,脚本会持续提示 Pod 不存在或尚未调度。
查看节点资源概览:node-list.sh
node-list.sh 用于查看节点维度的资源消耗情况,包括节点状态、Kubelet 版本、CPU、内存、根文件系统磁盘占用,以及该节点上全部 Pod 的 Request 汇总。
命令格式
./node-list.sh [Options]
选项说明
| 选项 | 说明 |
|---|---|
| `-N, --node ` | 按节点名称过滤。 |
| `-s, --status ` | 按节点状态过滤,例如 Ready、NotReady。 |
| `-i, --ip ` | 按节点内网 IP 过滤。 |
| `--sort ` | 排序字段,支持 cpu、mem、disk、req_cpu、req_mem。 |
--asc | 使用升序排序,默认按降序输出。 |
-h, --help | 查看帮助。 |
输出列说明
| 列名 | 说明 |
|---|---|
NAME | 节点名称。 |
STATUS | 节点就绪状态。 |
CREATED | 节点注册时间。 |
IP | 节点内网 IP。 |
VERSION | Kubelet 版本。 |
CPU | 节点实时 CPU 使用量。 |
MEMORY | 节点实时内存使用量。 |
DISK | 节点根文件系统使用量和占比。 |
REQUEST(%) | 当前节点所有 Pod 的 CPU / 内存 Request 汇总,以及占节点可分配资源的比例。 |
CAPACITY | 节点可分配的 CPU / 内存总量。 |
使用示例
./node-list.sh
./node-list.sh --sort disk
./node-list.sh -s NotReady
./node-list.sh -N node-01 --sort cpu
./node-list.sh --sort req_mem --asc
输出示例
NAME STATUS CREATED IP VERSION CPU MEMORY DISK REQUEST(%) CAPACITY
------------- ------ ------------------- ------------- ------------ ---- ------ --------- ---------------------- ------------
192.168.2.178 Ready 2026-03-25 06:32:38 192.168.2.178 v1.34.3+k3s1 302m 5857Mi 36Gi(26%) 2532m(63%)/5909Mi(80%) 4000m/7344Mi
使用说明
- 脚本会逐个访问节点的 Kubelet Summary API,采集根文件系统磁盘使用情况,因此节点越多,执行耗时越长。
DISK展示的是节点根文件系统(node.fs)的使用情况,不是挂载到应用目录的独立数据盘。REQUEST(%)适合用于评估节点水位和调度压力,辅助判断是否需要扩容或迁移工作负载。
常见问题
提示 jq 不存在
如果脚本提示 jq 不存在,请先确认脚本目录下的 jq 是否有执行权限;若无法执行,请安装系统 jq 后重新运行。
CPU / 内存显示为 0
通常表示 metrics-server 不可用、返回异常,或当前 Pod / Node 没有对应的实时指标。请优先检查:
kubectl top pod -Akubectl top node
pod-stat.sh 只有表头,没有明细行
这通常有三种原因:
- 刚启动脚本,Kubelet Summary API 还没有刷新;
- 目标 Pod 尚未成功调度到节点;
- 当前账号无权访问
/api/v1/nodes/<node>/proxy/stats/summary。
节点磁盘信息为空
如果 node-list.sh 中的 DISK 显示异常,请检查是否能够访问各节点的 Kubelet Summary API,以及节点自身的 stats/summary 是否正常返回。
node-list.sh 报错 Cannot index object with null
如果执行 node-list.sh 时看到如下错误:
jq: error (at /tmp/tmp.xxxxx:xxxxx): Cannot index object with null
请先检查集群中是否存在尚未调度到节点的 Pod:
kubectl get pods -A --field-selector spec.nodeName=
在 2026-03-27 的 HA 实测环境中,正是由于存在 Pending Pod rp-dhcec38w47mw-full-s2rtm,导致原始脚本在按 .spec.nodeName 聚合 Pod Request 时失败。需要使用已修正、会过滤空 spec.nodeName 的脚本版本。
这通常表示脚本在汇总 Pod Request 时,遇到了尚未调度到节点的 Pod。请更新为已修正、会过滤空 spec.nodeName 的脚本版本后再重试。