将 NVIDIA GPU 资源迁移到 RHCOS 工作节点
虚拟私有云
查看以下步骤,了解如何将 NVIDIA GPU 操作员资源从 RHEL 8 GPU 工作节点迁移到 RHCOS 工作节点。
NVIDIA GPU 运算器由以下资源组成:
gpu-feature-discoverynvidia-container-toolkit-daemonsetnvidia-cuda-validatornvidia-dcgmnvidia-dcgm-exporternvidia-device-plugin-daemonsetnvidia-driver-daemonsetnvidia-node-status-exporternvidia-operator-validator
人们感兴趣的主要成分是 nvidia-driver-daemonset。 该组件负责将 GPU 驱动程序安装到 GPU 工作节点中。 在针对 RHEL 8 和 RHCOS 工作节点时,这些驱动程序的安装方式不同。
NVIDIA GPU 操作员的官方声明:Kubernetes 集群中运行 GPU 工作负载的所有工作节点或节点组必须运行相同的操作系统版本,才能使用 NVIDIA GPU 驱动程序容器。 另外,如果在节点上预先安装 NVIDIA GPU 驱动程序,则可以运行不同的操作系统。 更多信息,请参阅 安装 NVIDIA GPU 操作员。
NVIDIA GPU 操作员无法同时管理不同工作节点操作系统上的驱动程序安装。 这一限制意味着,如果 GPU 驱动程序的安装完全由 NVIDIA GPU 操作员管理,那么在更换工作节点操作系统时,需要对驱动程序的安装进行全面迁移。
完成以下步骤,将 NVIDIA GPU 运算符驱动程序安装从 RHEL 8 迁移到 RHCOS 工作节点。 本示例具体描述了以下集群配置的迁移步骤:
初始环境详情
查看将 VPC 上带有 RHEL 8 工作节点的 Red Hat OpenShift on IBM Cloud 版本 4.17 迁移到带有 RHCOS 工作节点的 4.18 版本的详细信息和注意事项。
4.18 版本仅支持 RHCOS 和 RHEL 9。
开始之前,请确保群集满足以下要求。
- 4.17 VPC 集群,配备使用 NVIDIA GPU 的 RHEL 8 工作节点。
- NVIDIA GPU 运算符、ClusterPolicy, 和操作数都已安装,
Ready。
- 获取
nvidia-gpu-operator的详细信息。
示例输出oc get po -n nvidia-gpu-operator -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-ng7zn 1/1 Running 0 6m6s 172.23.145.152 10.240.0.15 <none> <none> gpu-operator-678b489684-7zgkq 1/1 Running 0 45h 172.23.145.135 10.240.0.15 <none> <none> nvidia-container-toolkit-daemonset-j4dzs 1/1 Running 0 6m6s 172.23.145.143 10.240.0.15 <none> <none> nvidia-cuda-validator-l44mz 0/1 Completed 0 2m28s 172.23.145.236 10.240.0.15 <none> <none> nvidia-dcgm-7sfvn 1/1 Running 0 6m7s 172.23.145.180 10.240.0.15 <none> <none> nvidia-dcgm-exporter-s5k48 1/1 Running 0 6m6s 172.23.145.172 10.240.0.15 <none> <none> nvidia-device-plugin-daemonset-xhds2 1/1 Running 0 6m6s 172.23.145.191 10.240.0.15 <none> <none> nvidia-driver-daemonset-mjqls 1/1 Running 0 7m1s 172.23.145.145 10.240.0.15 <none> <none> nvidia-node-status-exporter-5kvs4 1/1 Running 0 7m16s 172.23.145.235 10.240.0.15 <none> <none> nvidia-operator-validator-pz7wm 1/1 Running 0 6m7s 172.23.145.153 10.240.0.15 <none> <none> - 获取
gpu-cluster-policy的详细信息,并确保它是ready。
示例输出oc get clusterpolicies.nvidia.com gpu-cluster-policyNAME STATUS AGE gpu-cluster-policy ready 2025-03-07T03:07:00Z
第 1 步:更新群集主控程序
运行以下命令以更新主节点。
ibmcloud oc cluster master update --cluster <clusterNameOrID> --version 4.18_openshift
此时,不要将工人节点升级到 4.18。 目前,请将您的 RHEL 8 Worker 保留在 4.17 上。
第 2 步:创建 RHCOS 群集工作池
-
运行以下命令创建 RHCOS 工人池。
ibmcloud oc worker-pool create vpc-gen2 \ --cluster <clusterNameOrID> \ --name <workerPoolName> \ --flavor <workerNodeFlavor> \ --size-per-zone <sizePerZoneCount> \ --operating-system RHCOS
不要在 RHCOS 工人池中添加区域。 这个工人库里不应该有工人。
第 3 步:为 RHCOS 工人池添加工人池标签
在 RHCOS 工人池中添加以下标签。
nvidia.com/gpu.deploy.operands=false.如需了解更多信息,请参阅 阻止在某些节点上安装操作数nvidia.com/gpu.deploy.driver=false.如需了解更多信息,请参阅“防止在某些节点上安装 NVIDIA GPU 驱动程序”
将标签添加到工人池后,节点标签就可以在工人节点可用于集群之前存在。 这样可以确保 NVIDIA GPU 资源不会从一开始就被自动调度。 如果在无法安装驱动程序的工作节点上调度 NVIDA GPU 资源,则会降低 ClusterPolicy 资源的状态。 由于 NVIDIA GPU 操作员被配置为使用 RHEL 8 安装方法,因此还无法在 RHCOS 工作节点上安装驱动程序。
运行以下命令将标签添加到工人池中
ibmcloud oc worker-pool label set \
--cluster <clusterNameOrID> \
--worker-pool <workerPoolNameOrID> \
--label nvidia.com/gpu.deploy.operands=false \
--label nvidia.com/gpu.deploy.driver=false
第 4 步:向群集添加 RHCOS 工作节点
为群集增加容量,以便迁移工作负载。 将区添加到工作者池会触发工作者节点开始配置并加入群集。 请注意,NVIDIA GPU 资源尚未部署到 RHCOS 工作节点上。
ibmcloud oc zone add vpc-gen2 \
--cluster <clusterNameOrID> \
--worker-pool <workerPoolNameOrID> \
--subnet-id <vpcSubnetID> \
--zone <vpcZone>
此时,群集中的 RHCOS 工作节点可用,可以开始迁移。
第 5 步:将 RHEL 8 工作节点上的驱动程序安装程序更改为非托管型
在 RHEL 8 工作节点上添加 nvidia.com/gpu.deploy.driver=false 标签。 此标签会从 RHEL 8 Worker 中取消对现有驱动程序安装 pod 的调度。 驱动程序不能卸载。 其他操作数(包括设备插件)仍保留在 RHEL 8 工作人员中。 ClusterPolicy 状态保持就绪。 由于驱动程序仍在安装,设备插件仍在运行,因此 GPU 工作负载仍可正常工作。
-
将
nvidia.com/gpu.deploy.driver=false添加到 RHEL 8 工作节点。给单个工作节点贴标签
oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=false"标记整个工人池:
ibmcloud oc worker-pool label set \ --cluster <clusterNameOrID> \ --worker-pool <workerPoolNameOrID> \ --label nvidia.com/gpu.deploy.driver=false -
列出豆荚,确认标签。
oc get po -n nvidia-gpu-operator -o wide示例输出
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-ng7zn 1/1 Running 0 4h27m 172.23.145.152 10.240.0.15 <none> <none> gpu-operator-678b489684-7zgkq 1/1 Running 0 2d2h 172.23.145.135 10.240.0.15 <none> <none> nvidia-container-toolkit-daemonset-j4dzs 1/1 Running 0 4h27m 172.23.145.143 10.240.0.15 <none> <none> nvidia-cuda-validator-l44mz 0/1 Completed 0 4h24m 172.23.145.236 10.240.0.15 <none> <none> nvidia-dcgm-7sfvn 1/1 Running 0 4h27m 172.23.145.180 10.240.0.15 <none> <none> nvidia-dcgm-exporter-s5k48 1/1 Running 0 4h27m 172.23.145.172 10.240.0.15 <none> <none> nvidia-device-plugin-daemonset-xhds2 1/1 Running 0 4h27m 172.23.145.191 10.240.0.15 <none> <none> nvidia-driver-daemonset-mjqls 1/1 Terminating 0 4h28m 172.23.145.145 10.240.0.15 <none> <none> nvidia-node-status-exporter-5kvs4 1/1 Running 0 4h28m 172.23.145.235 10.240.0.15 <none> <none> nvidia-operator-validator-pz7wm 1/1 Running 0 4h27m 172.23.145.153 10.240.0.15 <none> <none> -
确认
gpu-cluster-policy是ready。oc get clusterpolicies.nvidia.com gpu-cluster-policy示例输出
NAME STATUS AGE gpu-cluster-policy ready 2025-03-07T03:07:00Z
第 6 步:为 RHCOS 工作节点安排驱动程序安装程序和其他操作数
将 nvidia.com/gpu.deploy.driver=true 和 nvidia.com/gpu.deploy.operands=true 添加到您的 RHCOS 工人中。
添加这些标签会尝试将驱动程序安装程序、设备插件和其他操作数调度到 RHCOS 工作节点。 由于驱动程序安装失败,大多数 pod 处于 init 状态。 驱动程序安装程序失败,因为它试图使用 RHEL 8 方法安装驱动程序。
运行 label nodes 命令添加标签。
给单个工作节点贴标签
oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=true"
oc label nodes <nodeName> "nvidia.com/gpu.deploy.operands=true"
标记整个工人池:
ibmcloud oc worker-pool label set \
--cluster <clusterNameOrID> \
--worker-pool <workerPoolNameOrID> \
--label nvidia.com/gpu.deploy.driver=true
添加标签后,继续下一步。
第 7 步:将驱动程序安装程序从 RHEL 8 转换为 RHCOS 安装方法
删除 nvidia-driver-installer DaemonSet。 DaemonSet 专为 RHEL 8 而设,已不再需要。 GPU 操作员对账并检测到集群中存在一个 RHCOS 工作节点。 GPU 操作员重新创建驱动程序安装程序 DaemonSet,,但现在使用的是基于 OpenShift Driver Toolkit 的 RHCOS 安装方法。
-
删除
nvidia-driver-installerDaemonSet。 删除 DaemonSet, 后,不要添加或重新加载任何 RHEL 8 GPU Worker。oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer -
列出 pod 并确认 GPU 驱动程序已安装在 RHCOS 工作节点上,其余操作数为
ready。oc get po -n nvidia-gpu-operator -o wide示例输出
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-h4bhx 1/1 Running 0 18m 172.23.137.119 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> gpu-feature-discovery-ng7zn 1/1 Running 0 4h58m 172.23.145.152 10.240.0.15 <none> <none> gpu-operator-678b489684-7zgkq 1/1 Running 0 2d2h 172.23.145.135 10.240.0.15 <none> <none> nvidia-container-toolkit-daemonset-79j86 1/1 Running 0 18m 172.23.137.115 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-container-toolkit-daemonset-j4dzs 1/1 Running 0 4h58m 172.23.145.143 10.240.0.15 <none> <none> nvidia-cuda-validator-l44mz 0/1 Completed 0 4h55m 172.23.145.236 10.240.0.15 <none> <none> nvidia-cuda-validator-xgscz 0/1 Completed 0 15m 172.23.137.121 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-dcgm-7sfvn 1/1 Running 0 4h58m 172.23.145.180 10.240.0.15 <none> <none> nvidia-dcgm-9rpnz 1/1 Running 0 18m 172.23.137.117 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-dcgm-exporter-s5k48 1/1 Running 0 4h58m 172.23.145.172 10.240.0.15 <none> <none> nvidia-dcgm-exporter-x8vlc 1/1 Running 2 (14m ago) 18m 172.23.137.116 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-device-plugin-daemonset-7g5hz 1/1 Running 0 18m 172.23.137.120 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-device-plugin-daemonset-xhds2 1/1 Running 0 4h58m 172.23.145.191 10.240.0.15 <none> <none> nvidia-driver-daemonset-416.94.202502260030-0-dkcmh 2/2 Running 0 19m 172.23.137.107 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-node-status-exporter-5kvs4 1/1 Running 0 5h 172.23.145.235 10.240.0.15 <none> <none> nvidia-node-status-exporter-94v9f 1/1 Running 0 19m 172.23.137.110 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-operator-validator-4wk6z 1/1 Running 0 18m 172.23.137.118 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-operator-validator-pz7wm 1/1 Running 0 4h58m 172.23.145.153 10.240.0.15 <none> <none> -
确认
gpu-cluster-policy已准备就绪。oc get clusterpolicies.nvidia.com gpu-cluster-policy示例输出
NAME STATUS AGE gpu-cluster-policy ready 2025-03-07T03:07:00Z -
描述您的节点并确认可分配的 GPU。
oc describe no示例输出
... Capacity: nvidia.com/gpu: 1 ... Allocatable: nvidia.com/gpu: 1
第 8 步:将依赖 GPU 的工作负载迁移到 RHCOS 工作节点上
现在,RHCOS GPU 工作节点已安装 GPU 驱动程序并可进行调度,请将依赖 GPU 的工作负载迁移到 RHCOS 工作节点。
-
通过封锁节点和删除单个 pod 来迁移每个 pod。
oc adm cordon no/<nodeName> oc delete po -n <namespace> <podName> -
通过排空节点,按 Node 进行迁移。 有关更多信息,请参阅 安全排空节点。
-
删除整个 RHEL 工人池,按工人池进行迁移。
ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>
第 9 步:从 RHCOS 工人池中删除标签
删除上一步中添加的工人池标签。 删除这些标签可确保之后配置的新 RHCOS 工作节点不会带有这些标签,并且 NVIDIA GPU 组件会自动安装。
第 10 步缩减或删除 RHEL 8 工人池
至此,NVIDIA GPU 驱动程序的迁移工作完成。 您可以缩减或删除 RHEL Worker 池。
ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>