当前位置: 首页 > news >正文

Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

目录

Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

一、为什么 containerd 是趋势?

二、目标

三、前提条件

四、方式一:containerd + nvidia-container-toolkit(基础方式)

1️⃣ 安装 NVIDIA Container Toolkit

2️⃣ 修改 containerd 配置文件

3️⃣ 重启 containerd 服务

4️⃣ 安装 Kubernetes Device Plugin(GPU 插件)

5️⃣ 验证 GPU 使用

五、方式二:使用 NVIDIA GPU Operator(推荐)

1️⃣ 安装 Operator Lifecycle Manager(OLM)

2️⃣ 安装 NVIDIA GPU Operator

3️⃣ 查看 GPU Operator 组件运行情况

4️⃣ 测试 Pod 是否能调度 GPU

六、问题排查建议

七、总结


Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

本文详细介绍在使用 containerd 作为容器运行时 的 Kubernetes 集群中,如何配置 NVIDIA GPU 支持,包括两种方式:

  • 使用 nvidia-container-toolkit + device plugin 实现基础 GPU 支持

  • 使用 NVIDIA GPU Operator 实现自动化驱动与插件部署


一、为什么 containerd 是趋势?

Kubernetes 从 1.20 开始默认不再支持 dockershim,主流发行版(如 kubeadm、k3s、OpenShift)都逐渐转向使用 containerd 或 CRI-O。与 Docker 相比,containerd 更轻量、启动更快,并对 CRI 接口支持原生。


二、目标

  • 在 containerd 环境中启用 GPU 支持

  • 支持 Kubernetes 使用 GPU 资源调度和运行

  • 实现 AI 推理/训练等任务运行

  • 可选:通过 GPU Operator 自动完成驱动+插件部署


三、前提条件

  • Ubuntu 18.04/20.04/22.04 系统(CentOS 也可)

  • 安装 NVIDIA 驱动(nvidia-smi 正常工作)

  • Kubernetes 集群已安装,容器运行时为 containerd(可用 crictl info 验证)

  • 节点具备 NVIDIA GPU 硬件


四、方式一:containerd + nvidia-container-toolkit(基础方式)

1️⃣ 安装 NVIDIA Container Toolkit

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

2️⃣ 修改 containerd 配置文件

生成默认配置:

sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null

添加 GPU 运行时支持:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]runtime_type = "io.containerd.runc.v2"[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]BinaryName = "/usr/bin/nvidia-container-runtime"

可选设置默认运行时(非必须):

[plugins."io.containerd.grpc.v1.cri".containerd]default_runtime_name = "nvidia"

3️⃣ 重启 containerd 服务

sudo systemctl restart containerd

4️⃣ 安装 Kubernetes Device Plugin(GPU 插件)

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

5️⃣ 验证 GPU 使用

apiVersion: v1
kind: Pod
metadata:name: gpu-test
spec:containers:- name: cudaimage: nvidia/cuda:12.8.1-baseresources:limits:nvidia.com/gpu: 1command: ["nvidia-smi"]

部署并查看日志:

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

五、方式二:使用 NVIDIA GPU Operator(推荐)

GPU Operator 是 NVIDIA 提供的 全自动化部署解决方案,支持自动完成:

  • 驱动安装(包含 DKMS 模块编译)

  • device plugin、DCGM、NCCL 插件部署

  • 实时健康监控(dcgm-exporter)

  • 容器内自动注入运行时


1️⃣ 安装 Operator Lifecycle Manager(OLM)

kubectl create -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/crds.yaml
kubectl create -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/olm.yaml

2️⃣ 安装 NVIDIA GPU Operator

kubectl create namespace gpu-operator
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/gpu-operator/main/deployments/gpu-operator.yaml -n gpu-operator

3️⃣ 查看 GPU Operator 组件运行情况

kubectl get pods -n gpu-operator

所有组件 Running 表示部署成功。会自动创建如下组件:

  • 驱动 DaemonSet

  • device plugin

  • validation webhook

  • DCGM exporter


4️⃣ 测试 Pod 是否能调度 GPU

apiVersion: v1
kind: Pod
metadata:name: gpu-operator-test
spec:containers:- name: cudaimage: nvidia/cuda:12.8.1-baseresources:limits:nvidia.com/gpu: 1command: ["nvidia-smi"]

六、问题排查建议

问题原因与解决办法
nvidia-smi 无法使用NVIDIA 驱动未安装或损坏
Pod 报 nvidia.com/gpu 不可分配device plugin 未正常运行 / 节点无 GPU
镜像拉取失败Docker Hub 被墙,建议配置 containerd 的 hosts.toml 使用加速器
Operator 安装失败Kubernetes 版本过旧 / OLM 安装不全

七、总结

对比项containerd + toolkit 手动部署GPU Operator 自动部署
安装复杂度中等(需配置 containerd + plugin)简单(自动完成所有驱动与插件安装)
可控性更自由,可自定义插件版本自动化,适合标准化部署
推荐适用场景内部集群测试、定制运行时企业生产环境、大规模 GPU 节点管理

如果你希望构建一套可重复部署的 GPU 支持方案,GPU Operator 是首选。如果只想在已有 containerd 集群上做最小化改造,nvidia-container-toolkit 同样高效可靠。


如果你需要完整的 config.toml 示例或 Operator CR 配置,我可以为你补充。是否需要?

相关文章:

  • KNOWLEDGE-BASED SYSTEMS(KBS期刊)投稿经验分享
  • JavaScript基础-局部作用域
  • 深度学习篇---MediaPipe 及其人体姿态估计模型详解
  • 加速pip下载:永久解决网络慢问题
  • 动态规划之完全背包问题
  • Day21 奇异值分解(SVD)全面解析
  • C++:this指针
  • 编译后的js文件如何跟进调试
  • 研发效率破局之道阅读总结(5)管理文化
  • AtCoder AT_abc405_d ABC405D - Escape Route
  • 使用FastAPI和React以及MongoDB构建全栈Web应用03 全栈开发快速入门
  • 每日脚本学习5.10 - XOR脚本
  • 论敏捷软件开发及其应用
  • 关于web3
  • PyTorch API 2 - 混合精度、微分、cpu、cuda、可视化
  • 模拟太阳系(C#编写的maui跨平台项目源码)
  • Maven 插件配置分层架构深度解析
  • 3.优惠券秒杀
  • 8051模板移植
  • 深度学习篇---姿态检测实现
  • 71岁导演詹姆斯・弗雷病逝,曾执导《纸牌屋》、麦当娜MV
  • 金融政策支持稳市场稳预期发布会即将召开,潘功胜、李云泽、吴清将出席
  • 《中国医药指南》就涉宫颈癌等论文出现男性病例致歉:辞退涉事编辑
  • 赵心童世锦赛历史性夺冠,你今天打斯诺克很可能订不到位
  • 夹缝中的责编看行业:长视频之殇,漫长周期
  • 美国内政部长:今年夏天美国可能发生西班牙式大停电,全怪拜登