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 オペレーターからの公式声明 : 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。
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ワーカー・プールを作成する。
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.com/gpu.deploy.operands=false.詳細については、「 一部のノードへのオペランドのインストールを防ぐ 」を参照してくださいnvidia.com/gpu.deploy.driver=false.詳細については、 NVIDIA GPU ドライバの一部のノードへのインストールを防止するを参照してください
ワーカープールにラベルを追加することで、ワーカーノードがクラスタ化する前にノードラベルが存在するようになります。 これにより、 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ワークロードは機能し続けます。
-
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 -
ポッドをリストアップしてラベルを確認する。
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ワーカーノードにスケ ジュールしようとする。 ドライバーのインストーラーが失敗したため、ほとんどのポッドが 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 インストール方法を使用します。
-
削除
nvidia-driver-installerDaemonSet. DaemonSet, を削除した後は、RHEL 8 GPU ワーカーを追加したり再ロードしたりしないでください。oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer -
ポッドをリストアップし、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ワーカーノードに移行します。
-
ノードをコード化し、個々のポッドを削除することで、ポッドごとに移行する。
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>