3.4. 使用 SR-IOV 支持安装 OpenDaylight
OpenDaylight 可能会部署为支持 单根输入/ 输出虚拟化(SR-IOV)的 Compute 节点。在本部署中,Compute 节点必须作为专用 SR-IOV 节点运行,且不能和基于 OVS 的 nova 实例混合。可以在单个 OpenDaylight 部署中部署 OVS 和 SR-IOV Compute 节点。
这种情境利用自定义 SR-IOV Compute 角色来完成这种部署。
SR-IOV 部署需要使用 neutron SR-IOV 代理来配置虚拟功能(VF)。然后,在部署时,这些功能直接传递到计算实例,它们充当网络端口。VF 从 Compute 节点上的主机 NIC 中获取,因此在启动部署前需要一些有关主机接口的信息。
3.4.1. 准备 SR-IOV Compute 角色 复制链接链接已复制到粘贴板!
遵循与 Install of OpenDaylight In Custom Role 中显示的相同的方法,您必须为 SR-IOV Compute 节点创建一个自定义角色,以允许创建基于 SR-IOV 的实例,而默认的 Compute 角色提供基于 OVS 的 nova 实例。
开始前
- 了解在 自定义角色中安装 OpenDaylight的章节
流程
将默认角色文件复制到新目录中,并将原始文件保留为备份。
$ mkdir ~/roles $ cp /usr/share/openstack-tripleo-heat-templates/roles/* ~/roles在
~/roles目录中创建一个新的ComputeSriov.yaml文件,并添加以下角色描述:- name: ComputeSRIOV CountDefault: 1 ServicesDefault: - OS::TripleO::Services::Kernel - OS::TripleO::Services::Ntp - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::NeutronSriovAgent - OS::TripleO::Services::TripleoPackages - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::Sshd - OS::TripleO::Services::NovaCompute - OS::TripleO::Services::NovaLibvirt - OS::TripleO::Services::NovaMigrationTarget - OS::TripleO::Services::Timezone - OS::TripleO::Services::ComputeNeutronCorePlugin - OS::TripleO::Services::Securetty- 保存该文件。
从默认的 Compute 角色中删除
NeutronSriovAgent和NeutronSriovHostConfig服务,并将信息保存到 roles_data.yaml 中。- OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::NeutronSriovAgent生成新角色文件,以使用 OpenDaylight Compute SR-IOV 支持部署 OpenStack overcloud。
$ openstack overcloud roles generate --roles-path ~/roles -o ~/roles_data.yaml Controller Compute ComputeSriov创建本地 registry:
openstack overcloud container image prepare --namespace=192.168.24.1:8787/rhosp13 --prefix=openstack- --tag=2018-05-07.2 -e /home/stack/templates/environments/services-docker/neutron-opendaylight.yaml -e /home/stack/templates/environments/services-docker/neutron-opendaylight-sriov.yaml --output-env-file=/home/stack/templates/overcloud_images.yaml --roles-file /home/stack/templates/roles_data.yaml
3.4.2. 配置 SR-IOV 代理服务 复制链接链接已复制到粘贴板!
要使用 SR-IOV 支持部署 OpenDaylight,您必须覆盖 neutron-opendaylight.yaml 文件中的默认参数。您可以使用位于 /usr/share/openstack-tripleo-heat-templates 和 neutron-opendaylight.yaml 环境文件的标准 SR-IOV 环境文件。但是,最好不要编辑原始文件。相反,复制原始环境文件并修改重复文件中的参数。
或者,您可以创建一个新的环境文件,其中只提供您要更改的参数,并使用这两个文件进行部署。若要部署自定义的 OpenDaylight,请将这两个文件传递给部署命令。因为较新的环境文件会覆盖任何之前设置,所以必须在部署命令中以正确的顺序包括它们。正确的顺序是 neutron-opendaylight.yaml,然后是 neutron-opendaylight-sriov.yaml。
如果要使用默认设置部署 OpenDaylight 和 SR-IOV,您可以使用红帽提供的 neutron-opendaylight-sriov.yaml。如果您需要更改或添加参数,请制作默认 SR-IOV 环境文件的副本并编辑新创建的文件。
以下是自定义的 neutron-opendaylight-sriov.yaml 文件示例:
# A Heat environment that can be used to deploy OpenDaylight with SRIOV
resource_registry:
OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
OS::TripleO::Services::ComputeNeutronCorePlugin: ../puppet/services/neutron-plugin-ml2.yaml
OS::TripleO::Services::NeutronCorePlugin: ../puppet/services/neutron-plugin-ml2-odl.yaml
OS::TripleO::Services::OpenDaylightApi: ../docker/services/opendaylight-api.yaml
OS::TripleO::Services::OpenDaylightOvs: ../puppet/services/opendaylight-ovs.yaml
OS::TripleO::Services::NeutronSriovAgent: ../puppet/services/neutron-sriov-agent.yaml
OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
parameter_defaults:
NeutronEnableForceMetadata: true
NeutronPluginExtensions: 'port_security'
NeutronMechanismDrivers: ['sriovnicswitch','opendaylight_v2']
NeutronServicePlugins: 'odl-router_v2,trunk'
# Add PciPassthroughFilter to the scheduler default filters
#NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','RamFilter','ComputeFilter','ComputeCapabilitiesFilter', 'ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter']
#NovaSchedulerAvailableFilters: ["nova.scheduler.filters.all_filters","nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter"]
#NeutronPhysicalDevMappings: "datacentre:ens20f2"
# Number of VFs that needs to be configured for a physical interface
#NeutronSriovNumVFs: "ens20f2:5"
#NovaPCIPassthrough:
# - devname: "ens20f2"
# physical_network: "datacentre"
更多信息
您可以在 neutron-opendaylight-sriov.yaml 文件中配置以下选项。表描述了单独的选项,并提到启用 SR-IOV 功能所需的设置:
|
|
允许将 PCI Passthrough 用于 SR-IOV。这必须在环境文件中取消注释,并包含 |
|
|
为 Nova Default 过滤器启用 PCI Passthrough 过滤器。必须设置并包含 |
|
| 将逻辑网络映射到主机网络接口。必须指定此设置,以便 neutron 能够将虚拟网络绑定到物理端口。 |
|
|
为主机网络接口创建的 VF 数量。语法:& |
|
| 以列表格式配置 nova 中允许的 PCI 设备白名单,例如:
它还可以使用逻辑设备名称而不是特定硬件属性:
|
3.4.3. 使用 SR-IOV 安装 OpenDaylight 复制链接链接已复制到粘贴板!
开始前
- 安装 undercloud。如需更多信息 ,请参阅安装 undercloud。
- 创建环境文件,并链接到 overcloud 容器镜像。如需更多信息,请参阅使用 OpenDaylight 准备 overcloud 安装。
- 准备角色文件,以在具有 SR-IOV 支持的自定义角色中配置 OpenDaylight。如需更多信息,请参阅准备 SR-IOV 计算角色。
流程
使用
-r参数运行部署命令,使其包含您的自定义角色文件和必要的环境文件,以启用带有 OpenDaylight 的 SR-IOV 功能。$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates -e <other environment files> -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight-sriov.yaml -e network-environment.yaml --compute-scale 1 --ntp-server 0.se.pool.ntp.org --control-flavor control --compute-flavor compute -r my_roles_data.yaml -e /home/stack/templates/docker-images.yaml -e /home/stack/templates/odl-images.yaml
部署命令中存在的环境文件会覆盖您在 命令中之前包含的环境文件。您必须注意您包括的环境文件顺序以避免意外覆盖参数。
您可以通过创建一个最小的环境文件来覆盖一些参数,该文件只设置您要更改的参数并将其与默认环境文件合并。
更多信息
r选项会在安装时覆盖角色定义。-r <roles_data>.yaml- 自定义角色在安装过程中需要一个额外的 ironic 节点。