K8s集群GPU显存监控排错:从指标采集到告警修复

K8s集群里的GPU显存监控一旦失效,最直接的表现是Prometheus查不到DCGM_FI_DEV_FB_USED或nvidia_gpu_memory_used_bytes指标,Grafana面板显存曲线断流。
本文按“先确认采集链路,再定位具体断点”的思路,讲清楚从指标暴露到告警触发的完整排错流程。

先确认GPU节点和驱动状态

排错前必须确认节点本身能识别GPU,否则后面所有监控配置都无意义。

在GPU节点上执行:

nvidia-smi -L

正常应输出类似GPU 0: Tesla T4 (UUID: GPU-xxxx)的列表。
如果提示command not found,说明驱动未装或容器内未挂载;
如果显示No devices were found,先排查驱动和内核模块:

lsmod | grep nvidia
nvidia-smi -q | head -20

确认驱动正常后,再检查K8s是否给节点打上了GPU资源标签:

kubectl get nodes -o custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu

GPU列显示数字(如1)才说明device-plugin工作正常。

检查nvidia-exporter或DCGM-exporter是否运行

K8s集群GPU显存监控通常由DaemonSet形式部署的exporter采集。
先用命令确认Pod状态:

kubectl get pods -n monitoring -l app=nvidia-dcgm-exporter -o wide

如果Pod处于CrashLoopBackOff或Pending,按以下顺序排查:

  • Pending:节点没有可用GPU资源,或DaemonSet的nodeSelector写错。检查kubectl describe pod -n monitoring中的Events。
  • CrashLoopBackOff:进入Pod日志查看具体报错:
kubectl logs  -n monitoring --tail=100

常见原因是驱动版本与DCGM版本不匹配,或容器未挂载/dev/nvidia*设备。
确认DaemonSet中是否有:

volumeMounts:
  - name: dev
    mountPath: /dev
volumes:
  - name: dev
    hostPath:
      path: /dev

缺少设备挂载时,exporter能启动但采集不到任何GPU指标。

验证指标暴露和Prometheus抓取

exporter运行正常后,直接访问它的metrics端点:

kubectl port-forward  -n monitoring 9400:9400
curl http://localhost:9400/metrics | grep -i memory

正常应看到类似:

DCGM_FI_DEV_FB_USED{gpu="0",UUID="GPU-xxxx"} 1024
DCGM_FI_DEV_FB_FREE{gpu="0",UUID="GPU-xxxx"} 14848

如果这里没有显存指标,问题在exporter侧;
如果有指标但Prometheus查不到,问题在抓取配置。
检查Prometheus的target状态:

kubectl get servicemonitor -n monitoring

确认ServiceMonitor的selector.matchLabels与exporter Service的标签一致,endpoints.port指向正确端口。
标签不匹配是抓取失败的常见原因。

显存数据异常的典型场景

指标能采集到但数值异常时,按现象区分处理:

  • 显存使用量始终为0:容器内进程未实际占用GPU,或nvidia-smi在容器内不可见。检查业务Pod是否挂载了/dev/nvidia*和NVIDIA_VISIBLE_DEVICES环境变量。
  • 显存曲线突然断流:节点重启后exporter未自动恢复,检查DaemonSet的restartPolicy和节点污点。
  • 显存占用持续上涨不释放:可能是业务进程显存泄漏,用nvidia-smi --query-compute-apps=pid,used_memory --format=csv定位具体进程。
  • 告警规则不触发:检查Prometheus告警规则中expr用的指标名是否与实际暴露的一致,不同exporter版本的指标名可能不同。

避坑要点

驱动版本对齐:DCGM-exporter对驱动版本有要求,版本不匹配时可能采集到部分指标但显存指标缺失。
部署前确认节点驱动版本与exporter镜像的兼容性。

不要只看Pod Running:exporter Pod处于Running状态不代表采集正常,必须实际curl metrics端点验证。

告警阈值要结合卡型:不同GPU卡显存容量差异大,告警阈值建议用百分比而非固定值,避免小显存卡频繁误报。

节点标签要一致:如果集群中只有部分节点有GPU,DaemonSet的nodeSelector或affinity必须准确,否则会在无GPU节点上反复重启。

验证与复查

完成修复后,按以下顺序复查:

  1. nvidia-smi -L确认节点识别GPU。
  2. kubectl get pods -n monitoring确认exporter Pod全部Running。
  3. curlmetrics端点确认显存指标存在。
  4. Prometheus的Targets页面确认该job状态为UP。
  5. Grafana面板确认显存曲线恢复且数值与nvidia-smi输出一致。

五个环节全部通过,才说明K8s集群GPU显存监控链路完整可用。
如果仍有断点,回到对应环节重新检查配置和日志。

分享到:
上一篇
K8s集群GPU温度监控排错:从DCGM到告警完整流程
下一篇
服务器K8s集群GPU故障排查:从节点掉卡到Pod异常的定位思路
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意