Skip to content

节点组件监控

K8s 节点监控包含两层:Linux 主机本身,以及节点上的 Kubernetes 组件。主机 CPU、内存、磁盘、网络来自 node-exporter;kubelet、探针、volume 和容器资源来自 kubelet/cAdvisor;节点 Ready、DiskPressure、Pod 数量这类对象状态来自 kube-state-metrics。

节点看起来 CPU、内存正常,Pod 仍然可能因为镜像拉取、探针失败、磁盘压力、CNI 或挂载异常变得不稳定。节点监控要把主机资源、kubelet 状态、容器资源和对象状态放在一起看。

一、Prometheus Target

操作路径:

Status -> Target health (中文:状态 -> 目标健康)

节点相关 target 主要有三类:

scrape pool指标来源
kps-prometheus-node-exporterLinux 主机资源
kps-kubelet/0kubelet /metrics
kps-kubelet/1kubelet /metrics/cadvisor,容器资源
kps-kubelet/2kubelet /metrics/probes,探针指标

node-exporter 三台节点都为 UP

Prometheus node-exporter target

kubelet target 包含 /metrics/metrics/cadvisor

Prometheus kubelet target

Target DOWN 时,展开对应行看 Last error。kubelet 指标通常走 HTTPS,错误可能来自证书、bearer token、ServiceMonitor 或 kubelet 端口访问。

二、node-exporter

node-exporter 采集主机层指标。K8s 里它通常以 DaemonSet 运行,每台节点一个 Pod。

验证节点数量:

promql
count(node_uname_info)

当前结果为 3,说明三台节点都有 node-exporter 数据。

常用主机指标:

promql
# CPU 使用率,按 instance 区分节点
1 - avg by (instance) (
  rate(node_cpu_seconds_total{mode="idle"}[5m])
)

# 内存可用比例,MemAvailable 比 free 更接近真实可用内存
node_memory_MemAvailable_bytes
/
node_memory_MemTotal_bytes

# 根分区可用比例,排除 tmpfs 和 overlay
node_filesystem_avail_bytes{mountpoint="/", fstype!~"tmpfs|overlay"}
/
node_filesystem_size_bytes{mountpoint="/", fstype!~"tmpfs|overlay"}

# 网络接收速率,排除 lo 回环网卡
rate(node_network_receive_bytes_total{device!~"lo"}[5m])

K3s 节点磁盘要关注这些目录:

路径内容
/var/lib/rancher/k3sK3s 数据、镜像、数据库或运行时数据
/var/lib/kubeletkubelet 管理的 Pod、volume 信息
/var/lib/rancher/k3s/agent/containerdcontainerd 镜像和容器层
local-path PV 目录K3s local-path provisioner 创建的本地卷

磁盘空间不足时,Node 可能出现 DiskPressure=True,Pod 可能被驱逐,镜像拉取和容器创建也会失败。

三、kubelet 和 cAdvisor

kubelet 是每台节点上的 Kubernetes 代理,负责拉起 Pod、执行探针、上报节点状态、管理容器生命周期。cAdvisor 指标由 kubelet 暴露,提供容器级 CPU、内存、网络和文件系统数据。

kubelet 常见 metrics path:

metrics path说明
/metricskubelet 自身指标
/metrics/cadvisor容器资源指标
/metrics/probes探针执行指标

容器 CPU 查询:

promql
sum by (node) (
  rate(container_cpu_usage_seconds_total{container!=""}[5m])
)

Prometheus 查询容器 CPU

常用容器资源查询:

promql
# Pod CPU 使用量,适合定位哪个 Pod 消耗 CPU
sum by (namespace, pod) (
  rate(container_cpu_usage_seconds_total{container!="", image!=""}[5m])
)

# Pod 内存工作集,接近实际活跃内存
sum by (namespace, pod) (
  container_memory_working_set_bytes{container!="", image!=""}
)

# Pod 网络接收
sum by (namespace, pod) (
  rate(container_network_receive_bytes_total[5m])
)

# Pod 网络发送
sum by (namespace, pod) (
  rate(container_network_transmit_bytes_total[5m])
)

CPU 和内存要和 requests/limits 一起看。实际使用量高说明正在消耗资源;requests/limits 接近节点容量,说明调度和限制层面已经紧张。

四、Grafana 节点视图

Grafana 的节点视图适合从结果上看三件事:节点是否健康、资源请求是否集中、CPU/内存曲线是否异常。

节点健康和资源请求:

Kubernetes 节点健康与资源统计

节点 CPU 和内存趋势:

Kubernetes 节点 CPU 和内存曲线

Grafana 面板只是入口。看到某个节点 CPU 或内存异常后,还要回到 Prometheus 或 kubectl top pod 找具体 Pod。

五、当前资源状态

当前三台节点的资源使用:

节点CPU内存
k3s-agent0150m / 1%1263Mi / 50%
k3s-agent0241m / 1%998Mi / 50%
k3s-server01103m / 2%1573Mi / 43%

监控组件分布:

Pod节点内存
prometheus-kps-prometheus-0k3s-server01326Mi
kps-grafanak3s-agent01263Mi
alertmanager-kps-alertmanager-0k3s-server0154Mi,含 config-reloader
kps-kube-state-metricsk3s-server0168Mi
kps-operatork3s-server0170Mi
node-exporter三台节点每节点约 27-29Mi

这组资源说明轻量 values 生效。Grafana 默认 dashboard sidecar、更多规则和长保留时间都会增加内存占用,小内存测试机上很容易把节点压满。

六、节点异常排查

节点异常时,先确认 Node Condition,再看节点上有哪些 Pod,最后回到指标看趋势。

bash
# 查看节点状态、版本和节点 IP
kubectl get nodes -o wide

# 查看 Node Condition、污点、事件和资源分配
kubectl describe node k3s-agent01

# 查看某台节点上运行的 Pod
kubectl get pod -A -o wide \
  --field-selector spec.nodeName=k3s-agent01

# 查看节点资源使用
kubectl top node

# 查看内存最高的 Pod
kubectl top pod -A --sort-by=memory

PromQL 侧的常用入口:

promql
# Node condition
kube_node_status_condition

# 最近 15 分钟容器重启
increase(kube_pod_container_status_restarts_total[15m])

# Pod waiting reason
kube_pod_container_status_waiting_reason

# 节点文件系统可用比例
node_filesystem_avail_bytes{mountpoint="/", fstype!~"tmpfs|overlay"}
/
node_filesystem_size_bytes{mountpoint="/", fstype!~"tmpfs|overlay"}

常见现象和入口:

现象入口
NotReadykubectl describe node、kubelet 日志、节点网络
DiskPressurenode-exporter 文件系统指标、镜像目录、日志目录、local-path PV
MemoryPressure节点内存曲线、Pod 内存、OOM 事件
Pod 大量重启increase(kube_pod_container_status_restarts_total[15m])、容器日志
Pod 长期 PendingEvents、节点资源、污点、节点选择器、PVC

节点问题很少只靠一条 CPU 曲线定位。Node Condition、kubelet target、cAdvisor 容器指标、Events 和日志要一起看。