《从裸机到 GPU 共享:一步一步在 Kubernetes 上部署 NVIDIA GPU Operator + KAI Scheduler》
NVIDIA GPU Operator 是 Kubernetes 生态中专为 GPU 资源而生的“自动化运维管家”。
一句话:你把裸机节点加进 K8s 集群,GPU Operator 会自动发现 GPU → 装驱动 → 装插件 → 做监控 → 提供高级功能,让 Pod 可以像申请 CPU/Mem 一样简单地申请 GPU,而不用再手动折腾驱动、runtime、Device Plugin 等一堆底层组件。
1️⃣ 为什么会出现 GPU Operator?
传统做法(无 Operator):
- 每台 GPU 节点
• 手工安装 nvidia-driver → 重启
• 手工安装 nvidia-docker / containerd runtime
• 手工部署 k8s-device-plugin DaemonSet
• 升级驱动/插件时又得逐台维护 - 节点多、驱动版本多、易出错、回滚难。
GPU Operator 把这一切容器化 + 声明式,用 CRD 描述“我要一张 A100”,剩下的事情它全自动完成。
2️⃣ 核心能力清单
功能 | 作用 | 具体实现 |
---|---|---|
自动驱动管理 | 免人工安装/升级驱动 | 通过 Driver DaemonSet 自动拉取并编译与内核匹配的 NVIDIA 驱动容器 |
Device Plugin | 把 GPU 注册成 nvidia.com/gpu 资源 | 部署 device-plugin DaemonSet |
Container Runtime | 让容器能用 GPU | 自动配置 nvidia-container-runtime 并注入到 containerd/docker |
MIG 管理 | 把 A100 划成最多 7 个小 GPU | 通过 CRD MigClusterPolicy 一键切分/合并 |
vGPU 支持 | 多租户共享一块物理 GPU | 自动部署 vGPU Manager & License Server 配置 |
GPU 时间分片 | 多个 Pod 轮流用 GPU | 通过 time-slicing ConfigMap 自动下发 |
GPUDirect RDMA / Storage | GPU 直接跨节点通信 & 访问存储 | 自动加载内核模块并配置 HugePage/环境变量 |
监控与告警 | GPU 利用率/温度/ECC | 自动跑 DCGM Exporter → Prometheus |
故障自愈 | 节点 GPU 掉线后自动重启组件 | 基于 Operator 的 reconcile loop |
3️⃣ 架构速览
┌------------------------------------------------------┐
│ GPU Operator Pod │
│ ┌-------------┐ ┌--------------┐ ┌------------┐ │
│ │ Driver │ │ Device Plugin│ │ MIG Manager│ │ 控制循环
│ └-------------┘ └--------------┘ └------------┘ │
└--------------------┬---------------------------------┘│ 监听 CRD
┌--------------------┴---------------------------------┐
│ Kubernetes 集群 │
│ - DaemonSet:每个 GPU 节点跑 Driver / Plugin │
│ - CRD:ClusterPolicy、MigClusterPolicy… │
│ - ServiceMonitor:GPU 指标 → Prometheus │
└------------------------------------------------------┘
4️⃣ 部署示例(一条命令)
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
helm install gpu-operator nvidia/gpu-operator -n gpu-operator --create-namespace
几分钟后:
kubectl get nodes -o jsonpath='{.items[*].status.allocatable.nvidia\.com/gpu}'
# 输出 1 1 2 … 表示已识别到 GPU
5️⃣ 场景举例
场景 | 传统做法 | GPU Operator 做法 |
---|---|---|
新节点上线 | ssh 装驱动、插件、重启 | 节点打上 nvidia.com/gpu.present=true ,Operator 自动拉起所有组件 |
升级驱动 | 逐台 ssh,版本对齐噩梦 | 改 Helm values 里 driver.version ,滚动更新即可 |
A100 切 MIG | 手动 nvidia-smi mig … | 创建 CRD MigClusterPolicy ,声明式切分 |
监控 | 自建脚本采集 | DCGM Exporter 自动暴露 Prometheus 指标 |
6️⃣ 一句话总结
NVIDIA GPU Operator = GPU 驱动 + Device Plugin + Runtime + 高级特性 + 监控 + 故障自愈
全部打包成 Kubernetes 原生对象,让你像管理普通容器一样管理 GPU 资源。