【NVIDIA】NVIDIA 云原生文档:Kubernetes 与 NVIDIA GPU
NVIDIA 云原生文档:Kubernetes 与 NVIDIA GPU
来源:https://docs.nvidia.com/datacenter/cloud-native/
目录
- 概述
- NVIDIA GPU Operator
- GPU Operator 安装与配置
- GPU 共享
- 容器设备接口(CDI)与 NRI 插件
- GPU 驱动自定义资源(CRD)
- 预编译驱动容器
- GPUDirect RDMA 与 GPUDirect Storage
- Kata Containers 部署
- KubeVirt GPU 支持
- 平台支持矩阵
- GPU 监控与遥测
- 其他组件
- 故障排查
1. 概述
NVIDIA 云原生生态系统提供了一整套工具和框架,用于在 Kubernetes 环境中管理、调度和监控 GPU 资源。核心组件包括:
1.1 核心组件关系
2. NVIDIA GPU Operator
2.1 什么是 GPU Operator
NVIDIA GPU Operator 是一个 Kubernetes Operator,用于自动化管理 NVIDIA GPU 资源所需的所有软件组件。它利用 Kubernetes 的 Operator 模式,通过自定义资源定义(CRD)和控制器来管理 GPU 驱动程序、容器工具包、设备插件等组件的生命周期。
2.2 GPU Operator 管理的组件
| 组件 | 功能 |
|---|---|
| NVIDIA GPU Driver | 在节点上安装和管理 GPU 驱动 |
| NVIDIA Container Toolkit | 确保容器可以正确访问 GPU |
| NVIDIA Kubernetes Device Plugin | 发现 GPU 资源并向 Kubelet 广告 |
| NVIDIA DCGM / DCGM Exporter | GPU 监控和指标导出 |
| NVIDIA GPU Feature Discovery | 自动标注 GPU 类型/特性 |
| Node Feature Discovery | 检测 CPU/内核/主机特性并标注节点 |
| NVIDIA MIG Manager | 管理 MIG 功能的 GPU |
| NVIDIA Validator | 验证 GPU Operator 部署是否成功 |
2.3 版本与生命周期
NVIDIA GPU Operator 采用日历版本号(Calendar Versioning):YY.MM.PP,例如 23.6.0、26.3.3。
| 版本 | 状态 |
|---|---|
| 26.3.x | ✅ 受支持 |
| 25.10.x | ⚠️ 已弃用(仅关键修复) |
| 25.3.x 及更低 | ❌ 停止支持 |
注意:升级仅支持在同一主版本内或升级到下一个主版本。
2.4 组件版本矩阵(v26.3.x)
| 组件 | v26.3.0 | v26.3.1 | v26.3.2 | v26.3.3 |
|---|---|---|---|---|
| NVIDIA GPU Driver | 580.126.20 (默认) | 580.126.20 (默认) | 580.126.20 (默认) | 580.126.20 (默认) |
| 570.211.01 | 570.211.01 | 570.211.01 | 570.211.01 | |
| 535.288.01 / 535.309.01 | 535.288.01 / 535.309.01 | 535.288.01 / 535.309.01 | 535.288.01 / 535.309.01 | |
| 580.167.08 (推荐) | 580.167.08 (推荐) | 580.167.08 (推荐) | 580.167.08 (推荐) | |
| Driver Manager | v0.10.0 | v0.10.0 | v0.11.0 | v0.11.0 |
| Container Toolkit | 1.19.0 | 1.19.0 | 1.19.1 | 1.19.1 |
| Device Plugin | 0.19.0 | 0.19.2 | 0.19.3 | 0.19.3 |
| DCGM Exporter | v4.5.1-4.8.0 | v4.5.1-4.8.0 | v4.5.3-4.8.2 | v4.5.3-4.8.2 |
| NFD | v0.18.3 | v0.18.3 | v0.18.3 | v0.18.3 |
| GPU Feature Discovery | 0.19.0 | 0.19.2 | 0.19.3 | 0.19.3 |
| MIG Manager | 0.14.0 | 0.14.0 | 0.14.2 | 0.14.2 |
| DCGM | 4.5.2-1 | 4.5.2-1 | 4.5.2-1 | 4.5.2-1 |
| KubeVirt GPU Device Plugin | v1.5.0 | v1.5.0 | v1.5.0 | v1.5.0 |
| vGPU Device Manager | v0.4.2 | v0.4.2 | v0.4.2 | v0.4.2 |
| GDS Driver | 2.27.3 | 2.27.3 | 2.27.3 | 2.27.3 |
| CC Manager | v0.3.0 | v0.3.0 | v0.4.0 | v0.4.0 |
| GDRCopy Driver | v2.5.1 | v2.5.1 | v2.5.2 | v2.5.2 |
| Kata Sandbox Device Plugin | v0.0.2 | v0.0.2 | v0.0.3 | v0.0.3 |
已知问题:驱动版本 570.124.06、570.133.20、570.148.08、570.158.01 在 MIG 切片和完整 GPU 混合节点上,GPU Pod 会无限期 Pending。建议升级到 580.65.06 或更高版本。
3. GPU Operator 安装与配置
3.1 前提条件
- Kubernetes 1.32–1.36 集群
- Helm 3 已安装
- 节点上安装了受支持的操作系统
- (可选)已预安装 NVIDIA GPU 驱动和 Container Toolkit
3.2 安装 GPU Operator
# 添加 NVIDIA Helm 仓库
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
# 标准安装(自动安装驱动)
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3
# 使用预安装驱动(不安装驱动容器)
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set driver.enabled=false \
--set toolkit.enabled=false
3.3 验证安装
# 检查所有 Pod 状态
kubectl get pods -n gpu-operator
# 预期输出:
# NAME READY STATUS RESTARTS AGE
# gpu-operator-xxxxxx-xxxxx 1/1 Running 0 5m
# nvidia-container-toolkit-daemonset-xxxxx 1/1 Running 0 4m
# nvidia-cuda-validator-xxxxx 0/1 Completed 0 3m
# nvidia-dcgm-exporter-xxxxx 1/1 Running 0 4m
# nvidia-device-plugin-daemonset-xxxxx 1/1 Running 0 4m
# nvidia-device-plugin-validator-xxxxx 0/1 Completed 0 3m
# nvidia-driver-daemonset-xxxxx 1/1 Running 0 5m
# nvidia-operator-validator-xxxxx 1/1 Running 0 4m
3.4 安装流程图
3.5 常见 Helm 配置选项
| 参数 | 默认值 | 说明 |
|---|---|---|
driver.enabled |
true |
是否部署驱动容器 |
driver.version |
自动 | GPU 驱动版本 |
driver.usePrecompiled |
false |
使用预编译驱动 |
driver.repository |
nvcr.io/nvidia |
驱动镜像仓库 |
driver.rdma.enabled |
false |
启用 GPUDirect RDMA |
driver.rdma.useHostMofed |
false |
使用宿主机 MOFED 驱动 |
gds.enabled |
false |
启用 GPUDirect Storage |
toolkit.enabled |
true |
是否部署 Container Toolkit |
devicePlugin.enabled |
true |
是否部署 Device Plugin |
dcgmExporter.enabled |
true |
是否部署 DCGM Exporter |
mig.strategy |
single |
MIG 策略(single/none) |
sandboxWorkloads.enabled |
false |
启用沙箱工作负载 |
sandboxWorkloads.mode |
"" |
沙箱模式(kata) |
cdi.enabled |
true(v25.10+) |
启用 CDI |
nfd.enabled |
true |
启用 Node Feature Discovery |
4. GPU 共享
4.1 概述
GPU Operator 支持多种 GPU 共享方式,使多个工作负载可以同时使用同一块 GPU:
4.2 时间分片(Time-Slicing)
时间分片通过将 GPU 的计算资源在时间维度上划分给多个工作负载,实现 GPU 共享。
配置示例(通过 ClusterPolicy):
# 在 Device Plugin 配置中启用时间分片
spec:
devicePlugin:
config:
name: time-slicing-config
share:
timeSlicing:
resources:
- name: nvidia.com/gpu
replicas: 4 # 每个 GPU 分为 4 个副本
4.3 MIG(Multi-Instance GPU)
MIG 是 NVIDIA Ampere 及更新架构 GPU 的硬件级隔离功能,可以将一块 GPU 划分为多个独立的实例。
支持的 GPU:A100、A30、A10、A16、A2、H100 等 Ampere 及以上架构。
MIG 策略选项:
| 策略 | 说明 |
|---|---|
single |
整块 GPU 分配给一个工作负载(默认) |
mixed |
允许混合使用 MIG 实例和完整 GPU |
5. 容器设备接口(CDI)与 NRI 插件
5.1 CDI 概述
容器设备接口(Container Device Interface,CDI)是一个开放规范,用于标准化容器运行时对设备(如 GPU)的访问方式。CDI 简化了为容器添加设备支持的开发工作,因为该规范适用于所有支持 CDI 的容器运行时。
从 GPU Operator v25.10.0 开始,CDI 默认启用,用于在 Kubernetes 中运行的工作负载容器中注入 GPU。CDI 通过 containerd 和 CRI-O 等容器运行时来实现 GPU 注入。
5.2 CDI 与 GPU 管理容器
当 CDI 在 v25.10.0 及更高版本中启用时,使用 NVIDIA_VISIBLE_DEVICES 环境变量获取 GPU 访问权限的 GPU 管理容器将绕过 GPU 分配。
5.3 NRI 插件
NRI(Node Resource Interface)插件是另一种设备注入机制。GPU Operator 支持通过 NRI 插件进行 GPU 设备注入。
启用 NRI 插件:
# 安装时启用
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set cdi.nriPluginEnabled=true
禁用 NRI 插件(改用 nvidia runtime class):
kubectl patch clusterpolicies.nvidia.com/cluster-policy --type='json' \
-p='[{"op": "replace", "path": "/spec/cdi/nriPluginEnabled", "value":false}]'
要求:使用 NRI 插件需要 containerd v1.7.30+、v2.1.x 或 v2.2.x,或 CRI-O v1.34+。
5.4 已知问题
设置 spec.hostUsers: false(Kubernetes 用户命名空间)的 Pod 规范不受支持。NVIDIA Container Toolkit 的 nvidia-cdi-hook 在用户命名空间内无法读取 OCI bundle 的 config.json,导致容器创建失败。
临时解决方案:对于请求 GPU 或由 GPU Operator 管理的 Pod,省略 hostUsers 字段或设置 spec.hostUsers: true。
6. GPU 驱动自定义资源(CRD)
6.1 概述
从 GPU Operator v26.3 开始,可以使用 NVIDIA 驱动自定义资源(NVIDIADriver CRD)来指定节点上的 GPU 驱动类型和版本。相比传统的 ClusterPolicy 方式,NVIDIADriver CRD 支持在同一集群中运行不同驱动类型和版本。
6.2 CRD vs ClusterPolicy 对比
| 方面 | ClusterPolicy CRD | NVIDIA Driver CRD |
|---|---|---|
| 驱动类型/版本 | 所有节点单一配置 | 不同节点可配置不同类型/版本 |
| 操作系统版本 | 不支持多种 | 支持多种操作系统版本 |
| 节点选择 | 全局 | 通过 nodeSelector 精细控制 |
6.3 驱动 DaemonSet 机制
GPU Operator 为每个 NVIDIADriver CRD 和每个操作系统版本启动一个驱动 DaemonSet。
6.4 NVIDIADriver CRD 字段说明
| 字段 | 说明 | 默认值 |
|---|---|---|
driverType |
gpu(数据中心驱动)/ vgpu(vGPU 来宾驱动)/ vgpu-host-manager(vGPU 管理器) |
gpu |
version |
GPU 驱动版本(如 580.126.20) | 无 |
kernelModuleType |
auto / proprietary / open |
auto |
nodeSelector |
节点标签选择器 | 无(选择所有节点) |
rdma.enabled |
启用 GPUDirect RDMA | false |
gds.enabled |
启用 GPUDirect Storage | false |
gdrcopy.enabled |
启用 GDRCopy 驱动 | false |
usePrecompiled |
使用预编译驱动 | false |
image |
驱动容器镜像名 | driver |
repository |
容器镜像仓库 | nvcr.io/nvidia |
6.5 示例:多驱动版本配置
# 金牌节点 - 最新驱动
apiVersion: nvidia.com/v1alpha1
kind: NVIDIADriver
metadata:
name: demo-gold
spec:
driverType: gpu
nodeSelector:
driver.config: "gold"
repository: nvcr.io/nvidia
version: "580.126.20"
---
# 银牌节点 - 旧版驱动
apiVersion: nvidia.com/v1alpha1
kind: NVIDIADriver
metadata:
name: demo-silver
spec:
driverType: gpu
nodeSelector:
driver.config: "silver"
repository: nvcr.io/nvidia
version: "470.141.10"
6.6 安装 GPU Operator 并启用驱动 CRD
# 启用 NVIDIADriver CRD
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set driver.nvidiaDriverCRD.enabled=true
# 不安装默认 CR(自定义时使用)
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set driver.nvidiaDriverCRD.enabled=true \
--set driver.nvidiaDriverCRD.deployDefaultCR=false
6.7 驱动升级
通过修改 NVIDIADriver CR 的 version 字段触发滚动更新:
kubectl patch nvidiadriver/demo-silver --type='json' \
-p='[{"op": "replace", "path": "/spec/version", "value": "525.125.06"}]'
6.8 限制
- 仅推荐新集群使用,不支持从 ClusterPolicy 管理的驱动升级到 CRD 管理
- 不能同时使用 ClusterPolicy 和 NVIDIADriver CRD
7. 预编译驱动容器
7.1 概述
预编译驱动容器不需要互联网访问来下载 Linux 内核头文件、GCC 编译工具或操作系统包。同时也避免了传统驱动容器编译内核驱动时的计算需求突发。
适用场景:
- 网络受限环境
- 资源受限硬件
- 需要快速驱动部署
7.2 限制
- 仅支持 x86_64 架构
- 仅支持受支持列表中的操作系统版本
- 不支持 NVIDIA vGPU 或 GPUDirect Storage (GDS)
- NVIDIA 仅支持最新 LTSB 驱动分支的预编译驱动
7.3 预编译驱动命名规则
<驱动分支>-<Linux内核版本>-<OS标签>
例如:525-5.15.0-69-generic-ubuntu22.04
7.4 安装时启用预编译驱动
helm install --wait gpu-operator \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set driver.usePrecompiled=true \
--set driver.version="580"
7.5 安装后启用预编译驱动
kubectl patch clusterpolicies.nvidia.com/cluster-policy --type='json' \
-p='[
{"op":"replace", "path":"/spec/driver/usePrecompiled", "value":true},
{"op":"replace", "path":"/spec/driver/version", "value":"580"}
]'
7.6 构建自定义预编译驱动镜像
如果 NVIDIA 未提供您的内核变体的预编译驱动,可以自行构建:
# 克隆驱动容器仓库
git clone https://github.com/NVIDIA/gpu-driver-container.git
cd gpu-driver-container/ubuntu22.04/precompiled
# 设置环境变量
export PRIVATE_REGISTRY=<私有仓库地址>
export KERNEL_VERSION=5.15.0-1033-aws
export CUDA_VERSION=12.1.0
export DRIVER_BRANCH=525
export OS_TAG=ubuntu22.04
# 构建
sudo docker build \
--build-arg KERNEL_VERSION=$KERNEL_VERSION \
--build-arg CUDA_VERSION=$CUDA_VERSION \
--build-arg DRIVER_BRANCH=$DRIVER_BRANCH \
-t ${PRIVATE_REGISTRY}/driver:${DRIVER_BRANCH}-${KERNEL_VERSION}-${OS_TAG} .
# 推送到私有仓库
sudo docker push ${PRIVATE_REGISTRY}/driver:${DRIVER_BRANCH}-${KERNEL_VERSION}-${OS_TAG}
8. GPUDirect RDMA 与 GPUDirect Storage
8.1 概述
GPUDirect RDMA:允许 GPU 与第三方对等设备(如 NVIDIA ConnectX SmartNIC、BlueField DPU)通过 PCI Express 直接交换数据,无需 CPU 介入。
GPUDirect Storage (GDS):允许本地或远程存储(NFS、NVMe/NVMe-oF)与 GPU 内存之间的直接数据路径,通过 DMA 传输避免 CPU 弹跳缓冲区,提高带宽、降低延迟和 CPU 负载。
8.2 内核模式支持
| 方式 | 说明 |
|---|---|
| DMA-BUF(推荐) | Linux 内核原生支持,需要 Open Kernel Module 驱动 |
| nvidia-peermem(旧版) | NVIDIA 驱动中的内核模块,不需要 Open Kernel Module |
8.3 前提条件对比
| 条件 | DMA-BUF | 旧版 nvidia-peermem |
|---|---|---|
| GPU 驱动 | 需要 Open Kernel Module | 任何受支持驱动 |
| CUDA | 11.7+ | 无最低版本要求 |
| GPU | Turing 架构数据中心 GPU 及以上 | 所有数据中心/RTX GPU 及以上 |
| 网络驱动 | MLNX_OFED/DOCA-OFED 可选 | MLNX_OFED/DOCA-OFED 必需 |
| Linux 内核 | 5.12+ | 无最低版本要求 |
从 GPU Operator v25.3.0 起,
driver.kernelModuleType默认为auto,GPU Operator 会根据驱动分支和 GPU 设备自动选择推荐的内核模块类型。
8.4 安装 GPUDirect RDMA
# 使用 DMA-BUF + Network Operator 安装的驱动
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3
# 使用 DMA-BUF + 宿主机已安装的驱动
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set driver.rdma.useHostMofed=true
# 使用旧版 nvidia-peermem
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set driver.rdma.enabled=true
# R570 之前的驱动分支需指定 open 内核模块
# 添加: --set driver.kernelModuleType=open
8.5 验证 GPUDirect RDMA
# 确认驱动 DaemonSet 包含 mofed-validation init 容器
kubectl describe ds -n gpu-operator nvidia-driver-daemonset
# 确认 nvidia-peermem 内核模块已加载(仅旧版模式)
kubectl logs -n gpu-operator ds/nvidia-driver-daemonset -c nvidia-peermem-ctr
# 执行 RDMA 数据传输测试
# 1. 获取 InfiniBand 设备网络接口名
kubectl exec -it -n network-operator mofed-ubuntu22.04-ds-xxxxx -- ibdev2netdev
# 2. 创建 macvlan 网络
# 3. 启动两个测试 Pod 执行 ib_write_bw
# 4. 预期传输速率约 92 Gbps
8.6 安装 GPUDirect Storage
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set gds.enabled=true
# 旧版 nvidia-peermem 需额外添加
# --set driver.rdma.enabled=true
# R570 之前的驱动分支
# --set driver.kernelModuleType=open
8.7 验证 GPUDirect Storage
# 检查 nvidia-fs 内核模块是否加载
lsmod | grep nvidia
# 应看到 nvidia_fs, nvidia_peermem, nvidia_uvm 等模块
8.8 VMware vSphere 额外配置
在 vSphere 环境中需确保:
- 网卡和 GPU 在同一 PCIe IO 根复合体中
- 启用 PCI 选项:
pciPassthru.allowP2P = true、pciPassthru.RelaxACSforP2P = true、pciPassthru.use64bitMMIO = true、pciPassthru.64bitMMIOSizeGB = 128
9. Kata Containers 部署
9.1 概述
Kata Containers 是一个开源项目,创建轻量级虚拟机(VM),使其表现和性能类似传统容器。传统容器与宿主机共享内核,存在潜在安全风险;Kata 容器运行在独立 VM 中,具有独立的操作系统内核,通过硬件虚拟化提供更强的隔离。
9.2 Kata Containers 的优势
- 运行不可信工作负载:VM 提供防御层
- 限制硬件设备访问:VM 只能访问特定设备
- 透明部署:无需修改容器即可部署
9.3 限制
- GPU 直通场景下,节点上所有 GPU 必须分配给同一个 Kata VM,不支持部分分配
- 不支持 vGPU
- 仅支持 containerd 运行时
- 支持范围仅限本文档描述的实现
9.4 集群拓扑
9.5 前提条件
硬件和 BIOS:
- 启用硬件虚拟化和 ACS
- 启用 IOMMU(检查:
ls /sys/kernel/iommu_groups) - 确保宿主机未安装 NVIDIA GPU 驱动(
lsmod | grep nvidia应为空)
Kubernetes:
- 启用 Kubelet
KubeletPodResourcesGetfeature gate(Kubernetes v1.34+ 默认启用) - 增加 kubelet
runtimeRequestTimeout到 20 分钟
9.6 安装步骤
# 1. 标记节点
kubectl label node nvidia.com/gpu.workload.config=vm-passthrough
# 2. 安装 Kata Containers
export VERSION="3.29.0"
export CHART="oci://ghcr.io/kata-containers/kata-deploy-charts/kata-deploy"
helm install kata-deploy "${CHART}" \
--namespace kata-system --create-namespace \
--set nfd.enabled=false \
--wait --timeout 10m \
--version "${VERSION}"
# 3. 验证 runtime class
kubectl get runtimeclass | grep kata-qemu-nvidia-gpu
# 4. 安装 GPU Operator
helm install --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set sandboxWorkloads.enabled=true \
--set sandboxWorkloads.mode=kata \
--set nfd.enabled=true \
--set nfd.nodefeaturerules=true
# 5. 验证
kubectl get pods -n gpu-operator
# 应看到 nvidia-kata-sandbox-device-plugin 和 nvidia-vfio-manager
9.7 验证 VFIO
lspci -nnk -d 10de:
# "Kernel driver in use" 应为 vfio-pci
10. KubeVirt GPU 支持
10.1 概述
KubeVirt 是 Kubernetes 的虚拟机管理扩展,允许在 Kubernetes 集群中运行和管理虚拟机。GPU Operator 可以配置工作节点以支持 KubeVirt 运行 GPU 加速的虚拟机。
10.2 节点工作负载配置
10.3 约束与依赖
- 一个 GPU 工作节点只能运行一种类型的 GPU 工作负载(容器/直通VM/vGPU VM)
- GPU 加速虚拟机的工作节点须为裸金属
- GPU Operator 不会自动在 KubeVirt VM 内安装 NVIDIA 驱动
- 必须手动将 GPU/vGPU 资源添加到 KubeVirt CR 的
permittedDevices列表
10.4 前提条件
- BIOS 启用虚拟化和 IOMMU(
intel_iommu=on或amd_iommu=on) - 使用 vGPU 时,Ampere 及以上架构 GPU 需启用 SR-IOV
- 安装 KubeVirt
- KubeVirt v0.58.2+ 和 v0.59.1+ 需设置
DisableMDEVConfigurationfeature gate:
kubectl patch kubevirt -n kubevirt kubevirt --type='json' \
-p='[{"op": "add", "path": "/spec/configuration/developerConfiguration/featureGates/-", "value": "DisableMDEVConfiguration" }]'
10.5 安装 GPU Operator(KubeVirt)
# 不带 vGPU
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set sandboxWorkloads.enabled=true
# 带 vGPU
kubectl create namespace gpu-operator
kubectl create secret docker-registry ${REGISTRY_SECRET_NAME} \
--docker-server=${PRIVATE_REGISTRY} \
--docker-username=<用户名> --docker-password=<密码> \
-n gpu-operator
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v26.3.3 \
--set sandboxWorkloads.enabled=true \
--set vgpuManager.enabled=true \
--set vgpuManager.repository=<仓库> \
--set vgpuManager.image=vgpu-manager \
--set vgpuManager.version=<版本> \
--set vgpuManager.imagePullSecrets={${REGISTRY_SECRET_NAME}}
10.6 添加 GPU 资源到 KubeVirt CR
GPU 直通:
spec:
configuration:
developerConfiguration:
featureGates:
- GPU
- DisableMDEVConfiguration
permittedHostDevices:
pciHostDevices:
- externalResourceProvider: true
pciVendorSelector: "10DE:2236" # NVIDIA PCI 厂商:设备 ID
resourceName: nvidia.com/GA102GL_A10
vGPU:
spec:
configuration:
developerConfiguration:
featureGates:
- GPU
- DisableMDEVConfiguration
permittedHostDevices:
mediatedDevices:
- externalResourceProvider: true
mdevNameSelector: "NVIDIA A10-12Q"
resourceName: nvidia.com/NVIDIA_A10-12Q
10.7 创建带 GPU 的虚拟机
GPU 直通 VM:
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
spec:
domain:
devices:
gpus:
- deviceName: nvidia.com/GA102GL_A10
name: gpu1
vGPU VM:
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
spec:
domain:
devices:
gpus:
- deviceName: nvidia.com/NVIDIA_A10-12Q
name: gpu1
10.8 vGPU 设备配置
vGPU Device Manager 以声明方式定义 vGPU 设备配置,通过 ConfigMap 共享。默认配置会在所有 GPU 上创建 Q 系列 vGPU 设备(每个设备的帧缓冲为 GPU 总内存的一半)。
自定义配置示例:
version: v1
vgpu-configs:
custom-A10-config:
- devices: all
vgpu-devices:
"A10-4Q": 3
"A10-6Q": 2
按节点应用配置:
kubectl label node <node-name> --overwrite nvidia.com/vgpu.config=A10-4Q
11. 平台支持矩阵
11.1 支持的 NVIDIA 数据中心 GPU(x86)
GH 系列:
| 产品 | 架构 | 备注 |
|---|---|---|
| NVIDIA GH200 | Grace Hopper | 需要 Open Kernel Module 驱动 |
A/H/L 系列:
| 产品 | 架构 |
|---|---|
| NVIDIA H800 | Hopper |
| NVIDIA H200 / H200 NVL | Hopper |
| NVIDIA DGX H100 / HGX H100 | Hopper + NVSwitch |
| NVIDIA DGX H200 / HGX H200 | Hopper + NVSwitch |
| NVIDIA H100 / H100 NVL | Hopper |
| NVIDIA H20 | Hopper |
| NVIDIA L20 / L40 / L40S | Ada |
| NVIDIA L4 | Ada |
| NVIDIA DGX A100 / HGX A100 | A100 + NVSwitch |
| NVIDIA A800 / A100 / A100X | Ampere |
| NVIDIA A40 / A30 / A30X | Ampere |
| NVIDIA A16 / A10 / A2 | Ampere |
B 系列(Blackwell):
| 产品 | 架构 |
|---|---|
| NVIDIA DGX B300 / B200 | Blackwell |
| NVIDIA DGX Spark | Blackwell |
| NVIDIA HGX B200 / B300 | Blackwell |
| NVIDIA HGX GB200 NVL72 / NVL4 | Blackwell |
| NVIDIA HGX GB300 NVL72 | Blackwell |
| NVIDIA DGX Station | Blackwell |
HGX B200 需要驱动容器版本 570.133.20+。
11.2 支持的 ARM 平台
| 产品 | 架构 |
|---|---|
| NVIDIA A100X / A30X | Ampere |
| NVIDIA IGX Orin | Ampere |
| AWS EC2 G5g | Turing |
| NVIDIA DGX Spark / HGX GB200/GB300 | Blackwell |
仅支持离散 GPU,NVIDIA Jetson 等集成 GPU 不受支持。
11.3 支持的操作系统与 Kubernetes 版本
| 操作系统 | Kubernetes | OpenShift | VMware VKS | Rancher RKE2 | K3s | Mirantis k0s |
|---|---|---|---|---|---|---|
| Ubuntu 22.04 LTS | 1.32–1.36 | 1.32–1.36 | 1.32–1.36 | 1.32–1.36 | 1.32–1.36 | 1.33–1.35 |
| Ubuntu 24.04 LTS | 1.32–1.36 | 1.32–1.36 | 1.32–1.36 | 1.32–1.36 | — | 1.33–1.35 |
| Red Hat Core OS | — | 4.18–4.22 | — | — | — | — |
| RHEL 10.x | 1.32–1.36 | 1.32–1.36 | — | — | — | — |
| RHEL 9.x | 1.32–1.36 | 1.32–1.36 | — | — | — | — |
| RHEL 8.x | 1.32–1.36 | 1.32–1.36 | — | — | — | — |
11.4 支持的预编译驱动
| 操作系统 | 内核变体 | 内核版本 | CUDA 驱动分支 |
|---|---|---|---|
| Ubuntu 22.04 | Generic/NVIDIA/Azure/AWS/Oracle | 5.15 | R535, R570, R580 |
| Ubuntu 22.04 | Generic/NVIDIA/Azure/AWS/Oracle | 6.8 | R535, R570, R580 |
| Ubuntu 24.04 | Generic/NVIDIA/Azure/AWS/Oracle | 6.8 | R570, R580 |
11.5 支持的容器运行时
| 操作系统 | containerd 1.7–2.2 | CRI-O |
|---|---|---|
| Ubuntu 22.04 | ✅ | ✅ |
| Ubuntu 24.04 | ✅ | ✅ |
| RHCOS | ❌ | ✅ |
| RHEL 8 | ✅ | ✅ |
| RHEL 9 | ✅ | ✅ |
11.6 KubeVirt / OpenShift Virtualization 支持
| 操作系统 | Kubernetes | KubeVirt | OpenShift Virtualization | GPU 直通 | vGPU |
|---|---|---|---|---|---|
| Ubuntu 24.04 | 1.32–1.36 | 0.36+ | — | ✅ | ✅ |
| Ubuntu 22.04 | 1.32–1.36 | 0.36+ | 0.59.1+ | ✅ | ✅ |
| Red Hat Core OS | — | — | 4.18–4.22 | ✅ | ✅ |
vGPU 支持的设备:RTX Pro 6000 Blackwell SE、H200NVL、H100、A100/A40/A30/A16/A10/A2、L40/L4 等。
11.7 部署方式支持
- ✅ 裸金属
- ✅ GPU 直通虚拟机
- ✅ NVIDIA vGPU 虚拟机(vGPU 12.0+)
12. GPU 监控与遥测
12.1 DCGM Exporter
DCGM Exporter 基于 NVIDIA DCGM(Data Center GPU Manager)库,将 GPU 指标以 Prometheus 格式导出。
部署方式:GPU Operator 自动部署 DCGM Exporter DaemonSet。
关键指标:
| 指标 | 说明 |
|---|---|
DCGM_FI_DEV_GPU_UTIL |
GPU 计算利用率 |
DCGM_FI_DEV_MEM_COPY_UTIL |
内存带宽利用率 |
DCGM_FI_DEV_FB_FREE |
剩余帧缓冲内存 |
DCGM_FI_DEV_FB_USED |
已用帧缓冲内存 |
DCGM_FI_DEV_GPU_TEMP |
GPU 温度 |
DCGM_FI_DEV_POWER_USAGE |
功耗 |
DCGM_FI_DEV_SM_CLOCK |
SM 时钟频率 |
DCGM_FI_DEV_MEM_CLOCK |
内存时钟频率 |
13. 其他组件
13.1 NVIDIA Container Toolkit
NVIDIA Container Toolkit 是让容器能够访问 GPU 的核心组件。它通过修改容器的 OCI 规范来注入 GPU 设备节点、驱动库和环境变量。
核心功能:
- 自动配置容器运行时(containerd/CRI-O)
- 支持 CDI 设备注入
- 提供
nvidia-container-runtime和nvidia-cdi-hook
13.2 NVIDIA Kubernetes Device Plugin
Kubernetes Device Plugin 用于发现节点上的 GPU 资源,并向 Kubelet 广告这些资源,使 Pod 可以请求和分配 GPU。
功能:
- GPU 资源发现与注册
- 时间分片(Time-Slicing)配置
- MIG 设备管理
- CDI 设备分配
13.3 NVIDIA GPU Feature Discovery
GPU Feature Discovery 自动检测节点上的 GPU 特性(型号、驱动版本、CUDA 版本、MIG 能力等),并以节点标签的形式暴露给 Kubernetes 调度器。
13.4 NVIDIA Network Operator
Network Operator 管理 Kubernetes 集群中的网络设备,包括:
- MLNX_OFED / DOCA-OFED 网络驱动
- SR-IOV 网络设备插件
- Multus CNI 配置
- 与 GPU Operator 配合支持 GPUDirect RDMA
13.5 NVIDIA NIM Operator
NIM Operator 用于在 Kubernetes 中部署和管理 NVIDIA NIM(NVIDIA Inference Microservices)推理模型服务。
14. 故障排查
14.1 常用诊断命令
# 检查 GPU Operator 所有 Pod 状态
kubectl get pods -n gpu-operator
# 查看特定 Pod 日志
kubectl logs -n gpu-operator <pod-name>
# 查看 GPU Operator 控制器日志
kubectl logs -n gpu-operator deployment/gpu-operator
# 检查 ClusterPolicy 状态
kubectl get clusterpolicies.nvidia.com
# 查看 NVIDIADriver CR 状态
kubectl get nvidiadrivers
# 查看 Driver DaemonSet
kubectl get ds -n gpu-operator -l app.kubernetes.io/component=nvidia-driver
# 检查节点 GPU 资源
kubectl get node -o json | jq '.status.allocatable | with_entries(select(.key | startswith("nvidia.com/")))'
# 在节点上检查 GPU 驱动
nvidia-smi
# 检查内核模块
lsmod | grep nvidia
# 检查 CDI 设备
ls /var/run/cdi/
14.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
Driver Pod 处于 CrashLoopBackOff |
内核版本不兼容 | 检查驱动版本与内核版本匹配;使用预编译驱动 |
| GPU 资源未显示 | Device Plugin 未运行 | kubectl get pods -n gpu-operator -l app=nvidia-device-plugin-daemonset |
容器内 nvidia-smi 失败 |
Container Toolkit 配置错误 | 检查 /etc/containerd/config.toml 中 nvidia runtime 配置 |
| MIG Pod Pending | 驱动版本 Bug(570.x) | 升级驱动到 580.65.06+ |
| Kata VM GPU 不可用 | VFIO 绑定失败 | 检查 IOMMU 配置,确认宿主机无 NVIDIA 驱动 |
| RDMA 性能低 | MOFED 驱动未安装 | 安装 Network Operator 或宿主机 MOFED 驱动 |
| CDI 设备注入失败 | containerd 版本过低 | 升级到 containerd 1.7.30+ |
14.3 验证 GPU 工作负载
# 运行 GPU 测试 Pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-test
spec:
restartPolicy: OnFailure
containers:
- name: cuda
image: nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.7.1-ubuntu20.04
resources:
limits:
nvidia.com/gpu: 1
command: ["./nbody", "-gpu"]
EOF
# 查看输出
kubectl logs gpu-test
附录 A:快速安装参考
# === 最小安装 ===
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v26.3.3
# === 启用 CDI(v25.10+ 默认已启用) ===
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v26.3.3
# === 启用 GPUDirect RDMA ===
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v26.3.3 \
--set driver.rdma.enabled=true
# === 启用 GPUDirect Storage ===
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v26.3.3 \
--set gds.enabled=true
# === 启用 KubeVirt 沙箱 ===
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v26.3.3 \
--set sandboxWorkloads.enabled=true
# === 启用 Kata 容器 ===
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v26.3.3 \
--set sandboxWorkloads.enabled=true \
--set sandboxWorkloads.mode=kata
# === 使用驱动 CRD ===
helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v26.3.3 \
--set driver.nvidiaDriverCRD.enabled=true
附录 B:架构总览图
更多推荐


所有评论(0)