K8s集群GPU与vGPU配置:从设备插件到虚拟化切分

在Kubernetes集群里使用GPU,核心就两件事:让节点识别到GPU,让Pod能申请到GPU。
物理GPU靠NVIDIA驱动加设备插件;
vGPU则多一层宿主机虚拟化切分,需要vGPU Manager和Guest驱动配合。
下面按实际部署顺序讲清楚。

先确认节点和驱动状态

登录每台GPU节点,确认显卡型号和系统版本:

lspci | grep -i nvidia
uname -r
cat /etc/os-release

安装与内核匹配的NVIDIA驱动。
生产环境建议用官方runfile或系统包管理器,安装后执行:

nvidia-smi

能看到显卡型号、显存和驱动版本即算通过。
如果提示NVIDIA-SMI has failed,先检查是否禁用了nouveau:

echo -e "blacklist nouveau\noptions nouveau modeset=0" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u   # Ubuntu/Debian
sudo dracut --force        # CentOS/RHEL

重启后再次验证。驱动没装好之前,后面所有步骤都无法进行。

部署NVIDIA设备插件

K8s本身不识别GPU,需要设备插件把GPU资源上报给kubelet。
使用官方DaemonSet:

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.5/nvidia-device-plugin.yml

如果节点无法访问外网,先下载yaml再kubectl apply -f。
部署后检查:

kubectl get pods -n kube-system | grep nvidia
kubectl describe node <节点名> | grep nvidia.com/gpu

在Capacity和Allocatable里看到nvidia.com/gpu: 1之类的数字,说明节点GPU已可被调度。
数字为0或没有该字段,优先看插件Pod日志:

kubectl logs -n kube-system 

常见原因是驱动版本与插件不兼容,或节点存在nvidia.com/gpu污点未容忍。

vGPU场景的额外配置

vGPU是把一块物理GPU切成多个虚拟GPU给不同Pod使用,需要宿主机安装vGPU Manager,虚拟机或容器内安装对应的Guest驱动。

在宿主机上安装vGPU Manager后,确认切分模式:

nvidia-smi vgpu -q

该命令会列出当前GPU支持的vGPU类型和可切分数量。
创建vGPU实例通常由上层虚拟化平台完成,K8s侧仍通过设备插件上报。注意:vGPU切分规格必须在宿主机层面预先配置好,K8s无法动态改变切分方案。

如果使用NVIDIA vGPU且需要K8s调度,
设备插件需以--fail-on-init-error=false方式启动,
并确保/dev/nvidia-vgpu*设备节点在容器内可见。

跑一个Pod验证GPU可用

写一个最小测试Pod:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-test
spec:
  containers:
  - name: cuda
    image: nvcr.io/nvidia/cuda:12.2.0-base-ubuntu22.04
    command: ["nvidia-smi"]
    resources:
      limits:
        nvidia.com/gpu: 1
  restartPolicy: Never

执行:

kubectl apply -f gpu-test.yaml
kubectl logs gpu-test

日志里出现显卡信息,说明调度和驱动链路全部打通。
如果Pod一直Pending,用kubectl describe pod gpu-test看Events,常见是Insufficient nvidia.com/gpu,说明节点资源未上报或已被占满。

容易踩的坑

  • 驱动版本不匹配:宿主机驱动、设备插件、CUDA镜像三者版本要兼容,建议先查NVIDIA官方兼容矩阵再动手。
  • 忘记加limits:K8s里GPU只能通过limits申请,写在requests里无效。
  • 多节点驱动不一致:集群里每台GPU节点驱动版本尽量统一,否则调度到不同节点行为可能不同。
  • vGPU授权问题:部分vGPU模式需要License服务器,授权失效会导致GPU不可用,排查时先确认nvidia-smi输出是否正常。
  • 容器运行时配置:使用containerd时需确保配置了NVIDIA runtime,否则设备插件无法挂载设备。

怎么确认真的配好了

三个检查点全部通过才算完成:节点kubectl describe node能看到GPU资源数量;
测试Pod能正常输出nvidia-smi结果;
连续调度多个GPU Pod时资源计数正确递减。
任何一步不通过,按上面的日志和Events逐层排查,不要跳过驱动直接查K8s。

分享到:
上一篇
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 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意