RDG:Red Hat OpenStack Platform 13 与 NVIDIA 网络 OVS 卸载

创建于 2019 年 7 月 11 日。本参考部署指南(RDG)演示了 Red Hat OpenStack Platform 13 作为网络功能虚拟化基础设施(NFVI)与 NVIDIA 网络 ASAP² 基于 OVS 硬件卸载的完整部署过程,以实现高吞吐量的 SRIOV 数据路径,同时保留现有的 Openvswitch 控制路径和 VXLAN 连接。

文档目录

创建于 Jul 11, 2019

image2020-2-27_10-45-54.png

简介

Red Hat OpenStack Platform 解决方案使云和通信服务提供商能够提高效率和敏捷性,同时降低运营成本。

在本**参考部署指南(RDG)中,我们将演示 Red Hat OpenStack Platform 13 作为网络功能虚拟化基础设施(NFVI)**与 NVIDIA 网络 ASAP² 基于 OVS 硬件卸载的完整部署过程,以实现高吞吐量的 SRIOV 数据路径,同时保留现有的 Openvswitch 控制路径和 VXLAN 连接。

我们将涵盖设置组件、规模考虑因素以及其他技术方面,包括硬件 BOM、网络拓扑以及验证虚拟网络功能(VNF)之间 VXLAN 流量卸载的步骤。

在开始之前,强烈建议熟悉 OVS 硬件卸载 ASAP² 技术,该技术作为 RH-OSP13 的内置功能引入。

欢迎观看这个 6 分钟的视频:Accelerated Switch and Packet Processing

参考文献

组件概述

  • NVIDIA Spectrum 交换机系列为数据中心应用日益增长的性能需求提供了最高效的网络解决方案。
  • NVIDIA ConnectX 网卡系列为性能驱动的服务器和存储应用提供了行业领先的连接性。ConnectX 网卡为各种应用和系统提供高带宽和超低延迟,从而实现更快的访问和实时响应。
  • **NVIDIA 加速交换和数据包处理(ASAP²)**技术将服务器/存储网络硬件的性能和效率与虚拟交换软件的灵活性相结合。ASAP² 提供比非卸载 OVS 解决方案高达 10 倍的性能提升,以最高的总体基础设施效率、部署灵活性和操作简便性交付软件定义网络。(从 ConnectX-4 Lx 网卡开始引入。)
  • NVIDIA NEO™ 是一个用于管理计算网络的强大平台。它使数据中心运营商能够高效地配置、监控和运营现代数据中心网络。
  • NVIDIA LinkX 线缆和收发器系列为云、Web 2.0、企业、电信和存储数据中心应用提供了业界最完整的 10、25、40、50、100、200 和 400Gb 互连产品。它们通常用于将机架顶交换机向下连接到服务器、存储和设备,以及向上连接到交换机间应用。

解决方案概述

解决方案设计

  • RH-OSP13 云大规模部署在多个机架上,通过 Spine/Leaf 网络架构互连。
  • 每个计算/控制器节点配备双端口 100GB 网卡,其中一个端口专用于租户数据流量,另一个用于存储和控制流量。
  • 使用可组合自定义网络实现机架间的网络隔离。在我们的案例中,使用 L3 OSPF 底层网络在网段之间路由,但也可以根据需要采用其他网络基础设施。
  • 启用 ASAP² 的计算节点位于不同机架,并维护 VXLAN 隧道作为租户 VM 流量的覆盖网络。
  • 计算节点使用 OVS ASAP² 数据平面加速来卸载 CPU 密集型的 VXLAN 流量,以避免封装/解封装性能损失,并实现令人印象深刻的高吞吐量。
  • 交换机由 NEO 配置和管理。
  • OpenStack Neutron 用作 SDN 控制器。

image2019-7-11_14-34-26.png


image2019-7-11_13-55-8.png


image2019-7-11_13-56-44.png

物料清单

image2020-1-23_10-32-11.png

注意

  • 上述 BOM 指的是大规模下的最大配置,阻塞比为 3:1。
  • 可以更改阻塞比以获得不同的容量。
  • SN2100 交换机与 SN2700 共享相同的功能集,在需要较低容量时可用于此解决方案。
  • 下面描述的解决方案示例将使用 2 机架 BOM。

大规模概述

最大规模图

image2019-7-11_14-26-23.png

解决方案示例

我们选择了以下关键特性作为演示加速 RH-OSP 解决方案的基线。

解决方案规模

  • 2 个机架,每个机架配置自定义网络
  • 2 台 SN2700 交换机作为 Spine 交换机
  • 2 台 SN2100 交换机作为 Leaf 交换机,每个机架 1 台
  • 机架 1 中有 5 个节点(3 个控制器,2 个计算节点)
  • 机架 2 中有 2 个节点(2 个计算节点)
  • 所有节点通过每个节点 2 个 100GB 端口连接到 Leaf 交换机
  • Leaf 交换机通过单个 100GB 端口连接到每个 Spine 交换机

物理图

image2019-7-11_14-1-24.png

网络图

image2019-7-11_14-3-15.png

注意

  • 存储网络已配置,但未使用存储节点。
  • 计算节点通过 undercloud 节点连接到外部网络。

重要! 以下配置步骤基于 2 个机架的解决方案示例。

网络配置步骤

物理配置

  • 将交换机连接到交换机管理网络。

  • 使用 100GB/s 线缆互连交换机。

    image2019-7-11_14-6-18.png

  • 根据下图将控制器/计算服务器连接到相关网络:

    角色 叶交换机位置
    Controller 1 Rack 1
    Controller 2 Rack 1
    Controller 3 Rack 1
    Compute 1 Rack 1
    Compute 2 Rack 2
    Compute 3 Rack 1
    Compute 4 Rack 2

    image2019-7-11_14-41-50.png

  • Undercloud Director 服务器连接到 IPMI/PXE/外部网络。

