提交带 GPU 的 Pod 后一直 Pending,事件里写着 insufficient nvidia.com/gpu。

一开始怀疑是「资源名写错,集群里没有该资源」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。集群没有安装 GPU 设备插件。也可能是节点没有打上 GPU 标签。

不容易想到的是,显卡被其他 Pod 全部占用。

上来先确认节点上是否暴露了 GPU 资源

kubectl describe node gpu-node-1 | Select-String nvidia.com/gpu

再往下安装设备插件

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/main/nvidia-device-plugin.yml

给节点打标签并确认资源容量

kubectl label nodes gpu-node-1 accelerator=nvidia

提交最小 Pod 验证调度

kubectl run gpu-test --image=nvidia/cuda:12.1-base --restart=Never --overrides='{"spec":{"containers":[{"name":"t","resources":{"limits":{"nvidia.com/gpu":1}}}]}}'

中途换过一次思路,把范围缩到最小的那一层,反而快了。

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

改完先别撤,确认这几项。Pod 能成功调度到 GPU 节点并进入运行状态,容器里 nvidia-smi 能看到显卡,训练任务也能正常申请显存,节点资源列表里该项显示为已分配。

补一句。GPU 资源必须写在 limits 里,只写 requests 不会被调度器识别,这个细节在排查时最容易被忽略,写错还会让 Pod 一直停在 Pending。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189