12.2. 使用 RT-KVM 配置 OVS-DPDK
12.2.1. 为 Real-time Compute 设计节点
要为 Real-time Compute 指定节点,请创建一个新的角色文件来配置 Real-time Compute 角色,并使用 Real-time Compute 资源类配置裸机节点,以标记实时的 Compute 节点。
以下流程适用于您尚未调配的新 overcloud 节点。要将资源类分配给已调配的现有 overcloud 节点,请缩减 overcloud 以取消置备节点,然后扩展 overcloud,以使用新的资源类分配来重新置备节点。有关更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 扩展 overcloud 节点。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:[stack@director ~]$ source ~/stackrc
-
根据
/usr/share/openstack-tripleo-heat-templates/environments/compute-real-time-example.yaml
文件,创建一个compute-real-time.yaml
环境文件,为ComputeRealTime
角色设置参数。 生成一个名为
roles_data_rt.yaml
的新角色数据文件,其中包含ComputeRealTime
角色,以及 overcloud 所需的任何其他角色。以下示例生成角色数据文件roles_data_rt.yaml
,其中包括角色Controller
,Compute
, 和ComputeRealTime
:(undercloud)$ openstack overcloud roles generate \ -o /home/stack/templates/roles_data_rt.yaml \ ComputeRealTime Compute Controller
为 ComputeRealTime 角色更新 roles_data_rt.yaml 文件:
################################################### # Role: ComputeRealTime # ################################################### - name: ComputeRealTime description: | Real Time Compute Node role CountDefault: 1 # Create external Neutron bridge tags: - compute - external_bridge networks: InternalApi: subnet: internal_api_subnet Tenant: subnet: tenant_subnet Storage: subnet: storage_subnet HostnameFormatDefault: '%stackname%-computert-%index%' deprecated_nic_config_name: compute-rt.yaml
为 overcloud 注册 ComputeRealTime 节点,将它们添加到您的节点定义模板中:
node.json
或node.yaml
。有关更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 为 overcloud 注册节点。
检查节点硬件:
(undercloud)$ openstack overcloud node introspect --all-manageable --provide
如需更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 创建裸机节点硬件清单。
使用自定义 ComputeRealTime 资源类标记您要为 ComputeRealTime 指定的每个裸机节点:
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.RTCOMPUTE <node>
将 <node> 替换为裸机节点的名称或 UUID。
将 ComputeRealTime 角色添加到节点定义文件
overcloud-baremetal-deploy.yaml
中,并定义您要分配给节点的任何预先节点放置、资源类、网络拓扑或其他属性:- name: Controller count: 3 ... - name: Compute count: 3 ... - name: ComputeRealTime count: 1 defaults: resource_class: baremetal.RTCOMPUTE network_config: template: /home/stack/templates/nic-config/<role_topology_file>
将
<role_topology_file
> 替换为用于ComputeRealTime
角色的拓扑文件的名称,如myRoleTopology.j2
。您可以重复使用现有网络拓扑,或为角色创建新的自定义网络接口模板。如需更多信息, 请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 定义自定义网络接口模板。要使用默认网络定义设置,请不要在角色定义中包含
network_config
。有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 裸机节点置备属性。
有关节点定义文件的示例,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 节点定义文件示例。
创建以下 Ansible playbook 以在节点置备过程中配置内核,并将 playbook 保存为
/home/stack/templates/fix_rt_kernel.yaml
:# RealTime KVM fix until BZ #2122949 is closed- - name: Fix RT Kernel hosts: allovercloud any_errors_fatal: true gather_facts: false vars: reboot_wait_timeout: 900 pre_tasks: - name: Wait for provisioned nodes to boot wait_for_connection: timeout: 600 delay: 10 tasks: - name: Fix bootloader entry become: true shell: |- set -eux new_entry=$(grep saved_entry= /boot/grub2/grubenv | sed -e s/saved_entry=//) source /etc/default/grub sed -i "s/options.*/options root=$GRUB_DEVICE ro $GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT/" /boot/loader/entries/$(</etc/machine-id)$new_entry.conf cp -f /boot/grub2/grubenv /boot/efi/EFI/redhat/grubenv post_tasks: - name: Configure reboot after new kernel become: true reboot: reboot_timeout: "{{ reboot_wait_timeout }}" when: reboot_wait_timeout is defined
在节点置备文件中的
ComputeOvsDpdkSriovRT
角色定义中包含/home/stack/templates/fix_rt_kernel.yaml
作为 playbook:- name: ComputeOvsDpdkSriovRT ... ansible_playbooks: - playbook: /usr/share/ansible/tripleo-playbooks/cli-overcloud-node-kernelargs.yaml extra_vars: kernel_args: "default_hugepagesz=1GB hugepagesz=1G hugepages=64 iommu=pt intel_iommu=on tsx=off isolcpus=2-19,22-39" reboot_wait_timeout: 900 tuned_profile: "cpu-partitioning" tuned_isolated_cores: "2-19,22-39" defer_reboot: true - playbook: /home/stack/templates/fix_rt_kernel.yaml extra_vars: reboot_wait_timeout: 1800
有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 裸机节点置备属性。
有关节点定义文件的示例,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 节点定义文件示例。
为您的角色置备新节点:
(undercloud)$ openstack overcloud node provision \ [--stack <stack> \ ] [--network-config \] --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
-
可选:将
<stack>
替换为置备裸机节点的堆栈的名称。默认值为overcloud
。 -
可选:包含
--network-config
可选参数,为cli-overcloud-node-network-config.yaml
Ansible playbook 提供网络定义。如果您没有使用network_config
属性定义网络定义,则使用默认网络定义。 -
将
<deployment_file>
替换为用于部署命令生成的 heat 环境文件的名称,如/home/stack/templates/overcloud-baremetal-deployed.yaml
。
-
可选:将
在一个单独的终端中监控置备进度。当置备成功时,节点状态将从
available
变为active
:(undercloud)$ watch openstack baremetal node list
如果您在没有
--network-config
选项运行 provisioning 命令,请在network-environment.yaml
文件中配置<Role>NetworkConfigTemplate
参数以指向 NIC 模板文件:parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputeAMDSEVNetworkConfigTemplate: /home/stack/templates/nic-configs/<rt_compute>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
将 <
;rt_compute
> 替换为包含ComputeRealTime
角色的网络拓扑的文件的名称,如computert.yaml
以使用默认网络拓扑。使用其他环境文件将环境文件添加到堆栈中,并部署 overcloud:
(undercloud)$ openstack overcloud deploy --templates \ -r /home/stack/templates/roles_data_rt.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml -e /home/stack/templates/node-info.yaml \ -e [your environment files] \ -e /home/stack/templates/compute-real-time.yaml
12.2.2. 配置 OVS-DPDK 参数
在
parameter_defaults
下,将隧道类型设置为vxlan
,网络类型设置为vxlan,vlan
:NeutronTunnelTypes: 'vxlan' NeutronNetworkType: 'vxlan,vlan'
在
parameters_defaults
下,设置网桥映射:# The OVS logical->physical bridge mappings to use. NeutronBridgeMappings: - dpdk-mgmt:br-link0
在
parameter_defaults
下,为ComputeOvsDpdkSriov
角色设置特定于角色的参数:########################## # OVS DPDK configuration # ########################## ComputeOvsDpdkSriovParameters: KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=2-19,22-39" TunedProfileName: "cpu-partitioning" IsolCpusList: "2-19,22-39" NovaComputeCpuDedicatedSet: ['4-19,24-39'] NovaReservedHostMemory: 4096 OvsDpdkSocketMemory: "3072,1024" OvsDpdkMemoryChannels: "4" OvsPmdCoreList: "2,22,3,23" NovaComputeCpuSharedSet: [0,20,1,21] NovaLibvirtRxQueueSize: 1024 NovaLibvirtTxQueueSize: 1024
注意要防止客户机创建过程中失败,在每个 NUMA 节点上至少分配一个带有同级线程的 CPU。在示例中,OvsPmd
CoreList
参数的值表示来自 NUMA 0 的内核 2 和 22,以及 NUMA 1 中的内核 3 和 23。注意这些大页面由虚拟机使用,以及 OVS-DPDK 使用
OvsDpdkSocketMemory
参数,如此流程中所示。虚拟机可用的巨页数量是引导参数
减去OvsDpdkSocketMemory
。您还必须将
hw:mem_page_size=1GB
添加到与 DPDK 实例关联的类别。注意OvsDpdkMemoryChannels
是此流程所需的设置。对于 optimum 操作,请确保使用适当的参数和值部署 DPDK。为 SR-IOV 配置特定于角色的参数:
NovaPCIPassthrough: - vendor_id: "8086" product_id: "1528" address: "0000:06:00.0" trusted: "true" physical_network: "sriov-1" - vendor_id: "8086" product_id: "1528" address: "0000:06:00.1" trusted: "true" physical_network: "sriov-2"