搜索

12.2. 使用 RT-KVM 配置 OVS-DPDK

download PDF

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 节点

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    [stack@director ~]$ source ~/stackrc
  3. 根据 /usr/share/openstack-tripleo-heat-templates/environments/compute-real-time-example.yaml 文件,创建一个 compute-real-time.yaml 环境文件,为 ComputeRealTime 角色设置参数。
  4. 生成一个名为 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
  5. 为 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
  6. 为 overcloud 注册 ComputeRealTime 节点,将它们添加到您的节点定义模板中:node.jsonnode.yaml

    有关更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 为 overcloud 注册节点

  7. 检查节点硬件:

    (undercloud)$ openstack overcloud node introspect --all-manageable --provide

    如需更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的 创建裸机节点硬件清单

  8. 使用自定义 ComputeRealTime 资源类标记您要为 ComputeRealTime 指定的每个裸机节点:

    (undercloud)$ openstack baremetal node set \
     --resource-class baremetal.RTCOMPUTE <node>

    将 <node> 替换为裸机节点的名称或 UUID。

  9. 将 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 中的 节点定义文件示例

  10. 创建以下 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
  11. 在节点置备文件中的 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 中的 节点定义文件示例

  12. 为您的角色置备新节点:

    (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
  13. 在一个单独的终端中监控置备进度。当置备成功时,节点状态将从 available 变为 active

    (undercloud)$ watch openstack baremetal node list
  14. 如果您在没有 --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

    将 &lt ;rt_compute > 替换为包含 ComputeRealTime 角色的网络拓扑的文件的名称,如 computert.yaml 以使用默认网络拓扑。

  15. 使用其他环境文件将环境文件添加到堆栈中,并部署 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 参数

  1. parameter_defaults 下,将隧道类型设置为 vxlan,网络类型设置为 vxlan,vlan

    NeutronTunnelTypes: 'vxlan'
    NeutronNetworkType: 'vxlan,vlan'
  2. parameters_defaults 下,设置网桥映射:

    # The OVS logical->physical bridge mappings to use.
    NeutronBridgeMappings:
      - dpdk-mgmt:br-link0
  3. 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。

  4. 为 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"
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.