OSPF 配置

  • 使用 NVIDIA NEO 在叶/脊交换机上配置 OSPF。

    image2020-1-23_10-34-6.png

接口配置

  • 根据下表在叶交换机上设置 VLAN 和 VLAN 接口:

    网络名称 网络集 叶交换机位置 网络详情 交换机接口 IP VLAN ID 交换机端口模式
    Storage 1 Rack 1 172.16.0.0/24 172.16.0.1 11 hybrid
    Storage_Mgmt 1 Rack 1 172.17.0.0/24 172.17.0.1 21 hybrid
    Internal API 1 Rack 1 172.18.0.0/24 172.18.0.1 31 hybrid
    Tenant 1 Rack 1 172.19.0.0/24 172.19.0.1 41 access
    Storage_2 2 Rack 2 172.16.2.0/24 172.16.2.1 12 hybrid
    Storage_Mgmt_2 2 Rack 2 172.17.2.0/24 172.17.2.1 22 hybrid
    Internal API_2 2 Rack 2 172.18.2.0/24 172.18.2.1 32 hybrid
    Tenant_2 2 Rack 2 172.19.2.0/24 172.19.2.1 42 access

    image2019-7-11_14-8-27.png

  • 使用 NVIDIA NEO 通过预定义的配置任务配置 VLAN 和接口:

    • Add-VLAN:创建 VLAN 并设置名称。
    • Set-Access-VLAN-Port:在租户网络端口上设置 access VLAN。
    • Set-Hybrid-Vlan-Port:在存储/存储管理/内部 API 网络端口上允许所需的 VLAN。
    • Add-VLAN-To-OSPF-Area:通过 OSPF 分发网络。
    • Add VLAN IP Address:为每个 VLAN 设置 IP(当前无预定义模板)。

    image

image2020-1-23_10-34-49.png

image2020-1-23_10-35-3.png

例如,为了通过预定义的配置任务设置端口混合模式和允许的 VLAN:

image2020-1-23_10-35-18.png

image2020-1-23_10-35-27.png

请注意,由于目前没有用于配置 VLAN 接口 IP 地址的预定义配置模板,您可以手动将 IP 配置添加到“Add-VLAN-To-OSPF-Area”模板中,并使用它来定义 IP 地址和 OSPF 分发,例如:

image2020-1-23_10-35-48.png

image2020-1-23_10-35-59.png

解决方案配置和部署步骤

前提条件

具有相同角色(计算/控制器等)的服务器的硬件规格必须相同。

服务器准备

对于所有服务器,确保在 BIOS 设置中:

  • SRIOV 已启用
  • 网络启动设置为连接到 PXE 网络的接口

网卡准备

ConnectX-5 网卡默认禁用 SRIOV 配置,必须为计算节点使用的每个网卡启用。

要启用并配置它,请将计算网卡插入已安装操作系统的测试服务器,并按照以下步骤操作:

  • 使用以下命令验证固件版本是否为 16.21.2030 或更新:
[root@host ~]# ethtool -i ens2f0
driver: mlx5_core
version: 5.0-0
firmware-version: 16.22.1002 (MT_0000000009)
expansion-rom-version:
bus-info: 0000:07:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: yes

如果版本较旧,请下载新的固件并按照此处的说明烧录新固件。

  • 安装 mstflint 包:
[root@host ~]# yum install mstflint
  • 识别第一个 100G 端口的 PCI ID 并启用 SRIOV:
[root@host ~]# lspci | grep -i mel
07:00.0 Ethernet controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
07:00.1 Ethernet controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
[root@host ~]#
[root@host ~]# mstconfig -d 0000:07:00.0 query | grep -i sriov
SRIOV_EN False(0)
SRIOV_IB_ROUTING_MODE_P1 GID(0)
SRIOV_IB_ROUTING_MODE_P2 GID(0)
[root@host ~]# mstconfig -d 0000:07:00.0 set SRIOV_EN=1
Device #1:
----------

Device type: ConnectX5
PCI device: 0000:07:00.0

Configurations: Next Boot New
SRIOV_EN False(0) True(1)

Apply new Configuration? ? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.
  • 将 VF 数量设置为较大的值,例如 64,然后重新启动服务器以应用新配置:
[root@host ~]# mstconfig -d 0000:07:00.0 query | grep -i vfs
NUM_OF_VFS 0
[root@host ~]# mstconfig -d 0000:07:00.0 set NUM_OF_VFS=64

Device #1:
----------

Device type: ConnectX5
PCI device: 0000:07:00.0

Configurations: Next Boot New
NUM_OF_VFS 0 64

Apply new Configuration? ? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.
[root@host ~]# reboot
  • 使用上述 mstconfig 查询命令确认新设置已应用。
  • 将网卡插回计算节点。
  • 对设置中使用的每个计算节点网卡重复上述步骤。

注意

  • 在我们的解决方案中,每个网卡的两个 100G 端口中的第一个端口用于 ASAP² 加速数据平面。这就是我们仅在第一个 ConnectX 网卡 PCI 设备(上例中的 07:00.0)上启用 SRIOV 的原因。
  • 未来计划支持从 Undercloud 自动更新和配置计算节点上的网卡。

