8.9. ホットプラグ対応のセカンダリーネットワークインターフェイス
仮想マシンを停止せずに、セカンダリーネットワークインターフェイスを追加または削除できます。OpenShift Virtualization は、ブリッジバインディングと VirtIO デバイスドライバーを使用するセカンダリーインターフェイスのホットプラグとホットアンプラグをサポートします。OpenShift Virtualization は、SR-IOV バインディングを使用するセカンダリーインターフェイスのホットプラグもサポートします。
ホットアンプラグは、Single Root I/O Virtualization (SR-IOV) インターフェイスではサポートされていません。
8.9.1. VirtIO の制限事項
各 VirtIO インターフェイスは、仮想マシン内の限られたペリフェラル接続インターフェイス (PCI) スロットの 1 つを使用します。合計 32 個のスロットが利用可能です。PCI スロットは他のデバイスでも使用され、事前に予約する必要があるため、オンデマンドでスロットを利用できない場合があります。OpenShift Virtualization は、ホットプラグインターフェイス用に最大 4 つのスロットを予約します。これには、接続されている既存のネットワークインターフェイスが含まれます。たとえば、仮想マシンにプラグインされた既存のインターフェイスが 2 つある場合は、さらに 2 つのネットワークインターフェイスをホットプラグできます。
ホットプラグに使用できる実際のスロット数もマシンのタイプによって異なります。たとえば、q35 マシンタイプのデフォルトの PCI トポロジーは、1 台の追加 PCIe デバイスのホットプラグをサポートしています。PCI トポロジーとホットプラグのサポートの詳細は、libvirt のドキュメント を参照してください。
インターフェイスをホットプラグした後に仮想マシンを再起動すると、そのインターフェイスは標準ネットワークインターフェイスの一部になります。
8.9.2. CLI を使用したセカンダリーネットワークインターフェイスのホットプラグ
仮想マシンの実行中に、セカンダリーネットワークインターフェイスを仮想マシンにホットプラグします。
前提条件
- ネットワークアタッチメント定義は、仮想マシンと同じ namespace で設定されます。
-
virtctl
ツールがインストールされている。 -
OpenShift CLI (
oc
) がインストールされている。
手順
ネットワークインターフェイスをホットプラグする仮想マシンが実行していない場合は、次のコマンドを使用して仮想マシンを起動します。
$ virtctl start <vm_name> -n <namespace>
次のコマンドを使用して、実行中の仮想マシンに新しいネットワークインターフェイスを追加します。仮想マシン仕様を編集すると、新しいネットワークインターフェイスが仮想マシンおよび仮想マシンインスタンス (VMI) 設定に追加されますが、実行中の仮想マシンには接続されません。
$ oc edit vm <vm_name>
仮想マシン設定の例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-fedora template: spec: domain: devices: interfaces: - name: defaultnetwork masquerade: {} # new interface - name: <secondary_nic> 1 bridge: {} networks: - name: defaultnetwork pod: {} # new network - name: <secondary_nic> 2 multus: networkName: <nad_name> 3 # ...
実行中の仮想マシンにネットワークインターフェイスを接続するには、次のコマンドを実行して仮想マシンのライブマイグレーションを行います。
$ virtctl migrate <vm_name>
検証
次のコマンドを使用して、仮想マシンのライブマイグレーションが成功したことを確認します。
$ oc get VirtualMachineInstanceMigration -w
出力例
NAME PHASE VMI kubevirt-migrate-vm-lj62q Scheduling vm-fedora kubevirt-migrate-vm-lj62q Scheduled vm-fedora kubevirt-migrate-vm-lj62q PreparingTarget vm-fedora kubevirt-migrate-vm-lj62q TargetReady vm-fedora kubevirt-migrate-vm-lj62q Running vm-fedora kubevirt-migrate-vm-lj62q Succeeded vm-fedora
VMI ステータスをチェックして、新しいインターフェイスが仮想マシンに追加されていることを確認します。
$ oc get vmi vm-fedora -ojsonpath="{ @.status.interfaces }"
出力例
[ { "infoSource": "domain, guest-agent", "interfaceName": "eth0", "ipAddress": "10.130.0.195", "ipAddresses": [ "10.130.0.195", "fd02:0:0:3::43c" ], "mac": "52:54:00:0e:ab:25", "name": "default", "queueCount": 1 }, { "infoSource": "domain, guest-agent, multus-status", "interfaceName": "eth1", "mac": "02:d8:b8:00:00:2a", "name": "bridge-interface", 1 "queueCount": 1 } ]
- 1
- ホットプラグされたインターフェイスが VMI ステータスに表示されます。
8.9.3. CLI を使用したセカンダリーネットワークインターフェイスのホットアンプラグ
実行中の仮想マシンから、セカンダリーネットワークインターフェイスを削除できます。
ホットアンプラグは、Single Root I/O Virtualization (SR-IOV) インターフェイスではサポートされていません。
前提条件
- 仮想マシンが実行している必要があります。
- 仮想マシンは、OpenShift Virtualization 4.14 以降を実行しているクラスター上に作成する必要があります。
- 仮想マシンにはブリッジネットワークインターフェイスが接続されている必要があります。
手順
仮想マシン仕様を編集して、セカンダリーネットワークインターフェイスをホットアンプラグします。インターフェイスの状態を
absent
に設定すると、ネットワークインターフェイスがゲストから切り離されますが、そのインターフェイスは Pod 内にまだ存在しています。$ oc edit vm <vm_name>
仮想マシン設定の例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-fedora template: spec: domain: devices: interfaces: - name: defaultnetwork masquerade: {} # set the interface state to absent - name: <secondary_nic> state: absent 1 bridge: {} networks: - name: defaultnetwork pod: {} - name: <secondary_nic> multus: networkName: <nad_name> # ...
- 1
- インターフェイスの状態を
absent
に設定して、実行中の仮想マシンから切り離します。仮想マシン仕様からインターフェイスの詳細を削除しても、セカンダリーネットワークインターフェイスはホットアンプラグされません。
仮想マシンを移行して、Pod からインターフェイスを削除します。
$ virtctl migrate <vm_name>