10.8. 仮想マシンの SR-IOV ネットワークへの接続
Single Root I/O Virtualization (SR-IOV) デバイスを使用することで、仮想マシン (VM) を物理ネットワークに接続できます。
SR-IOV ネットワークを設定し、仮想マシンをそのネットワークに接続するには、次の手順を実行します。
- SR-IOV 物理ネットワークデバイスを設定します。
- 二次 SR-IOV ネットワークを定義する。
- 仮想マシンを SR-IOV ネットワークに接続します。
10.8.1. SR-IOV ネットワークデバイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV Network Operator は SriovNetworkNodePolicy.sriovnetwork.openshift.io カスタムリソース定義 (CRD) を OpenShift Container Platform に追加します。SR-IOV ネットワークデバイスは、SriovNetworkNodePolicy カスタムリソース (CR) を作成して設定できます。
SR-IOV Operator は、SriovNetworkNodePolicy CR で指定された設定を適用する際、ノードをドレインし、場合によってはノードを再起動することがあります。再起動は次の場合にのみ行われます。
-
Mellanox NIC (
mlx5ドライバー) の場合、Physical Function (PF) 上の Virtual Function (VF) の数が増加するたびにノードの再起動が行われます。 -
Intel NIC の場合、カーネルパラメーターに
intel_iommu=onとiommu=ptが含まれていない場合にのみ再起動が行われます。
設定の変更が適用されるまでに数分かかる場合があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 - SR-IOV Network Operator がインストールされている。
- drain (Pod の退避) が実行されたノードから退避されたワークロードを処理するために、クラスター内に利用可能な十分なノードがある。
- SR-IOV ネットワークデバイス設定にコントロールプレーンノードを選択していない。
手順
SriovNetworkNodePolicyオブジェクトを作成してから、YAML を<name>-sriov-node-network.yamlファイルに保存します。<name>をこの設定の名前に置き換えます。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: <name> namespace: openshift-sriov-network-operator spec: resourceName: <sriov_resource_name> nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" priority: <priority> mtu: <mtu> numVfs: <num> nicSelector: vendor: "<vendor_code>" deviceID: "<device_id>" pfNames: ["<pf_name>", ...] rootDevices: ["<pci_bus_id>", "..."] deviceType: vfio-pci isRdma: false-
metadata.name は、SriovNetworkNodePolicyオブジェクトの名前を定義します。 -
metadata.namespace は、SR-IOV Network Operator がインストールされている名前空間を定義します。 -
spec.resourceName は、SR-IOV デバイスプラグインのリソース名を定義します。1 つのリソース名に複数のSriovNetworkNodePolicyオブジェクトを作成できます。 -
spec.nodeSelector.feature.node.kubernetes.io/network-sriov.capable は、どのノードを設定するかを選択するためのノードセレクターを定義します。選択したノード上の SR-IOV ネットワークデバイスのみが設定されます。SR-IOV Container Network Interface (CNI) プラグインおよびデバイスプラグインは、選択したノードにのみデプロイされます。 -
spec.priorityは、0から99までの整数値を定義するオプションのフィールドです。数値が小さいほど優先度が高くなります。したがって、10は99よりも優先度が高くなります。デフォルト値は99です。 -
spec.mtuは、Virtual Function の最大伝送単位 (MTU) の値を定義するオプションのフィールドです。MTU の最大値は NIC モデルによって異なります。 -
spec.numVfs は、SR-IOV 物理ネットワークデバイス用に作成する Virtual Function (VF) の数を定義します。Intel ネットワークインターフェイスコントローラー (NIC) の場合、VF の数はデバイスがサポートする VF の合計よりも大きくすることはできません。Mellanox NIC の場合、VF の数は127よりも大きくすることはできません。 spec.nicSelector は、Operator が設定するイーサネットデバイスを定義します。すべてのパラメーターの値を指定する必要はありません。注記意図せずにイーサネットデバイスを選択する可能性を最低限に抑えるために、イーサネットアダプターを正確に特定できるようにすることが推奨されます。
rootDevicesを指定する場合は、vendor、deviceID、またはpfNamesの値も指定する必要があります。pfNamesとrootDevicesの両方を同時に指定する場合、それらが同一のデバイスをポイントすることを確認します。-
spec.nicSelector.vendorは、SR-IOV ネットワークデバイスのベンダーの 16 進コードを定義するオプションのフィールドです。許可される値は8086または15b3のいずれかのみになります。 -
spec.nicSelector.deviceIDは、SR-IOV ネットワークデバイスのデバイス 16 進コードを定義するオプションのフィールドです。許可される値は158b、1015、1017のみになります。 -
spec.nicSelector.pfNamesは、イーサネットデバイスの 1 つ以上の Physical Function (PF) 名の配列を定義するオプションのフィールドです。 -
spec.nicSelector.rootDevicesは、イーサネットデバイスの Physical Function に対応する 1 つ以上の PCI バスアドレスの配列を定義するオプションのフィールドです。以下の形式でアドレスを指定します:0000:02:00.1 -
spec.deviceType はドライバーの種類を定義します。OpenShift Virtualization の仮想機能には、vfio-pciドライバータイプが必要です。 spec.isRdmaは、リモートダイレクトメモリーアクセス (RDMA) モードを有効にするかどうかを定義するオプションフィールドです。Mellanox カードの場合、isRdmaをfalseに設定します。デフォルト値はfalseです。注記isRDMAフラグがtrueに設定される場合、引き続き RDMA 対応の VF を通常のネットワークデバイスとして使用できます。デバイスはどちらのモードでも使用できます。
-
-
オプション: SR-IOV 対応のクラスターノードにまだラベルが付いていない場合は、
SriovNetworkNodePolicy.Spec.NodeSelectorでラベルを付けます。ノードのラベル付けの詳細は、「ノードのラベルを更新する方法について」を参照してください。 SriovNetworkNodePolicyオブジェクトを作成します。以下のコマンドを実行する際は、<name> をこの設定の名前に置き換えてください。$ oc create -f <name>-sriov-node-network.yaml設定の更新が適用された後に、
sriov-network-operatornamespace のすべての Pod がRunningステータスに移行します。SR-IOV ネットワークデバイスが設定されていることを確認するには、以下のコマンドを実行します。
<node_name>を、設定したばかりの SR-IOV ネットワークデバイスを持つノードの名前に置き換えます。$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'