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 配置,我可以为你补充。是否需要?