Migração dos recursos de GPU do NVIDIA para os nós de trabalho do RHCOS

Nuvem Privada Virtual

Analise as etapas a seguir sobre como migrar seus recursos de operador de GPU NVIDIA dos nós de trabalho de GPU do RHEL 8 para os nós de trabalho do RHCOS.

O operador de GPU NVIDIA consiste nos seguintes recursos:

  • 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

O principal componente de interesse é nvidia-driver-daemonset. Esse componente é responsável por instalar o driver da GPU no nó de trabalho da GPU. Esses drivers são instalados de forma diferente quando o alvo são os nós de trabalho RHEL 8 e RHCOS.

Declaração oficial do operador de GPU NVIDIA: Todos os nós de trabalho ou grupos de nós para executar cargas de trabalho de GPU no cluster Kubernetes devem executar a mesma versão do sistema operacional para usar o contêiner do driver de GPU NVIDIA. Como alternativa, se você pré-instalar o driver de GPU NVIDIA nos nós, poderá executar sistemas operacionais diferentes. Para obter mais informações, consulte Instalação do operador de GPU NVIDIA.

O operador de GPU NVIDIA não é capaz de gerenciar simultaneamente instalações de driver em diferentes sistemas operacionais de nós de trabalho. Essa limitação significa que, se a instalação do driver da GPU for gerenciada exclusivamente pelo operador da GPU NVIDIA, será necessária uma migração completa da instalação do driver ao alterar os sistemas operacionais do nó de trabalho.

Conclua as etapas a seguir para migrar as instalações do driver do operador de GPU NVIDIA do RHEL 8 para os nós de trabalho do RHCOS. Este exemplo descreve especificamente as etapas de migração para a seguinte configuração de cluster:

Detalhes do ambiente inicial

Analise os detalhes e as observações para migrar uma versão Red Hat OpenShift on IBM Cloud 4.17 em VPC com nós de trabalho RHEL 8 para a versão 4.18 com nós de trabalho RHCOS.

A versão 4.18 é compatível apenas com o RHCOS e o RHEL 9.

Antes de começar, verifique se o cluster atende aos seguintes requisitos.

  • Um cluster VPC 4.17 com nós de trabalho RHEL 8 usando os sabores de GPU NVIDIA.
  • O operador NVIDIA GPU, ClusterPolicy, e os operandos estão todos instalados e Ready.
  1. Obtenha os detalhes do site nvidia-gpu-operator.
    oc get po -n nvidia-gpu-operator -o wide
    
    Exemplo de saída
    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. Obtenha os detalhes do site gpu-cluster-policy e certifique-se de que ele seja ready.
    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    
    Exemplo de saída
    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    

Etapa 1: Atualizar o mestre do cluster

Execute o comando a seguir para atualizar o servidor mestre.

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

Neste momento, não atualize os nós de trabalho para 4.18. Por enquanto, mantenha seus funcionários do RHEL 8 em 4.17.

Etapa 2: Criar um pool de trabalho de cluster do RHCOS

  1. Execute o seguinte comando para criar um pool de trabalho do RHCOS.

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

Não adicione zonas a esse pool de trabalhadores do RHCOS. Não deve haver trabalhadores nesse pool de trabalhadores.

Etapa 3: Adicionar rótulos de pool de trabalho ao pool de trabalho do RHCOS

Adicione os seguintes rótulos ao pool de trabalho do RHCOS.

A adição de rótulos ao pool de trabalho permite que os rótulos dos nós existam antes que os nós de trabalho estejam disponíveis para o cluster. Isso garante que os recursos da GPU NVIDIA não sejam agendados automaticamente desde o início. Se os recursos da GPU NVIDA forem agendados em nós de trabalho nos quais os drivers não podem ser instalados, isso degradará o status do recurso ClusterPolicy. Os drivers ainda não podem ser instalados nos nós de trabalho do RHCOS porque o operador de GPU do NVIDIA está configurado para usar o método de instalação do RHEL 8.

Execute o seguinte comando para adicionar rótulos ao seu pool de trabalho.

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

Etapa 4: Adicionar nós de trabalho do RHCOS ao cluster

Adicione capacidade ao seu cluster para permitir a migração da carga de trabalho. A adição de zonas ao pool de trabalho aciona os nós de trabalho para iniciar o provisionamento e ingressar no cluster. Observe que os recursos de GPU do NVIDIA ainda não foram implantados nos nós de trabalho do RHCOS.

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

