在 KubeVirt 中使用 GPU Operator
基于最新的GPU Operator版本24.9.0。
原文链接:GPU Operator with KubeVirt — NVIDIA GPU Operator 24.9.0 documentation
1. 简介
KubeVirt 是 Kubernetes 的一个虚拟机管理插件,允许您在 Kubernetes 集群中运行和管理虚拟机。它消除了为虚拟机和容器工作负载管理独立集群的需求,二者现在可以在单一 Kubernetes 集群中共存。
在此之前,GPU Operator 仅支持为运行 GPU 加速的容器配置工作节点。现在,GPU Operator 也可以用于为运行 GPU 加速的虚拟机配置工作节点。
运行带有 GPU 的容器和虚拟机所需的前提条件不同,主要区别在于所需的驱动程序。例如,数据中心驱动程序用于容器,vfio-pci 驱动程序用于 GPU 直通,而 NVIDIA vGPU Manager 用于创建 vGPU 设备。
现在可以将 GPU Operator 配置为根据节点上配置的 GPU 工作负载来部署不同的软件组件。以下示例展示了这一点。
- 节点 A 被配置为运行容器。
- 节点 B 被配置为运行具有直通 GPU 的虚拟机。
- 节点 C 被配置为运行具有 vGPU 的虚拟机。
节点 A 配置的软件组件:
- NVIDIA 数据中心驱动程序:用于安装驱动程序。
- NVIDIA 容器工具包:确保容器可以正确访问 GPU。
- NVIDIA Kubernetes 设备插件:用于发现 GPU 资源并将其发布给 kubelet。
- NVIDIA DCGM 和 DCGM Exporter:用于监控 GPU。
节点 B 配置的软件组件:
- VFIO 管理器:用于加载 vfio-pci 并将其绑定到节点上的所有 GPU。
- 沙盒设备插件:用于发现 GPU 直通资源并将其发布给 kubelet。
节点 C 配置的软件组件:
- NVIDIA vGPU 管理器:用于安装驱动程序。
- NVIDIA vGPU 设备管理器:用于在节点上创建 vGPU 设备。
- 沙盒设备插件:用于发现 vGPU 设备并将其发布给 kubelet。
2. 假设、约束和依赖项
- 一个 GPU 工作节点可以运行特定类型的 GPU 工作负载——容器、具有 GPU 直通的虚拟机或具有 vGPU 的虚拟机——但不能混合运行这些类型的工作负载。
- 集群管理员或开发者需提前了解集群的需求,并正确地为节点贴上标签,以指示其将运行的 GPU 工作负载类型。
- 运行 GPU 加速虚拟机(使用 pGPU 或 vGPU)的工作节点假定为裸机。
- GPU Operator 不会自动在附带 GPU/vGPU 的 KubeVirt 虚拟机中安装 NVIDIA 驱动。
- 用户在将 GPU 直通和 vGPU 资源分配给 KubeVirt 虚拟机之前,必须手动将所有 GPU 直通和 vGPU 资源添加到 KubeVirt CR 中的
permittedDevices列表中。有关更多信息,请参阅 KubeVirt 文档。 - 不支持基于 MIG 的 vGPU。
3. 先决条件
- 在 BIOS 中启用虚拟化和 IOMMU 扩展(Intel VT-d 或 AMD IOMMU)。
- 主机以
intel_iommu=on或amd_iommu=on启动内核。 - 如果计划使用 NVIDIA vGPU,并且 GPU 基于 NVIDIA Ampere 架构或更新架构,则必须在 BIOS 中启用 SR-IOV。请参考 NVIDIA vGPU 文档,确保满足使用 NVIDIA vGPU 的所有先决条件。
- KubeVirt 已安装在集群中。
- 从 KubeVirt v0.58.2 和 v0.59.1 开始,需设置
DisableMDEVConfiguration功能门控:
kubectl patch kubevirt -n kubevirt kubevirt --type='json' \
-p='[{"op": "add", "path": "/spec/configuration/developerConfiguration/featureGates/-", "value": "DisableMDEVConfiguration" }]'
示例输出
kubevirt.kubevirt.io/kubevirt patched
4. 入门指南
使用 GPU Operator 和 KubeVirt 的高层次工作流程如下:
-
确保已设置禁用中介设备配置的功能门控。
-
根据将要运行的 GPU 工作负载类型为工作节点打标签。
-
安装 GPU Operator 并设置
sandboxWorkloads.enabled=true。
如果使用 NVIDIA vGPU,还需要执行其他步骤,这将在后续部分中介绍。
5. 为工作节点打标签
使用以下命令为工作节点添加标签:
kubectl label node <node-name> --overwrite nvidia.com/gpu.workload.config=vm-vgpu
可以为标签 nvidia.com/gpu.workload.config 指定以下值:container、vm-passthrough 和 vm-vgpu。GPU Operator 使用该标签的值来确定在每个工作节点上部署哪些操作对象。
如果节点上不存在 nvidia.com/gpu.workload.config 标签,GPU Operator 将假定默认的 GPU 工作负载配置为 container,并部署支持该类型负载所需的软件组件。要覆盖默认的 GPU 工作负载配置,可在 ClusterPolicy 中设置以下值:sandboxWorkloads.defaultWorkload=<config>。
6. 安装 GPU Operator
根据是否计划使用 NVIDIA vGPU,选择以下适当的小节以安装 GPU Operator。
通常,ClusterPolicy 中的 sandboxWorkloads.enabled 标志控制 GPU Operator 是否可以为虚拟机工作负载(以及容器工作负载)配置 GPU 工作节点。默认情况下,此标志是禁用的,这意味着所有节点将使用相同的软件配置以支持容器工作负载,并且不会使用 nvidia.com/gpu.workload.config<

最低0.47元/天 解锁文章
2281

被折叠的 条评论
为什么被折叠?