加速 RH-OSP 安装和部署步骤

  • 在 Undercloud 服务器上安装 Red Hat 7.5 操作系统,并在其连接到外部网络的接口上设置 IP;确保它具有互联网连接。
  • 按照 Red Hat OSP DIRECTOR 安装和使用指南的第 4 节中的说明安装 Undercloud 和 director: Director 安装和使用 - Red Hat 客户门户
    • 我们的 undercloud.conf 文件作为参考附件。
  • 按照指南的第 5 节中的说明配置容器镜像源。
    • 我们的解决方案使用 undercloud 作为本地注册表。
  • 按照第 6.1 节中的说明注册 overcloud 的节点。
    • 我们的 instackenv.json 文件作为参考附件。
  • 按照第 6.2 节中的说明检查节点的硬件。
    • 检查完成后,建议确认每个节点检测到的根磁盘是否正确,因为云部署可能因磁盘空间不足而失败。使用以下命令检查检测到的根磁盘上的可用空间:
(undercloud) [stack@rhosp-director ~]$ openstack baremetal node show 92c4c1cb-ce7d-48d4-a2d9-75b2651db097 | grep properties

| properties | {u'memory_mb': u'131072', u'cpu_arch': u'x86_64', u'local_gb': u'418', u'cpus': u'24', u'capabilities': u'boot_option:local'}
  • “local_gb”值表示磁盘大小。如果磁盘大小较小且不符合预期,请使用第 6.6 节中描述的过程为节点定义根磁盘。请注意,更改根磁盘后,需要对该节点进行额外的检查周期。
  • 在继续下一步之前,验证所有节点是否已正确注册并将其状态更改为“available”:
+--------------------------------------+--------------+---------------+-------------+--------------------+-------------+
| UUID                                 | Name         | Instance UUID | Power State | Provisioning State | Maintenance |
+--------------------------------------+--------------+---------------+-------------+--------------------+-------------+
| d1fca940-e341-491b-8afd-0cf6d748aa29 | controller-1 | None          | power off   | available          | False       |
| 6b24d02c-3fd2-4e55-a730-c45008f01723 | controller-2 | None          | power off   | available          | False       |
| 098c3e2d-1c70-41d2-983b-6c266387de0b | controller-3 | None          | power off   | available          | False       |
| 91492c2a-b26c-49ef-9d4e-e492a1578076 | compute-1    | None          | power off   | available          | False       |

| power off | available | False | | cdf9e0ec-e3cb-4005-86f6-d40e684a9b19 | compute-2 | None | power off | available | False | | 92c4c1cb-ce7d-48d4-a2d9-75b2651db097 | compute-3 | None | power off | available | False | | bb5e829a-834b-4eb1-b733-0012ce9d5f00 | compute-4 | None | power off | available | False | +--------------------------------------+--------------+---------------+-------------+--------------------+-------------+

  • 将节点标记到配置文件中
    • 将控制器节点标记为“control”默认配置文件:
      (undercloud) [stack@rhosp-director ~]$ openstack baremetal node set --property capabilities='profile:control,boot_option:local' controller-1
      (undercloud) [stack@rhosp-director ~]$ openstack baremetal node set --property capabilities='profile:control,boot_option:local' controller-2
      (undercloud) [stack@rhosp-director ~]$ openstack baremetal node set --property capabilities='profile:control,boot_option:local' controller-3
      
  • 创建两个新的计算 flavor——每个机架一个(compute-r1, compute-r2)——并将 flavor 附加到具有相关名称的配置文件:
    (undercloud) [stack@rhosp-director ~]$ openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 compute-r1
    (undercloud) [stack@rhosp-director ~]$ openstack flavor set --property "capabilities:boot_option"="local" --property "capabilities:profile"="compute-r1" --property "resources:CUSTOM_BAREMETAL"="1" --property "resources:DISK_GB"="0" --property "resources:MEMORY_MB"="0" --property "resources:VCPU"="0" compute-r1
    
    (undercloud) [stack@rhosp-director ~]$ openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 compute-r2
    (undercloud) [stack@rhosp-director ~]$ openstack flavor set --property "capabilities:boot_option"="local" --property "capabilities:profile"="compute-r2" --property "resources:CUSTOM_BAREMETAL"="1" --property "resources:DISK_GB"="0" --property "resources:MEMORY_MB"="0" --property "resources:VCPU"="0" compute-r2
    
  • 将计算节点 1、3 标记为“compute-r1”配置文件以关联到机架 1,将计算节点 2、4 标记为“compute-r2”配置文件以关联到机架 2:
    (undercloud) [stack@rhosp-director ~]$ openstack baremetal node set --property capabilities='profile:compute-r1,boot_option:local' compute-1
    (undercloud) [stack@rhosp-director ~]$ openstack baremetal node set --property capabilities='profile:compute-r1,boot_option:local' compute-3
    (undercloud) [stack@rhosp-director ~]$ openstack baremetal node set --property capabilities='profile:compute-r2,boot_option:local' compute-2
    (undercloud) [stack@rhosp-director ~]$ openstack baremetal node set --property capabilities='profile:compute-r2,boot_option:local' compute-4
    
  • 使用以下命令验证每个节点的配置文件标记:
    (undercloud) [stack@rhosp-director ~]$ openstack overcloud profiles list
    +--------------------------------------+--------------+-----------------+-----------------+-------------------+
    | Node UUID                            | Node Name    | Provision State | Current Profile | Possible Profiles |
    +--------------------------------------+--------------+-----------------+-----------------+-------------------+
    | d1fca940-e341-491b-8afd-0cf6d748aa29 | controller-1 | available       | control | |
    | 6b24d02c-3fd2-4e55-a730-c45008f01723 | controller-2 | available       | control | |
    | 098c3e2d-1c70-41d2-983b-6c266387de0b | controller-3 | available       | control | |
    | 91492c2a-b26c-49ef-9d4e-e492a1578076 | compute-1    | available       | compute-r1 | |
    | cdf9e0ec-e3cb-4005-86f6-d40e684a9b19 | compute-2    | available       | compute-r2 | |
    | 92c4c1cb-ce7d-48d4-a2d9-75b2651db097 | compute-3    | available       | compute-r1 | |
    | bb5e829a-834b-4eb1-b733-0012ce9d5f00 | compute-4    | available       | compute-r2 | |
    +--------------------------------------+--------------+-----------------+-----------------+-------------------+
    

    注意:可以在节点注册期间在 instackenv.json 文件中将节点标记到配置文件(第 6.1 节),而不是对每个节点运行标记命令,但无论如何都必须创建 flavor 和配置文件。