Nesse momento, os nós de trabalho do RHCOS estão disponíveis no cluster para iniciar a migração.

Etapa 5: altere o instalador do driver nos nós de trabalho do RHEL 8 para não gerenciado

Adicione o rótulo nvidia.com/gpu.deploy.driver=false aos nós de trabalho do RHEL 8. Esse rótulo cancela o agendamento dos pods do instalador de driver existentes dos trabalhadores do RHEL 8. O driver não deve ser desinstalado. Outros operandos, incluindo plug-ins de dispositivos, permanecem nos trabalhadores do RHEL 8. O estado ClusterPolicy permanece pronto. Como o driver ainda está instalado e o plug-in do dispositivo está em execução, as cargas de trabalho da GPU continuam a funcionar.

  1. Adicione o nvidia.com/gpu.deploy.driver=false aos nós de trabalho do RHEL 8.

    Para nomear um nó de trabalho específico:

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

    Para rotular um pool de trabalho inteiro:

    ibmcloud oc worker-pool label set \
        --cluster <clusterNameOrID> \
        --worker-pool <workerPoolNameOrID> \
        --label nvidia.com/gpu.deploy.driver=false
    
  2. Liste os pods para confirmar os rótulos.

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

    Exemplo de saída

    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. Confirme se o endereço gpu-cluster-policy é ready.

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

    Exemplo de saída

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

Etapa 6: Agende o instalador do driver e outros operandos para os nós de trabalho do RHCOS

Adicione os endereços nvidia.com/gpu.deploy.driver=true e nvidia.com/gpu.deploy.operands=true aos seus funcionários RHCOS.

A adição desses rótulos tenta agendar o instalador do driver, o plug-in do dispositivo e outros operandos para os nós de trabalho do RHCOS. A maioria dos pods está no estado init devido à falha do instalador do driver. O instalador do driver está falhando porque está tentando instalar o driver usando o método RHEL 8.

Execute o comando label nodes para adicionar rótulos.

Para nomear um nó de trabalho específico:

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

Para rotular um pool de trabalho inteiro:

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

Depois de adicionar os rótulos, passe para a próxima etapa.

Etapa 7: Converter o instalador do driver do RHEL 8 para o método de instalação do RHCOS

Excluir nvidia-driver-installer DaemonSet. Esse DaemonSet é específico do RHEL 8 e não é mais necessário. O operador de GPU reconcilia e detecta que um nó de trabalho RHCOS está presente no cluster. O operador da GPU recria o instalador do driver DaemonSet,, mas agora com o método de instalação do RHCOS baseado no OpenShift Driver Toolkit.

  1. Excluir nvidia-driver-installer DaemonSet. Depois de excluir o site DaemonSet,, não adicione nem recarregue nenhum dos GPU workers do RHEL 8.

    oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer
    
  2. Liste os pods e confirme se o driver da GPU está instalado nos nós de trabalho do RHCOS e se os operandos restantes são ready.

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

    Exemplo de saída

    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. Confirme se o site gpu-cluster-policy está pronto.

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

    Exemplo de saída

    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    
  4. Descreva seus nós e confirme as GPUs alocáveis.

    oc describe no
    

    Exemplo de saída

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

Etapa 8: Migre as cargas de trabalho dependentes de GPU para os nós de trabalho do RHCOS

Agora que os nós de trabalho de GPU do RHCOS têm o driver de GPU instalado e estão prontos para agendamento, migre as cargas de trabalho dependentes de GPU para os nós de trabalho do RHCOS.

  • Migre por pod fazendo o cordoning do nó e excluindo pods individuais.

    oc adm cordon no/<nodeName>
    oc delete po -n <namespace> <podName>
    
  • Migrar por Node drenando os nós. Para obter mais informações, consulte Drenagem segura de um nó.

  • Migre por pool de trabalho, excluindo todo o pool de trabalho do RHEL.

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

Etapa 9: Remover rótulos do pool de trabalhadores do RHCOS

Remova os rótulos do pool de trabalho que você adicionou em uma etapa anterior. Essa remoção garante que os novos nós de trabalho do RHCOS provisionados posteriormente não tenham esses rótulos e que os componentes da GPU NVIDIA sejam instalados automaticamente.

Etapa 10: Reduzir a escala ou excluir o pool de workers do RHEL 8

Nesse ponto, a migração do driver de GPU NVIDIA está concluída. Você pode reduzir ou excluir os pools de trabalho do RHEL.

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