在 KubeVirt 中使用 GPU Operator

在 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=onamd_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 的高层次工作流程如下:

  1. 确保已设置禁用中介设备配置的功能门控。

  2. 根据将要运行的 GPU 工作负载类型为工作节点打标签。

  3. 安装 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 指定以下值:containervm-passthroughvm-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<

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值