Migrazione delle risorse GPU di NVIDIA ai nodi worker RHCOS

Cloud privato virtuale

Esaminare i seguenti passaggi su come migrare le risorse dell'operatore GPU di NVIDIA dai nodi worker GPU di RHEL 8 ai nodi worker di RHCOS.

L'operatore GPU NVIDIA è composto dalle seguenti risorse:

  • 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

Il componente principale di interesse è nvidia-driver-daemonset. Questo componente è responsabile dell'installazione del driver della GPU nel nodo worker GPU. Questi driver sono installati in modo diverso quando si utilizzano i nodi worker RHEL 8 rispetto a quelli RHCOS.

Dichiarazione ufficiale dell'operatore GPU di NVIDIA: Tutti i nodi worker o i gruppi di nodi che eseguono carichi di lavoro GPU nel cluster Kubernetes devono eseguire la stessa versione del sistema operativo per utilizzare il contenitore NVIDIA GPU Driver. In alternativa, se si preinstalla il driver per GPU NVIDIA sui nodi, è possibile eseguire sistemi operativi diversi. Per ulteriori informazioni, vedere Installazione dell'operatore GPU NVIDIA.

L'operatore GPU di NVIDIA non è in grado di gestire simultaneamente le installazioni dei driver su diversi sistemi operativi dei nodi worker. Questa limitazione significa che se l'installazione del driver della GPU è gestita esclusivamente dall'operatore della GPU di NVIDIA, è necessaria una migrazione completa dell'installazione del driver quando si cambia sistema operativo del nodo worker.

Completare i seguenti passaggi per migrare le installazioni dei driver dell'operatore GPU NVIDIA da RHEL 8 ai nodi worker RHCOS. Questo esempio descrive in dettaglio le fasi di migrazione per la seguente configurazione di cluster:

Dettagli dell'ambiente iniziale

Esaminare i dettagli e le note per la migrazione di una versione Red Hat OpenShift on IBM Cloud 4.17 su VPC con nodi worker RHEL 8 alla versione 4.18 con nodi worker RHCOS.

La versione 4.18 supporta solo RHCOS e RHEL 9.

Prima di iniziare, accertarsi che il cluster soddisfi i seguenti requisiti.

  • Un cluster VPC 4.17 con nodi worker RHEL 8 che utilizzano GPU flavor NVIDIA.
  • L'operatore GPU NVIDIA, ClusterPolicy, e gli operandi sono tutti installati e Ready.
  1. Ottieni i dettagli di nvidia-gpu-operator.
    oc get po -n nvidia-gpu-operator -o wide
    
    Output di esempio
    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. Ottenere i dettagli di gpu-cluster-policy e assicurarsi che sia ready.
    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    
    Output di esempio
    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    

Passo 1: Aggiornare il master del cluster

Esegui il seguente comando per aggiornare il master.

ibmcloud oc cluster master update --cluster <clusterNameOrID> --version 4.18_openshift

A questo punto, non aggiornare i nodi lavoratori a 4.18. Per ora, mantenete i lavoratori di RHEL 8 su 4.17.

Passo 2: Creare un pool di lavoratori del cluster RHCOS

  1. Eseguire il seguente comando per creare un pool di lavoratori RHCOS.

    ibmcloud oc worker-pool create vpc-gen2 \
        --cluster <clusterNameOrID> \
        --name <workerPoolName> \
        --flavor <workerNodeFlavor> \
        --size-per-zone <sizePerZoneCount> \
        --operating-system RHCOS
    

Non aggiungere zone a questo pool di lavoratori RHCOS. Non ci dovrebbero essere lavoratori in questo pool di lavoratori.

Passo 3: Aggiungere le etichette del pool di lavoratori al pool di lavoratori RHCOS

Aggiungere le seguenti etichette al pool di lavoratori RHCOS.

L'aggiunta di etichette al pool di lavoratori consente di avere le etichette dei nodi prima che i nodi lavoratori siano disponibili per il cluster. Questo assicura che le risorse GPU di NVIDIA non siano automaticamente pianificate dall'inizio. Se le risorse GPU NVIDA sono pianificate su nodi worker in cui non è possibile installare i driver, lo stato della risorsa ClusterPolicy si deteriora. I driver non possono ancora essere installati sui nodi worker RHCOS perché l'operatore GPU di NVIDIA è configurato per utilizzare il metodo di installazione di RHEL 8.

Eseguire il seguente comando per aggiungere etichette al pool di lavoratori.

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

Passo 4: Aggiungere i nodi worker RHCOS al cluster

Aggiungere capacità al cluster per consentire la migrazione del carico di lavoro. L'aggiunta di zone al pool di lavoratori attiva i nodi lavoratori per avviare il provisioning e unirsi al cluster. Si noti che le risorse GPU di NVIDIA non sono ancora distribuite sui nodi worker RHCOS.

ibmcloud oc zone add vpc-gen2 \
    --cluster <clusterNameOrID> \
    --worker-pool <workerPoolNameOrID> \
    --subnet-id <vpcSubnetID> \
    --zone <vpcZone>

A questo punto, i nodi worker RHCOS sono disponibili nel cluster per iniziare la migrazione.