注意:以下各节中的配置文件示例是部分内容,用于突出显示特定部分。完整配置文件附于本文档。

  • 角色定义:

    • 创建 /home/stack/templates/ 目录并在其中使用以下命令生成包含两种角色类型的新角色文件(名为 _data.yaml):
      (undercloud) [stack@rhosp-director ~]$ mkdir /home/stack/templates
      (undercloud) [stack@rhosp-director ~]$ cd /home/stack/templates/
      (undercloud) [stack@rhosp-director templates]$ openstack overcloud roles generate -o roles_data.yaml Controller ComputeSriov
      
    • 编辑文件,将 ComputeSriov 更改为 ComputeSriov1:
      ###############################################################################
      # Role: ComputeSriov1 #
      ###############################################################################
      - name: ComputeSriov1
      description: |
      Compute SR-IOV Role R1
      CountDefault: 1
      networks:
      - InternalApi
      - Tenant
      - Storage
      HostnameFormatDefault: '%stackname%-computesriov1-%index%'
      disable_upgrade_deployment: True
      ServicesDefault:
      
    • 克隆整个 ComputeSriov1 角色部分,将其更改为 ComputeSriov2,并将其网络更改为代表第二个机架上的网络集:
      ###############################################################################
      # Role: ComputeSriov2 #
      ###############################################################################
      - name: ComputeSriov2
      description: |
      Compute SR-IOV Role R2
      CountDefault: 1
      networks:
      - InternalApi_2
      - Tenant_2
      - Storage_2
      HostnameFormatDefault: '%stackname%-computesriov2-%index%'
      disable_upgrade_deployment: True
      ServicesDefault:
      
    • 现在 roles_data.yaml 文件包含 3 种角色类型:Controller 和 ComputeSriov1(与机架 1 网络集关联),以及 ComputeSriov2(与机架 2 网络集关联)。
    • 为方便起见,完整配置文件附于本文档。
  • 用于定义节点数量和 Flavor 的环境文件:

    • 创建 /home/stack/templates/node-info.yaml,如第 6.7 节所述,编辑它以包含每个角色的计数和每个角色对应的 flavor。
    • 完整配置文件:
      parameter_defaults:
      OvercloudControllerFlavor: control
      OvercloudComputeSriov1Flavor: compute-r1
      OvercloudComputeSriov2Flavor: compute-r2
      ControllerCount: 3
      ComputeSriov1Count: 2
      
  • NVIDIA ConnectX 网卡列表

    • 运行以下命令遍历所有已注册节点并识别双端口 ConnectX 100GB 网卡的接口名称:
      (undercloud) [stack@rhosp-director templates]$ for node in $(openstack baremetal node list --fields uuid -f value) ; do openstack baremetal introspection interface list $node ; done
      .
      .
      +-----------+-------------------+----------------------+-------------------+----------------+
      | Interface | MAC Address       | Switch Port VLAN IDs | Switch Chassis ID | Switch Port ID |
      +-----------+-------------------+----------------------+-------------------+----------------+
      | eno1      | ec:b1:d7:83:11:b8 | []                   | 94:57:a5:25:fa:80 | 29 |
      | eno2      | ec:b1:d7:83:11:b9 | []                   | None              | None |
      | eno3      | ec:b1:d7:83:11:ba | []                   | None              | None |
      | eno4      | ec:b1:d7:83:11:bb | []                   | None              | None |
      | ens1f1    | ec:0d:9a:7d:81:b3 | []                   | 24:8a:07:7f:ef:00 | Eth1/14 |
      | ens1f0    | ec:0d:9a:7d:81:b2 | []                   | 24:8a:07:7f:ef:00 | Eth1/1 |
      +-----------+-------------------+----------------------+-------------------+----------------+
      

      注意:名称必须对所有节点相同,或者至少对所有共享相同角色的节点相同。在我们的例子中,控制器节点上是 ens2f0/ens2f1,计算节点上是 ens1f0/ens1f1。

  • 硬件卸载配置文件

    • 找到 /usr/share/openstack-tripleo-heat-templates/environments/ovs-hw-offload.yaml 文件并根据每个 ComputeSriov 角色的以下指南进行编辑:
      • 启用卸载
      • 设置内核参数以支持巨页
  • 设置用于加速数据平面的所需接口(本例中为 ens1f0)

  • 设置所需的 VF 数量(本例中为 64)

  • 设置正确的 Nova PCI Passthrough devname,以及 physical_network: null

  • 设置 ExtraConfig 以关联角色与正确的租户/API 网络集

完整配置文件附于本文档,示例如下:

# A Heat environment file that enables OVS Hardware Offload in the overcloud.
# This works by configuring SR-IOV NIC with switchdev and OVS Hardware Offload on
# compute nodes. The feature supported in OVS 2.8.0

resource_registry:
OS::TripleO::Services::NeutronSriovHostConfig: ../puppet/services/neutron-sriov-host-config.yaml

