9.15.11.5. 仲介されたデバイスの管理
仲介されたデバイスを仮想マシンに割り当てる前に、デバイスを作成してクラスターに公開する必要があります。仲介されたデバイスを再設定および削除することもできます。
9.15.11.5.1. 仲介デバイスの作成および公開 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、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.mediatedDevicesConfigurationスタンザに仲介デバイスを追加して作成します。 spec.permittedHostDevices.mediatedDevicesスタンザにmdevNameSelectorおよびresourceName値を追加して、仲介デバイスをクラスターに公開します。resourceName値はmdevNameSelector値に基づいていますが、スペースの代わりにアンダースコアを使用します。HyperConvergedCR の例:apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: mediatedDevicesConfiguration: mediatedDeviceTypes: - nvidia-745 nodeMediatedDeviceTypes: - mediatedDeviceTypes: - nvidia-746 nodeSelector: kubernetes.io/hostname: node-11.redhat.com permittedHostDevices: mediatedDevices: - mdevNameSelector: NVIDIA A2-2Q resourceName: nvidia.com/NVIDIA_A2-2Q - mdevNameSelector: NVIDIA A2-4Q resourceName: nvidia.com/NVIDIA_A2-4Q # ...各項目の説明:
mediatedDeviceTypes- クラスターのグローバル設定を指定します。これは必須です。
nodeMediatedDeviceTypes-
特定のノードまたはノードのグループに対するグローバル設定のオーバーライドを指定します (任意)。グローバルの
mediatedDeviceTypes設定と併用する必要があります。 mediatedDeviceTypes-
指定されたノードに対するグローバル
mediatedDeviceTypes設定のオーバーライドを指定します。nodeMediatedDeviceTypesを使用する場合に必須です。 nodeSelector-
ノードセレクターを指定し、
key:valueペアを含める必要があります。nodeMediatedDeviceTypesを使用する場合に必須です。 mdevNameSelector- ホスト上でこの値にマッピングされる仲介デバイスを指定します。
resourceName- ノード上で割り当てられる、対応するリソース名を指定します。
-
- 変更を保存し、エディターを終了します。
検証
次のコマンドを実行して、仮想 GPU がノードに割り当てられていることを確認します。
$ oc get node <node_name> -o json \ | jq '.status.allocatable \ | with_entries(select(.key | startswith("nvidia.com/"))) \ | with_entries(select(.value != "0"))'