K8s集群GPU驱动升级:从节点准备到Pod验证

在Kubernetes集群中升级GPU驱动,核心操作其实发生在每个GPU节点上:先把节点从调度中摘除,停掉占用GPU的Pod,再安装新驱动并重启,最后确认device-plugin重新上报资源、Pod能正常申请GPU。
下面按这个顺序展开。

先分清要升级的是哪一层

GPU节点上通常有三层东西,升级前必须分清,否则容易白忙一场:

  • 内核态驱动(NVIDIA Driver):决定GPU能否被操作系统识别,nvidia-smi能否正常输出。
  • 用户态库(CUDA / cuDNN 等):训练框架依赖,一般打包在容器镜像里,不一定要动宿主机。
  • Kubernetes侧组件(NVIDIA device-plugin、GPU Operator):负责把节点上的GPU数量上报给kubelet。

本文主要讲宿主机内核态驱动的升级。
如果你用的是NVIDIA GPU Operator,驱动可能由Operator以容器方式管理,那就应该改Operator配置而不是手动装,这一点在动手前务必确认。

升级前的准备与节点隔离

动手前先记录现状,方便升级后对比:

nvidia-smi
kubectl get nodes -o wide
kubectl describe node  | grep -A5 nvidia.com/gpu

确认当前驱动版本、GPU型号、节点上正在运行的GPU Pod,以及集群里注册的GPU资源数量。

升级驱动需要重启节点,所以要把节点标记为不可调度并驱逐业务Pod:

kubectl cordon 
kubectl drain  --ignore-daemonsets --delete-emptydir-data

cordon只是禁止新Pod调度上来,drain才会驱逐已有Pod。
如果节点上跑的是训练任务,务必先和业务确认可以中断,或者提前把任务迁移到其他GPU节点。

安装新驱动与版本匹配

在目标节点上停掉相关服务,卸载旧驱动(如果是从.run包安装的):

sudo systemctl stop kubelet
sudo /usr/bin/nvidia-uninstall   # 视安装方式而定

如果原驱动是包管理器安装的,用对应的卸载命令,不要混用两种安装方式,否则容易出现库文件冲突。

安装新驱动时,驱动版本要和CUDA版本、框架版本匹配。
比如某些较新的框架对驱动最低版本有要求,升级前查一下框架的发布说明。
安装示例:

sudo sh NVIDIA-Linux-x86_64-.run --silent --dkms

加上--dkms可以避免内核更新后驱动失效。
安装完成后重启节点:

sudo reboot

重启后先确认驱动本身没问题,再启动kubelet:

nvidia-smi
sudo systemctl start kubelet

让K8s重新识别GPU资源

节点重启后,device-plugin通常以DaemonSet形式运行,会自动重新注册GPU。
取消节点隔离并观察:

kubectl uncordon 
kubectl describe node  | grep -A5 nvidia.com/gpu

如果GPU数量显示为0或没有nvidia.com/gpu字段,先检查device-plugin的Pod日志:

kubectl get pods -n kube-system | grep nvidia
kubectl logs  -n kube-system

常见原因是驱动版本和device-plugin版本不兼容,或者驱动安装后nvidia-smi本身就不正常。

验证Pod能正常调用GPU

资源上报正常后,用一个简单Pod验证:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-test
spec:
  containers:
  - name: cuda
    image: nvidia/cuda:12.4.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

日志里能看到GPU信息,说明驱动、device-plugin、Pod调用这条链路都通了。

几个容易踩的坑

  • 只升级了驱动没升级容器镜像里的CUDA:如果框架对CUDA版本敏感,宿主机驱动升级后镜像里的CUDA可能反而不兼容,需要同步更新镜像。
  • drain时漏了DaemonSet:不加--ignore-daemonsets会卡住,因为DaemonSet Pod无法被驱逐。
  • 多节点升级没有分批:建议先升级一个节点验证,再滚动升级其他节点,避免全部GPU同时不可用。
  • 忽略了内核版本:如果节点内核也升级过,旧驱动可能加载失败,需要重新编译或使用DKMS。

常见疑问

升级驱动一定要重启服务器吗?

大多数情况下需要。
内核态驱动和内核模块绑定,加载新模块通常要重启才能干净生效。
少数场景可以卸载旧模块再加载新模块,但稳定性不如重启,生产环境建议按重启处理。

GPU Operator环境下还能手动装驱动吗?

不建议。
手动装会和Operator管理的驱动冲突,应该通过修改Operator的配置来指定驱动版本,让Operator负责分发和安装。

升级后Pod报no NVIDIA devices found怎么办?

先确认宿主机nvidia-smi正常,再检查device-plugin是否Running,最后看Pod是否被调度到了有GPU的节点上。
三处逐一排查,基本能定位到具体环节。

按上面的顺序执行,服务器K8s集群GPU驱动升级的风险可控。
如果集群规模较大,建议先在测试节点走一遍完整流程,确认业务镜像和新驱动兼容后再推到生产节点。

分享到:
上一篇
服务器K8s集群GPU故障排查:从节点掉卡到Pod异常的定位思路
下一篇
K8s集群GPU拓扑感知调度:从部署到验证的完整配置教程
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 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意