parameter_defaults:

NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','RamFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter']
NovaSchedulerAvailableFilters: ["nova.scheduler.filters.all_filters","nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter"]

# Kernel arguments for ComputeSriov1 node
ComputeSriov1Parameters:
KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=16 intel_iommu=on iommu=pt"
OvsHwOffload: True
# Number of VFs that needs to be configured for a physical interface
NeutronSriovNumVFs: ["ens1f0:64:switchdev"]
# Mapping of SR-IOV PF interface to neutron physical_network.
# In case of Vxlan/GRE physical_network should be null.
# In case of flat/vlan the physical_network should as configured in neutron.
NovaPCIPassthrough:
- devname: "ens1f0"
physical_network: null
NovaReservedHostMemory: 4096
# Extra config for mapping the ovs local_ip to the relevant tenant network
ComputeSriov1ExtraConfig:
nova::vncproxy::host: "%{hiera('internal_api')}"
neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant')}"

# Kernel arguments for ComputeSriov2 node
ComputeSriov2Parameters:
KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=16 intel_iommu=on iommu=pt"
OvsHwOffload: True
# Number of VFs that needs to be configured for a physical interface
NeutronSriovNumVFs: ["ens1f0:64:switchdev"]
# Mapping of SR-IOV PF interface to neutron physical_network.
# In case of Vxlan/GRE physical_network should be null.
# In case of flat/vlan the physical_network should as configured in neutron.
NovaPCIPassthrough:
- devname: "ens1f0"
physical_network: null
NovaReservedHostMemory: 4096
# Extra config for mapping the ovs local_ip to the relevant tenant network
ComputeSriov2ExtraConfig:
nova::vncproxy::host: "%{hiera('internal_api_2')}"
neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant_2')}"

网络配置文件:

找到 /usr/share/openstack-tripleo-heat-templates/network_data.yaml 文件,并根据以下指南进行编辑:

  • 设置外部网络参数(子网、分配池、默认网关)。
  • 设置机架 1 网络集参数,以匹配机架 1 叶交换机上配置的子网/VLAN。
  • 确保使用的网络名称与 roles_data.yaml 中为 Controller\ComputeSriov1 角色网络指定的名称一致。
  • 创建第二组网络,以匹配机架 2 叶交换机上配置的子网/VLAN。
  • 确保使用的网络名称与 roles_data.yaml 中为 ComputeSriov2 角色网络指定的名称一致。
  • 禁用“management”网络,因为本例中未使用。
  • 配置基于以下矩阵,以匹配上面“网络配置”部分中执行的叶交换机配置:
网络名称 网络集 网络位置 网络详情 VLAN 网络分配池
Storage 1 机架 1 172.16.0.0/24 11 172.16.0.100-250
Storage_Mgmt 1 机架 1 172.17.0.0/24 21 172.17.0.100-250
Internal API 1 机架 1 172.18.0.0/24 31 172.18.0.100-250
Tenant 1 机架 1 172.19.0.0/24 41 172.19.0.100-250
Storage_2 2 机架 2 172.16.2.0/24 12 172.16.2.100-250
Storage_Mgmt_2 2 机架 2 172.17.2.0/24 22 172.17.2.100-250
Internal API_2 2 机架 2 172.18.2.0/24 32 172.18.2.100-250
Tenant_2 2 机架 2 172.19.2.0/24 42 172.19.2.100-250
External - 公共交换机 10.7.208.0/24 - 10.7.208.10-21

完整配置文件附于本文档。

其中一个已配置网络(Storage 网络 - 2 组)、External 网络和 Management 网络的部分示例:

