$ virtctl start <vm_name> -n <namespace>
您可以添加或删除辅助网络接口,而无需停止虚拟机 (VM)。OpenShift Virtualization 支持对使用桥接绑定和 VirtIO 设备驱动程序的辅助接口进行热插拔和热拔出。OpenShift Virtualization 还支持热插拔使用 SR-IOV 绑定的辅助接口。
不支持单根 I/O 虚拟化 (SR-IOV) 接口的热拔出。 |
每个 VirtIO 接口使用虚拟机中有限的周边连接接口 (PCI) 插槽中的一个。总共有 32 个可用插槽。PCI 插槽还被其他设备使用,并且必须预先保留,因此可能无法按需提供插槽。OpenShift Virtualization 为热插拔接口保留最多四个插槽。这包括任何已插入的现有网络接口。例如,如果您的虚拟机有两个已插入的现有接口,则可以热插拔两个更多网络接口。
可用于热插拔的插槽的实际数量也取决于机器类型。例如,q35 机器类型的默认 PCI 拓扑支持热插拔一个额外的 PCIe 设备。有关 PCI 拓扑和热插拔支持的更多信息,请参阅libvirt 文档。 |
如果在热插拔接口后重新启动虚拟机,该接口将成为标准网络接口的一部分。
在虚拟机 (VM) 运行时,将辅助网络接口热插拔到虚拟机 (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)
# ...
1 | 指定新网络接口的名称。 |
2 | 指定网络的名称。这必须与您在 template.spec.domain.devices.interfaces 列表中定义的新网络接口的 name 相同。 |
3 | 指定 NetworkAttachmentDefinition 对象的名称。 |
要将网络接口附加到正在运行的虚拟机,请通过运行以下命令实时迁移虚拟机
$ 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 状态中。 |
您可以从正在运行的虚拟机 (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>