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)。

流程

  1. 如果要热插网络接口的虚拟机没有运行,请使用以下命令启动它:

    $ virtctl start <vm_name> -n <namespace>
  2. 使用以下命令,将新的网络接口添加到正在运行的虚拟机中。编辑虚拟机规格向虚拟机和虚拟机实例(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 列表中定义的新网络接口的名称相同。
    3
    指定 NetworkAttachmentDefinition 对象的名称。
  3. 要将网络接口附加到正在运行的虚拟机中,请运行以下命令来实时迁移虚拟机:

    $ virtctl migrate <vm_name>

验证

  1. 使用以下命令验证虚拟机实时迁移是否成功:

    $ 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

  2. 通过检查 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 或更高版本的集群中创建。
  • 虚拟机必须附加了一个桥接网络接口。

流程

  1. 编辑虚拟机规格以热拔二级网络接口。将接口状态设置为 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,将其从正在运行的虚拟机中分离。从虚拟机规格中删除接口详情不会热拔二级网络接口。
  2. 通过迁移虚拟机从 pod 中删除接口:

    $ virtctl migrate <vm_name>

8.9.4. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.