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 オペレーターからの公式声明 : NVIDIA GPU Driver コンテナを使用するには、 Kubernetes クラスタ内で GPU ワークロードを実行するすべてのワーカーノードまたはノードグループが同じオペレーティングシステムバージョンを実行している必要があります。 あるいは、 NVIDIA GPU Driverをノードにプリインストールすれば、異なるオペレーティング・システムを実行することができます。 詳細については、 NVIDIA GPU オペレータのインストールを参照してください。

NVIDIA GPUオペレータは、異なるワーカー・ノードのオペレーティング・システム上のドライバのインストールを同時に管理することはできません。 この制限は、GPUドライバのインストールが NVIDIA GPUオペレータによってのみ管理されている場合、ワーカーノードのオペレーティングシステムを変更するときに、ドライバのインストールの完全な移行が必要であることを意味します。

NVIDIA GPU オペレータ・ドライバのインストールを RHEL 8 から RHCOS ワーカー・ノードに移行するには、以下の手順を実行します。 この例では、具体的には以下のクラスタ構成における移行手順について説明します:

初期環境の詳細

RHEL 8 ワーカーノードを持つ VPC 上の Red Hat OpenShift on IBM Cloud バージョン 4.17 を、RHCOS ワーカーノードを持つバージョン 4.18 に移行する詳細と注意事項を確認してください。

バージョン 4.18、RHCOSとRHEL 9のみをサポートしています。

作業を始める前に、クラスタが以下の要件を満たしていることを確認してください。

  • NVIDIA GPUフレーバーを使用するRHEL 8ワーカーノードによる 4.17 VPCクラスタ。
  • 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ワーカー・プールを作成する。

    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 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 ワーカーノードのドライバーインストーラーをアンマネージドに変更する

nvidia.com/gpu.deploy.driver=false ラベルを RHEL 8 ワーカーノードに追加します。 このラベルは、RHEL 8 ワーカーから既存のドライバーインストーラーポッドのスケジューリングを解除する。 ドライバーはアンインストールされない。 デバイスプラグインを含む他のオペランドは、RHEL 8のワーカーに残っている。 ClusterPolicy の状態は準備完了のままである。 ドライバはインストールされたままであり、デバイスプラグインも実行されているため、GPUワークロードは機能し続けます。

  1. 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
    
  2. ポッドをリストアップしてラベルを確認する。

    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ワーカーノードにスケ ジュールしようとする。 ドライバーのインストーラーが失敗したため、ほとんどのポッドが 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 インストール方法を使用します。

  1. 削除 nvidia-driver-installer DaemonSet. DaemonSet, を削除した後は、RHEL 8 GPU ワーカーを追加したり再ロードしたりしないでください。

    oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer
    
  2. ポッドをリストアップし、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ワーカーノードに移行します。

  • ノードをコード化し、個々のポッドを削除することで、ポッドごとに移行する。

    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ワーカープールを縮小したり、削除したりすることができます。

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