將 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 操作員管理,那麼在變更 Worker 節點作業系統時,就需要完全遷移驅動程式的安裝。
完成下列步驟,將 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 叢集,RHEL 8 工作節點使用 NVIDIA GPU 風味。
- 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 工作人員保留在 4.17.
步驟 2:建立 RHCOS 群組工作人員池
-
執行下列指令以建立 RHCOS Worker pool。
ibmcloud oc worker-pool create vpc-gen2 \ --cluster <clusterNameOrID> \ --name <workerPoolName> \ --flavor <workerNodeFlavor> \ --size-per-zone <sizePerZoneCount> \ --operating-system RHCOS
不要將區域新增至此 RHCOS 工作者池。 這個工人池中不應該有任何工人。
步驟 3:將工作人員池標籤新增至 RHCOS 工作人員池
將下列標籤新增至 RHCOS Worker 池。
nvidia.com/gpu.deploy.operands=false.如需詳細資訊,請參閱 防止在某些節點上安裝操作指令nvidia.com/gpu.deploy.driver=false.如需詳細資訊,請參閱 防止在某些節點上安裝 NVIDIA GPU 驅動程式
將標籤新增至 Worker pool 可讓節點標籤在 Worker 節點可用於群集之前就已存在。 這可確保 NVIDIA GPU 資源不會從一開始就自動排程。 如果在無法安裝驅動程式的工作節點上排程 NVIDA GPU 資源,將會降低 ClusterPolicy 資源的狀態。 驅動程式尚未能安裝在 RHCOS 工作節點上,因為 NVIDIA GPU 操作員設定為使用 RHEL 8 安裝方法。
執行以下指令,將標籤新增至工作人員池。
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 工作節點加入群集
增加群集容量,以允許工作負載遷移。 將區域新增至 Worker pool 會觸發 Worker 節點開始佈建並加入群集。 請注意,NVIDIA GPU 資源尚未部署在 RHCOS 工作節點上。
ibmcloud oc zone add vpc-gen2 \
--cluster <clusterNameOrID> \
--worker-pool <workerPoolNameOrID> \
--subnet-id <vpcSubnetID> \
--zone <vpcZone>
此時,群集中的 RHCOS 工作節點已可用於開始遷移。
步驟 5:將 RHEL 8 工作節點上的驅動程式安裝程式變更為非受管理
將 nvidia.com/gpu.deploy.driver=false 標籤新增至 RHEL 8 工作節點。 此標籤會從 RHEL 8 Workers 中取消排程現有的驅動程式安裝 pod。 驅動程式不可卸載。 其他操作員 (包括裝置外掛程式) 則保留在 RHEL 8 Worker 上。 ClusterPolicy 狀態保持就緒。 由於驅動程式仍已安裝且裝置外掛程式仍在執行,因此 GPU 工作負載仍可繼續運作。
-
將
nvidia.com/gpu.deploy.driver=false加入 RHEL 8 工作節點。要標記個別 Worker 節點:
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 -
列出 pod 以確認標籤。
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 指令新增標籤。
要標記個別 Worker 節點:
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 Worker 池中移除標籤
移除您在前一步中新增的 Worker pool 標籤。 此移除動作可確保之後配置的新 RHCOS 工作節點不會有這些標籤,而且 NVIDIA GPU 元件會自動安裝。
步驟 10:縮小或刪除 RHEL 8 Worker 池
至此,NVIDIA GPU 驅動程式的遷移完成。 您可以縮小或刪除 RHEL Worker 池。
ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>