- name: Storage
vip: true
vlan: 11
name_lower: storage
ip_subnet: '172.16.0.0/24'
allocation_pools: [{'start': '172.16.0.100', 'end': '172.16.0.250'}]
ipv6_subnet: 'fd00:fd00:fd00:1100::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1100::10', 'end': 'fd00:fd00:fd00:1100:ffff:ffff:ffff:fffe'}]
.
.
- name: Storage_2
vip: true
vlan: 12
name_lower: storage_2
ip_subnet: '172.16.2.0/24'
allocation_pools: [{'start': '172.16.2.100', 'end': '172.16.2.250'}]
ipv6_subnet: 'fd00:fd00:fd00:1200::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1200::10', 'end': 'fd00:fd00:fd00:1200:ffff:ffff:ffff:fffe'}]
.
.
- name: External
vip: true
name_lower: external
vlan: 10
ip_subnet: '10.7.208.0/24'
allocation_pools: [{'start': '10.7.208.10', 'end': '10.7.208.21'}]
gateway_ip: '10.7.208.1'
ipv6_subnet: '2001:db8:fd00:1000::/64'
ipv6_allocation_pools: [{'start': '

`2001:db8:fd00:1000::10`,`end`:`2001:db8:fd00:1000:ffff:ffff:ffff:fffe`]
gateway_ipv6:`2001:db8:fd00:1000::1`

- name:Management
# Management 网络默认启用以保持向后兼容性,但
# 默认不包含在任何角色中。如需使用,请添加到角色定义中。
enabled:false

### 从现有模板部署计划

- 使用以下命令创建一个名为“asap-plan”的计划:

  ```bash
  (undercloud) [stack@rhosp-director templates]$ openstack overcloud plan create --templates /usr/share/openstack-tripleo-heat-templates asap-plan
  • 创建一个专用文件夹并将计划文件部署到其中:

    (undercloud) [stack@rhosp-director templates]$ mkdir /home/stack/asap-plan
    (undercloud) [stack@rhosp-director templates]$ cd /home/stack/asap-plan
    (undercloud) [stack@rhosp-director asap-plan]$ openstack container save asap-plan
    

编辑计划文件以用于部署

  • 将以下文件复制到 /home/stack/templates 目录:

    • /home/stack/asap-plan/environments/network-environment.yaml
    • /home/stack/asap-plan/network/config/single-nic-vlans/controller.yaml
    • /home/stack/asap-plan/network/config/single-nic-vlans/computesriov1.yaml
    • /home/stack/asap-plan/network/config/single-nic-vlans/computesriov2.yaml
  • 根据以下指南编辑 /home/stack/templates/network-environment.yaml

    • resource_registry 部分设置角色文件位置。
    • 将 Undercloud 控制平面 IP 设置为该网络的默认路由。
    • 为设置节点设置所需的 DNS 服务器。
    • 参见下面的示例。完整配置文件附于本文档。
    # 此文件是定义隔离网络及相关参数的环境文件示例。
    resource_registry:
    # 要使用的网络接口模板(这些文件必须存在)。您可以通过包含
    # net-*.yaml 环境文件(如 net-bond-with-vlans.yaml)来覆盖这些模板,
    # 或在此处修改列表。
    # Controller 的端口分配
    OS::TripleO::Controller::Net::SoftwareConfig:
      /home/stack/templates/controller.yaml
    # ComputeSriov1 的端口分配
    OS::TripleO::ComputeSriov1::Net::SoftwareConfig:
      /home/stack/templates/computesriov1.yaml
    # ComputeSriov2 的端口分配
    OS::TripleO::ComputeSriov2::Net::SoftwareConfig:
      /home/stack/templates/computesriov2.yaml
    
    parameter_defaults:
    # 此部分用于进行特定于部署的配置
    # 配置网络的 CIDR 子网掩码长度
    ControlPlaneSubnetCidr:'24'
    # 配置网络(或 Undercloud IP)的网关路由器
    ControlPlaneDefaultRoute:192.168.24.1
    .
    .
    # 为 overcloud 节点定义 DNS 服务器(最多 2 个)
    DnsServers:["10.7.77.192","10.7.77.135"]
    
  • 根据以下指南编辑 /home/stack/templates/controller.yaml

    • 设置 run-os-net-config.sh 脚本的位置。
    • 为每个网络设置超网和网关,以允许位于不同机架中的网络集之间的路由。网关将是配置在面向该网络的 Leaf 交换机接口上的 IP 接口。在下面的示例中,两个租户网络的超网和网关以绿色显示。
    • 为 Controller 节点使用的每个接口设置类型、网络和路由。在我们的示例中,Controller 节点使用:
      • 专用 1G 接口(类型“interface”)用于配置(PXE)网络。
      • 专用 1G 接口(类型“ovs_bridge”)用于外部网络。此网络配置了默认网关。
      • 专用 100G 接口(类型“interface”,无 VLAN)用于机架 1 的数据平面(租户)网络。该网络与超网关联,并有一条路由允许其到达同一超网中位于不同机架的其他网络。
      • 专用 100G 接口(类型“ovs_bridge”)带 VLAN,用于机架 1 的 Storage/StorageMgmt/InternalApi 网络。每个网络与超网关联,并有一条路由允许其到达同一超网中位于不同机架的其他网络。
      • 参见下面的示例。完整配置文件附于本文档。
    TenantSupernet:
      default:'172.19.0.0/16'
      description:包含所有角色的租户子网的超网。
      type:string
    TenantGateway:
      default:'172.19.0.1'
      description:租户网络上的路由器网关
      type:string
    Tenant_2Gateway:
      default:'172.19.2.1'
      description:tenant_2 网络上的路由器网关
      type:string
    .
    .
    resources:
      OsNetConfigImpl:
        type:OS::Heat::SoftwareConfig
        properties:
          group:script
          config:
            str_replace:
              template:
                get_file:/usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
              params:
                $network_config:
                  network_config:
                    .
                    .
                    # NIC 3 - 数据平面(租户网络)
                    - type:ovs_bridge
                      name:br-sriov
                      use_dhcp:false
                      members:
                        - type:interface
                          name:ens2f0
                      addresses:
                        - ip_netmask:
                            get_param:TenantIpSubnet
                      routes:
                        - ip_netmask:
                            get_param:TenantSupernet
                          next_hop:
                            get_param:TenantGateway
    
  • 根据以下指南编辑 /home/stack/templates/computesriov1.yaml

    • 设置 run-os-net-config.sh 脚本的位置 - 在下面的示例中未提及,请参见上面的示例或完整配置文件。
    • 为每个网络设置超网和网关,以允许位于不同机架中的网络集之间的路由。网关将是配置在面向该网络的 Leaf 交换机接口上的 IP 接口 - 在下面的示例中未提及,请参见上面的示例或完整配置文件。
    • 为机架 1 中计算节点使用的每个接口设置类型、网络和路由。在我们的示例中,这些 ComputeSriov1 节点使用:
      • 专用 1G 接口(类型“interface”)用于配置(PXE)网络。
      • 专用 100G 接口(类型“interface”,无 VLAN)用于机架 1 的数据平面(租户)网络。该网络与超网关联,并有一条路由允许其到达同一超网中位于不同机架的其他网络。
      • 专用 100G 接口(类型“ovs_bridge”)带 VLAN,用于机架 1 的 Storage/InternalApi 网络。每个网络与超网关联,并有一条路由允许其到达同一超网中位于不同机架的其他网络 - 在下面的示例中未提及,请参见完整配置文件。
    # NIC 1 - 配置网络
    - type:interface
      name:eno1
      use_dhcp:false
      dns_servers:
        get_param:DnsServers
      addresses:
        - ip_netmask:
            list_join:
              - /
              - - get_param:ControlPlaneIp
                - get_param:ControlPlaneSubnetCidr
      routes:
        - ip_netmask:169.254.169.254/32
          next_hop:
            get_param:EC2MetadataIp
        - default:true
          next_hop:
            get_param:ControlPlaneDefaultRoute
    
    # NIC 2 - ASAP² 数据平面(租户网络)
    - type:ovs_bridge
      name:br-sriov
      use_dhcp:false
      members:
        - type:interface
          name:ens1f0
      addresses:
        - ip_netmask:
            get_param:TenantIpSubnet
      routes:
        - ip_netmask:
            get_param:TenantSupernet
          next_hop:
            get_param:TenantGateway
    
  • 根据以下指南编辑 /home/stack/templates/computesriov2.yaml

    • 设置 run-os-net-config.sh 脚本的位置 - 在下面的示例中未提及,请参见上面的示例或完整配置文件。
    • 为每个网络设置超网和网关,以允许位于不同机架中的网络集之间的路由。网关将是配置在面向该网络的 Leaf 交换机接口上的 IP 接口 - 在下面的示例中未提及,请参见上面的示例或完整配置文件。
    • 为机架 2 中计算节点使用的每个接口设置类型、网络和路由。在我们的示例中,这些 ComputeSriov2 节点使用:
      • 专用 1G 接口(类型“interface”)用于配置(PXE)网络 - 在下面的示例中未提及,请参见上面的示例或完整配置文件。
      • 专用 100G 接口(类型“interface”,无 VLAN)用于机架 2 的数据平面(租户)网络。该网络与超网关联,并有一条路由允许其到达同一超网中位于不同机架的其他网络。
      • 专用 100G 接口(类型“ovs_bridge”)带 VLAN,用于机架 2 的 Storage/InternalApi 网络。每个网络与超网关联,并有一条路由允许其到达同一超网中位于不同机架的其他网络 - 在下面的示例中未提及,请参见上面的示例或完整配置文件。
      • 参见下面的示例。完整配置文件附于本文档。
    # NIC 2 - ASAP² 数据平面(租户网络)
    - type:ovs_bridge
      name:br-sriov
      use_dhcp:false
      members:
        - type:interface
          name:ens1f0
      addresses:
        - ip_netmask:
            get_param:Tenant_2IpSubnet
      routes:
        - ip_netmask:
            get_param:TenantSupernet
          next_hop:
            get_param:Tenant_2Gateway
    

部署

部署 Overcloud

  • 现在我们可以基于自定义配置文件部署 overcloud。
  • 云将部署以下组件:
    • 3 个控制器,关联机架 1 网络
    • 2 个计算节点,关联机架 1 网络,支持 ASAP² OVS 硬件卸载
    • 2 个计算节点,关联机架 2 网络,支持 ASAP² OVS 硬件卸载
    • 路由,实现机架/网络间的连通性
    • 所有节点间的 VXLAN 覆盖隧道
    • 在开始部署前,验证机架 Leaf 交换机上面向节点的 SW VLAN 接口在 OSPF 底层网络上的连通性。如果没有所有网络的跨机架连通性,overcloud 部署将失败。
    • 要启动 overcloud 部署,请执行以下命令——注意自定义环境文件。

注意

  • 不要更改环境文件的顺序。
  • 确保部署命令中指定的 NTP 服务器可访问并能向 undercloud 节点提供时间。
  • 部署命令中使用的 overcloud_images.yaml 文件在 undercloud 安装期间创建,请验证其在指定位置存在。
  • 部署命令中指定的 network-isolation.yaml 文件在部署期间从 j2.yaml 模板文件自动创建。
(undercloud) [stack@rhosp-director templates]$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates \
--libvirt-type kvm \
-n /usr/share/openstack-tripleo-heat-templates/network_data.yaml \
-r /home/stack/templates/roles_data.yaml \
--timeout 90 \
--validation-warnings-fatal \
--ntp-server 0.asia.pool.ntp.org \
-e /home/stack/templates/node-info.yaml \
-e /home/stack/templates/overcloud_images.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
-e /home/stack/templates/network-environment.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/ovs-hw-offload.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/host-config-and-reboot.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/disable-telemetry.yaml

Overcloud VXLAN 配置验证

  • 云部署完成后,登录 overcloud 节点,验证该节点与其余 overcloud 节点之间是否已通过路由租户网络建立 VXLAN 隧道。
  • 在以下示例中,我们可以看到机架 2 中的节点(租户网络 17.19.2.0/24)与机架 1 中的所有其他节点(租户网络 172.19.0.0/24)以及其自身机架中的节点之间,在 OVS 层面维护了 VXLAN 隧道。
(undercloud) [stack@rhosp-director ~]$ openstack server list
+--------------------------------------+---------------------------+--------+------------------------+----------------+------------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+---------------------------+--------+------------------------+----------------+------------+
| 35d3b3b6-b867-4408-bfc3-b3d25395450d | overcloud-controller-0 | ACTIVE | ctlplane=192.168.24.19 | overcloud-full | control |
| 0af372ed-4c5c-41fb-882a-c8a61cc01ba9 | overcloud-controller-1 | ACTIVE | ctlplane=192.168.24.20 | overcloud-full | control |
| 3c189bb9-fd2f-451d-b2f8-4d17d7fa0381 | overcloud-computesriov1-1 | ACTIVE | ctlplane=192.168.24.13 | overcloud-full | compute-r1 |
| 7eebc6f0-95af-4ec6-bf44-4db817bc4029 | overcloud-computesriov2-1 | ACTIVE | ctlplane=192.168.24.6 | overcloud-full | compute-r2 |
| ebc7c38b-6221-45c9-b5ca-98023f5bbebc | overcloud-controller-2 | ACTIVE | ctlplane=192.168.24.17 | overcloud-full | control |
| 7c700b2c-6a9f-480f-ada5-11866a891f04 | overcloud-computesriov2-0 | ACTIVE | ctlplane=192.168.24.12 | overcloud-full | compute-r2 |
| 971e8651-4059-42b9-834d-74449007343d | overcloud-computesriov1-0 | ACTIVE | ctlplane=192.168.24.11 | overcloud-full | compute-r1 |
+--------------------------------------+---------------------------+--------+------------------------+----------------+------------+

(undercloud) [stack@rhosp-director ~]$ ssh heat-admin@192.168.24.12
[heat-admin@overcloud-computesriov2-0 ~]$ sudo su
[root@overcloud-computesriov2-0 heat-admin]# ovs-vsctl show
.
.
Bridge br-tun
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "vxlan-ac130068"
Interface "vxlan-ac130068"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.19.2.102", out_key=flow, remote_ip="172.19.0.104"}
Port "vxlan-ac130070"
Interface "vxlan-ac130070"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.19.2.102", out_key=flow, remote_ip="172.19.0.112"}
Port "vxlan-ac13026c"
Interface "vxlan-ac13026c"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.19.2.102", out_key=flow, remote_ip="172.19.2.108"}
Port "vxlan-ac13006b"
Interface "vxlan-ac13006b"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.19.2.102", out_key=flow, remote_ip="172.19.0.107"}
Port br-tun
Interface br-tun
type: internal
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port "vxlan-ac130064"
Interface "vxlan-ac130064"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.19.2.102", out_key=flow, remote_ip="172.19.0.100"}
Port "vxlan-ac130065"
Interface "vxlan-ac130065"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.19.2.102", out_key=flow, remote_ip="172.19.0.101"}

Overcloud 主机聚合配置

  • 为了启用指定 VM 创建目标机架的选项,必须首先为每个机架配置主机聚合。

  • 登录 Overcloud 仪表板,为机架 1 创建主机聚合。将计算节点 1、3 添加进去。您可以通过主机名识别相关虚拟机管理程序,主机名指示了其角色/机架位置。

  • 为机架 2 创建主机聚合,并将计算节点 2、4 添加进去。

    image2019-12-11_17-5-1.png

    image2019-12-11_17-5-33.png

    image2019-12-11_17-7-2.png

使用 ASAP² 端口创建 Overcloud 实例

  • 根据需要创建 Flavor。
  • 上传镜像——使用包含最新 NVIDIA 网络驱动程序的更新操作系统镜像。
  • 创建 VXLAN 覆盖私有网络供实例使用(使用 CLI 命令)
(undercloud) [stack@rhosp-director ~]$ source overcloudrc
(overcloud) [stack@rhosp-director ~]$ openstack network create private --provider-network-type vxlan --share
  • 创建子网并将其分配给私有网络:
(overcloud) [stack@rhosp-director ~]$ openstack subnet create private_subnet --dhcp --network private --subnet-range 11.11.11.0/24
  • 创建 2 个具有 ASAP² 能力的 direct 端口(仅使用 CLI 命令)——每个端口将由不同机架中的 VM 使用:
(overcloud) [stack@rhosp-director ~]$ openstack port create direct1 --vnic-type=direct --network private --binding-profile '{"capabilities":["switchdev"]}'
(overcloud) [stack@rhosp-director ~]$ openstack port create direct2 --vnic-type=direct --network private --binding-profile '{"capabilities":["switchdev"]}'
  • 在每个机架上使用 ASAP² 端口生成实例。仅使用已分配的端口,而不使用已分配的网络,如下所示:

    image2019-12-11_17-9-44.png

    image2019-12-11_17-10-15.png

    image2019-12-11_17-10-59.png

image2019-12-11_17-11-53.png

image2019-12-11_17-12-27.png

image2019-12-11_17-13-23.png

  • OVS ASAP² 卸载验证
    • 在实例之间执行 ping 或运行流量。流量将通过 OVS VXLAN 覆盖网络,并由 ASAP² 硬件卸载加速到网卡。

    • SSH 到承载实例的计算节点,并执行以下命令以查看使用 ASAP² 卸载到网卡的加速双向流量流。在下面的输出中,我们可以看到每个方向的流:

      [root@overcloud-computesriov2-0 heat-admin]# ovs-dpctl dump-flows type=offloaded --name
      in_port(eth3),eth(src=fa:16:3e:15:e5:a8,dst=fa:16:3e:01:b3:aa),eth_type(0x0800),ipv4(frag=no), packets:1764662605, bytes:194112828502, used:0.470s, actions:set(tunnel(tun_id=0xf,src=172.19.2.102,dst=172.19.0.104,tp_dst=4789,flags(key))),vxlan_sys_4789
      
      tunnel(tun_id=0xf,src=172.19.0.104,dst=172.19.2.102,tp_dst=4789,flags(+key)),in_port(vxlan_sys_4789),eth(src=fa:16:3e:01:b3:aa,dst=fa:16:3e:15:e5:a8),eth_type(0x0800),ipv4(frag=no), packets:1760910540, bytes:105654631616, used:0.470s, actions:eth3
      

配置文件

config_files.zip

性能基准

注意:有关在 OpenStack 环境中利用 OVS ASAP² 加速的实例间基准测试,请参阅: 快速入门指南:ASAP² 技术在 Red Hat OpenStack Platform 13 上的性能评估

相关文档

按标签筛选

目前没有具有所选标签的项目。