9.18.9.4. 仲介デバイスの作成および公開
管理者は、HyperConverged カスタムリソース (CR) を編集することで、仲介デバイスを作成し、クラスターに公開できます。CR を編集する前に、ワーカーノードを調べて、ハードウェアデバイス固有の設定値を確認してください。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - 入出力メモリー管理ユニット (IOMMU) ドライバーを有効にしました。
ハードウェアベンダーがドライバーを提供している場合は、仲介デバイスを作成するノードにドライバーをインストールしている。
- NVIDIA カードを使用する場合は、NVIDIA GRID ドライバーをインストールしている。
手順
ワーカーノードを調べて、仲介デバイスの名前セレクターとリソース名の値を特定します。
oc debugコマンドを使用して、ワーカーノードとのデバッグセッションを開始します。以下に例を示します。$ oc debug node/node-11.redhat.com次のコマンドを実行して、シェルプロセスのルートディレクトリーをホストノードのファイルシステムに変更します。
# chroot /hostmdev_busディレクトリーに移動してその内容を表示します。各サブディレクトリー名は、物理 GPU の PCI アドレスです。以下に例を示します。# cd sys/class/mdev_bus && ls出力例:
0000:4b:00.4物理デバイスのディレクトリーに移動し、ハードウェアベンダーによって定義されているサポート対象の仲介デバイスタイプをリスト表示します。以下に例を示します。
# cd 0000:4b:00.4 && ls mdev_supported_types出力例:
nvidia-742 nvidia-744 nvidia-746 nvidia-748 nvidia-750 nvidia-752 nvidia-743 nvidia-745 nvidia-747 nvidia-749 nvidia-751 nvidia-753使用する仲介デバイスタイプを選択し、
nameファイルの内容を表示してその名前セレクターの値を特定します。以下に例を示します。# cat nvidia-745/name出力例:
NVIDIA A2-2Q
以下のコマンドを実行して、デフォルトのエディターで
HyperConvergedCR を開きます。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv設定を更新して仲介デバイスを作成し、公開します。
spec.permittedHostDevices.mediatedDevicesスタンザにmdevNameSelectorおよびresourceName値を追加して、仲介デバイスをクラスターに公開します。resourceName値はmdevNameSelector値に基づいていますが、スペースの代わりにアンダースコアを使用します。HyperConvergedCR の例:apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: mediatedDevices: - mdevNameSelector: NVIDIA A2-2Q resourceName: nvidia.com/NVIDIA_A2-2Q externalResourceProvider: true - mdevNameSelector: NVIDIA A2-4Q resourceName: nvidia.com/NVIDIA_A2-4Q externalResourceProvider: true # ...各項目の説明:
mdevNameSelector- ホスト上でこの値にマッピングされる仲介デバイスを指定します。
resourceName- ノード上で割り当てられる、対応するリソース名を指定します。
externalResourceProvider- デバイスが NVIDIA GPU Operator などの外部プロバイダーによって管理されていることを指定します。
- 変更を保存し、エディターを終了します。
検証
次のコマンドを実行して、仮想 GPU がノードに割り当てられていることを確認します。
$ oc get node <node_name> -o json \ | jq '.status.allocatable \ | with_entries(select(.key | startswith("nvidia.com/"))) \ | with_entries(select(.value != "0"))'