目錄
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 配置,我可以為你補充。是否需要?