可以将端口配置为允许 SR-IOV 直通,然后创建使用物理网络适配器的 OpenStack 实例。

如果要使用不同的 SR-IOV 物理网卡创建多个端口为虚拟机提供网络冗余,请执行以下过程中的可选步骤。

前提条件

  • vSphere 中启用 SR-IOV。请参见《vSphere 网络连接》中的在主机物理适配器上启用 SR-IOV
  • 为 SR-IOV 设备创建专用计算集群。DRS 规则不适用于这些设备。
  • 要保留物理设备的 MAC 地址,请将其集群添加为计算节点,然后在设备上启用直通。如果已启用直通,可以将其禁用,重新启动集群,然后重新启用直接直通。
  • 启用 VMware Integrated OpenStack 运营商版本 功能。请参见启用 Carrier Edition 功能

过程

  1. root 用户身份登录到 Integrated OpenStack Manager
    ssh root@mgmt-server-ip
  2. 编辑 Nova 计算配置。
    viocli update nova-compute
  3. nova_compute 部分中添加以下信息。
    pci:
      passthrough_whitelist:
        type: multistring
        values:
        - '{"product_id": "*", "vendor_id": "*", "physical_network": "*"}'
    
  4. 如果使用 DVS 或 NSX-T Data Center 部署,请在 vmware 部分中添加 dvs_moid 参数。
    dvs_moid: sriov-vds-moid
    dvs_moid 的值设置为分布式交换机(与 SR-IOV 设备的计算集群关联)的受管对象标识符 (MOID)。
  5. 打开工具箱并设置 admin 帐户的密码。
    toolbox
    export OS_PASSWORD=admin-password
  6. (可选) 如果要配置端口冗余,请创建具有隔离属性的虚拟机特定实例。
    隔离属性确保 SR-IOV 端口按照端口冗余的要求分布在 ESXi 服务器主机中的不同物理网卡。
    openstack flavor set <FLAVOR_ID> --property group_policy=isolate
    FLAVOR_ID 是要用于具有隔离 SR-IOV 端口的虚拟机的 Nova 特定实例的 UUID。
  7. 为 SR-IOV 设备创建提供商网络。
    • 对于 NSX Data Center for vSphere 部署,请创建 VLAN 或端口组网络。
    • 对于 NSX-T Data Center 部署,请创建 VLAN 或含糊网络。
    • 对于 DVS 部署,请创建 VLAN 网络。
    neutron net-create network-name --tenant-id project-uuid --provider:network_type {vlan | portgroup | nsx-net} --provider:physical_network physical-id [--provider:segmentation_id vlan-id]
    选项 说明
    network-name

    为网络输入一个名称。

    --tenant-id

    指定要为其创建端口的项目的 UUID。您可以通过运行 openstack project list 命令查找项目的 UUID。

    --provider:network_type

    为 VLAN 网络输入 vlan,为端口组网络输入 portgroup,或为含糊网络输入 nsx-net

    --provider:physical_network
    • 对于 NSX Data Center for vSphere 中的 VLAN 网络,请指定分布式交换机的 MOID。
    • 对于 NSX-T Data Center 中的 VLAN 网络,请指定 VLAN 传输区域的 UUID。
    • 对于 DVS 中的 VLAN 网络,请指定分布式交换机的名称。
    • 对于端口组网络,请指定端口组的名称。网络名称必须与端口组名称相匹配。
    • 对于含糊网络,请指定逻辑交换机的 UUID。
    --provider:segmentation_id

    如果要创建基于 VLAN 的网络,请输入 VLAN ID。

  8. 在网络上创建子网。
    neutron subnet-create network-id --tenant-id project-uuid --name subnet-name
    选项 说明
    network-id

    指定要在其上创建子网的网络的 UUID。您可以通过运行 openstack network list 命令查找网络的 UUID。

    --tenant-id

    指定要为其创建子网的项目的 UUID。

    --name

    输入子网的名称。

  9. 使用 --vnic_type direct 参数创建启用直通的端口。
    neutron port-create network-id --tenant-id project-uuid --name port-name --vnic_type direct
    选项 说明
    network-id

    指定要在其上创建端口的网络的 UUID。您可以通过运行 openstack network list 命令查找网络的 UUID。

    --tenant-id

    指定要为其创建端口的项目的 UUID。

    --name

    输入端口的名称。

    注: 启用直通的端口不支持端口安全,将自动为创建的端口禁用端口安全。
    要为 OpenStack 实例提供对物理网络适配器的访问权限,请为您的实例配置此单个端口。或者,要部署具有多个可提供冗余的端口的虚拟机,请记下输出中的端口 ID,然后重复执行此步骤以创建第二个直接端口。
  10. (可选) 为虚拟机部署虚拟机特定实例和两个直接端口。
    nova boot --flavor <FLAVOR_ID> --image <IMAGE_ID> --nic port-id=<port1-id> --nic port-id=<port2-id> <VM_NAME>
    选项 说明
    FLAVOR_ID

    指定在 步骤 6 中创建的特定实例。

    --nic

    输入使用每个直接端口创建的端口 ID。