跳到主要内容

集群运维看板脚本

本文介绍如何使用 dashboard.tar.gz 中的 pod-list.sh、pod-stat.sh 和 node-list.sh,对已部署的 NineData 高可用集群执行日常巡检和资源排查。

适用场景​

  • 快速查看各命名空间下 Pod 的状态、所在节点和实时资源占用。
  • 持续观察某个关键 Pod 的 CPU、内存和网络吞吐变化。
  • 从节点维度查看 CPU、内存、磁盘以及 Pod Request 水位,辅助容量评估和故障定位。

前提条件​

  1. 已将 dashboard.tar.gz 上传到可访问 NineData Kubernetes 集群的主机上。通常建议在任意一个 Master 节点执行。
  2. 当前环境已配置可用的 kubectl 上下文,并且具备读取 Pod、Node、Metrics API 以及 Node Proxy 的权限。
  3. 集群中已正常安装 metrics-server。否则 pod-list.sh 和 node-list.sh 的 CPU / 内存数据可能显示为 0。
  4. 脚本包中已包含 jq 可执行文件。若当前主机无法执行该二进制,可自行安装系统 jq,脚本会优先使用系统中的 jq。

准备脚本​

  1. 解压脚本包并进入目录。
   tar -zxvf dashboard.tar.gz
cd dashboard
  1. 为脚本和内置 jq 添加执行权限。
   chmod +x pod-list.sh pod-stat.sh node-list.sh jq
  1. 如果内置 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查看帮助。

输出列说明​

列名说明
NAMESPACEPod 所在的 Kubernetes 命名空间。
POD_NAMEPod 名称。
CREATEDPod 创建时间。
STATUSPod 当前状态,例如 Running、Pending、Succeeded。
NODEPod 当前调度到的节点。
CPUPod 的实时 CPU 使用量,单位为毫核(m)。
MEMORYPod 的实时内存使用量。
REQUESTPod 汇总后的 CPU / 内存 Request。
LIMITPod 汇总后的 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>

如果未提供参数,脚本会输出帮助信息。

参数说明​

参数说明
namespacePod 所在命名空间。省略时默认使用 default。
pod_name需要监控的 Pod 名称。

输出列说明​

列名说明
COLLECT_TIME本地采集时间。
CPU通过 CPU 累计纳秒差值换算得到的实时 CPU 使用量,单位为毫核(m)。
MEMORYPod 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。
VERSIONKubelet 版本。
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 -A
  • kubectl 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 的脚本版本后再重试。

相关文档​