8.9. 热插二级网络接口
您可以在不停止虚拟机(VM)的情况下添加或删除二级网络接口。OpenShift Virtualization 支持热插使用 VirtIO 设备驱动程序的二级接口。
单根 I/O 虚拟化(SR-IOV) 接口不支持热拔。
8.9.1. virtio 限制
每个 VirtIO 接口使用虚拟机中的有限 Peripheral Connect Interface (PCI) 插槽之一。总共有 32 个插槽可用。PCIe 插槽也被其他设备使用,必须提前保留,因此插槽可能按需提供。OpenShift Virtualization 为热插接口保留最多四个插槽。这包括任何现有插入的网络接口。例如,如果您的虚拟机有两个现有的 plugged 接口,您可以热插两个网络接口。
可用于热插的实际插槽数量也取决于机器类型。例如,q35 机器类型的默认 PCI 拓扑支持热插一个额外的 PCIe 设备。有关 PCI 拓扑和热插支持的更多信息,请参阅 libvirt 文档。
如果在热插接口后重启虚拟机,则该接口就成为标准网络接口的一部分。
8.9.2. 使用 CLI 热插二级网络接口
在虚拟机运行时,热插到虚拟机(VM)的二级网络接口。
先决条件
- 网络附加定义与虚拟机相同的命名空间中配置。
-
已安装
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 热拔二级网络接口
您可以从正在运行的虚拟机(VM)中删除二级网络接口。
单根 I/O 虚拟化(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>