將 NVIDIA GPU 資源遷移至 RHCOS 工作節點

虛擬私有雲

檢閱下列關於如何將 NVIDIA GPU 操作員資源從 RHEL 8 GPU 工作者節點遷移至 RHCOS 工作者節點的步驟。

NVIDIA GPU 操作員由以下資源組成:

  • gpu-feature-discovery
  • nvidia-container-toolkit-daemonset
  • nvidia-cuda-validator
  • nvidia-dcgm
  • nvidia-dcgm-exporter
  • nvidia-device-plugin-daemonset
  • nvidia-driver-daemonset
  • nvidia-node-status-exporter
  • nvidia-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
  1. 取得 nvidia-gpu-operator 的詳細資訊。
    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          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>
    
  2. 取得 gpu-cluster-policy 的詳細資訊,並確認其為 ready
    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    
    輸出範例
    NAME                 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 群組工作人員池

  1. 執行下列指令以建立 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 池。

將標籤新增至 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 工作負載仍可繼續運作。

  1. 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
    
  2. 列出 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>
    
  3. 確認 gpu-cluster-policyready

    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=truenvidia.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 安裝方法。

  1. 刪除 nvidia-driver-installer DaemonSet。 刪除 DaemonSet, 之後,請勿新增或重新載入任何 RHEL 8 GPU Worker。

    oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer
    
  2. 列出 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>
    
  3. 確認 gpu-cluster-policy 已準備就緒。

    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    

    輸出範例

    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    
  4. 描述您的節點並確認可分配的 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>