Passo 5: Cambiare il programma di installazione dei driver sui nodi worker RHEL 8 in unmanaged

Aggiungere l'etichetta nvidia.com/gpu.deploy.driver=false ai nodi worker di RHEL 8. Questa etichetta annulla lo scheduling dei pod dell'installatore di driver esistenti dai lavoratori di RHEL 8. Il driver non deve essere disinstallato. Altri operandi, compresi i plug-in dei dispositivi, rimangono sui lavoratori di RHEL 8. Lo stato ClusterPolicy rimane pronto. Poiché il driver è ancora installato e il plug-in del dispositivo è in esecuzione, i carichi di lavoro della GPU continuano a funzionare.

  1. Aggiungere nvidia.com/gpu.deploy.driver=false ai nodi worker di RHEL 8.

    Per assegnare un'etichetta a un singolo nodo di lavoro:

    oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=false"
    

    Per etichettare un intero pool di lavoratori:

    ibmcloud oc worker-pool label set \
        --cluster <clusterNameOrID> \
        --worker-pool <workerPoolNameOrID> \
        --label nvidia.com/gpu.deploy.driver=false
    
  2. Elencare i baccelli per confermare le etichette.

    oc get po -n nvidia-gpu-operator -o wide
    

    Output di esempio

    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. Confermare che gpu-cluster-policy è ready.

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

    Output di esempio

    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    

Passo 6: Pianificare l'installatore di driver e altri comandi ai nodi worker RHCOS

Aggiungere i siti nvidia.com/gpu.deploy.driver=true e nvidia.com/gpu.deploy.operands=true ai lavoratori RHCOS.

L'aggiunta di queste etichette tenta di pianificare l'installatore del driver, il plug-in del dispositivo e altri operandi ai nodi worker RHCOS. La maggior parte dei pod si trova nello stato init a causa del fallimento dell'installazione del driver. Il programma di installazione del driver non riesce perché sta tentando di installare il driver utilizzando il metodo RHEL 8.

Eseguire il comando label nodes per aggiungere le etichette.

Per assegnare un'etichetta a un singolo nodo di lavoro:

oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=true"
oc label nodes <nodeName> "nvidia.com/gpu.deploy.operands=true"

Per etichettare un intero pool di lavoratori:

ibmcloud oc worker-pool label set \
    --cluster <clusterNameOrID> \
    --worker-pool <workerPoolNameOrID> \
    --label nvidia.com/gpu.deploy.driver=true

Dopo aver aggiunto le etichette, proseguire con il passaggio successivo.

Passo 7: Conversione del programma di installazione dei driver da RHEL 8 al metodo di installazione RHCOS

Cancellare nvidia-driver-installer DaemonSet. Questo DaemonSet è specifico di RHEL 8 e non è più necessario. L'operatore GPU riconcilia e rileva la presenza di un nodo worker RHCOS nel cluster. L'operatore GPU ricrea il programma di installazione dei driver DaemonSet, ma ora con il metodo di installazione RHCOS basato su OpenShift Driver Toolkit.

  1. Cancellare nvidia-driver-installer DaemonSet. Dopo aver cancellato DaemonSet,, non aggiungere o ricaricare nessuno dei GPU Worker di RHEL 8.

    oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer
    
  2. Elencare i pod e confermare che il driver GPU è installato sui nodi worker RHCOS e che gli operandi rimanenti sono ready.

    oc get po -n nvidia-gpu-operator -o wide
    

    Output di esempio

    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. Confermare che il sito gpu-cluster-policy è pronto.

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

    Output di esempio

    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    
  4. Descrivere i nodi e confermare le GPU allocabili.

    oc describe no
    

    Output di esempio

    ...
    Capacity:
    nvidia.com/gpu:     1
    ...
    Allocatable:
    nvidia.com/gpu:     1
    

Passo 8: Migrare i carichi di lavoro dipendenti dalla GPU ai nodi worker RHCOS

Ora che i nodi worker GPU RHCOS hanno installato il driver GPU e sono pronti per la schedulazione, migrare i carichi di lavoro dipendenti dalla GPU sui nodi worker RHCOS.

  • Migrare per pod cordonando il nodo ed eliminando i singoli pod.

    oc adm cordon no/<nodeName>
    oc delete po -n <namespace> <podName>
    
  • Migrare per Node drenando i nodi. Per ulteriori informazioni, vedere Drenaggio sicuro di un nodo.

  • Migrare per pool di lavoratori eliminando l'intero pool di lavoratori di RHEL.

    ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>
    

Passo 9: Rimuovere le etichette dal pool di lavoratori RHCOS

Rimuovere le etichette dei pool di lavoratori aggiunte in un passaggio precedente. Questa rimozione assicura che i nuovi nodi worker RHCOS forniti in seguito non abbiano queste etichette e che i componenti GPU di NVIDIA vengano installati automaticamente.

Passo 10: Ridurre o eliminare il pool di lavoratori di RHEL 8

A questo punto, la migrazione del driver della GPU NVIDIA è completa. È possibile ridurre o eliminare i pool di lavoratori RHEL.

ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>