目录
Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南
四、方式一:containerd + nvidia-container-toolkit(基础方式)
1️⃣ 安装 NVIDIA Container Toolkit
4️⃣ 安装 Kubernetes Device Plugin(GPU 插件)
五、方式二:使用 NVIDIA GPU Operator(推荐)
1️⃣ 安装 Operator Lifecycle Manager(OLM)
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: cuda
image: nvidia/cuda:12.8.1-base
resources:
limits:
nvidia.com/gpu: 1
command: ["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: cuda
image: nvidia/cuda:12.8.1-base
resources:
limits:
nvidia.com/gpu: 1
command: ["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 配置,我可以为你补充。是否需要?