검색

12.2. RT-KVM을 사용하여 OVS-DPDK 구성

download PDF

12.2.1. 실시간 컴퓨팅을 위한 노드 지정

실시간 컴퓨팅에 대한 노드를 지정하려면 새 역할 파일을 생성하여 Real-time Compute 역할을 구성하고 Real-time Compute 리소스 클래스로 베어 메탈 노드를 구성하여 컴퓨팅 노드를 실시간으로 태그합니다.

참고

다음 절차는 아직 프로비저닝하지 않은 새 오버클라우드 노드에 적용됩니다. 이미 프로비저닝된 기존 오버클라우드 노드에 리소스 클래스를 할당하려면 오버클라우드를 축소하여 노드를 프로비저닝 해제한 다음 오버클라우드를 확장하여 새 리소스 클래스 할당으로 노드를 다시 프로비저닝합니다. 자세한 내용은 director를 사용하여 Red Hat OpenStack Platform 설치 및 관리에서 오버클라우드 노드 스케일링을 참조하십시오.

프로세스

  1. 언더클라우드 호스트에 stack 사용자로 로그인합니다.
  2. stackrc 언더클라우드 인증 정보 파일을 소싱합니다.

    [stack@director ~]$ source ~/stackrc
  3. /usr/share/openstack-tripleo-heat-templates/environments/compute-real-time-example.yaml 파일을 기반으로 ComputeRealTime 역할의 매개변수를 설정하는 compute-real-time.yaml 환경 파일을 만듭니다.
  4. ComputeRealTime 역할을 포함하는 roles_data_rt.yaml 이라는 새 역할 데이터 파일과 오버클라우드에 필요한 다른 역할 데이터 파일을 생성합니다. 다음 예제에서는 역할 Controller, Compute , Compute RealTime 을 포함하는 역할 데이터 파일 roles_data_rt.yaml 을 생성합니다.

    (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. 노드 정의 템플릿에 node.json 또는 node.yaml.yaml에 추가하여 오버클라우드의 ComputeRealTime 노드를 등록합니다.

    자세한 내용은 director 를 사용하여 Red Hat OpenStack Platform 설치 및 관리의 오버클라우드 노드 등록을 참조하십시오.

  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. 노드 정의 파일 overcloud-baremetal-deploy.yaml 에 ComputeRealTime 역할을 추가하고 노드에 할당할 예측 노드 배치, 리소스 클래스, 네트워크 토폴로지 또는 기타 속성을 정의합니다.

    - 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>
  10. 다음 Ansible 플레이북을 생성하여 노드 프로비저닝 중에 커널을 구성하고 플레이북을 /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 을 플레이북으로 포함합니다.

    - 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 플레이북에 제공합니다. 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 명령을 실행한 경우 NIC 템플릿 파일을 가리키도록 network-environment.yaml 파일에서 < Role>NetworkConfigTemplate 매개변수를 구성합니다.

    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 ).

  15. 다른 환경 파일과 함께 스택에 환경 파일을 추가하고 오버클라우드를 배포합니다.

    (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를 할당합니다. 이 예에서 OvsPmdCoreList 매개변수 값은 NUMA 0의 코어 2 및 22, NUMA 1의 코어 3 및 23을 나타냅니다.

    참고

    이러한 대규모 페이지는 가상 머신에서 사용하고 이 절차에 표시된 대로 OvsDpdkSocketMemory 매개변수를 사용하는 OVS-DPDK에서도 사용됩니다. 가상 머신에 사용할 수 있는 대규모 페이지 수는 부팅 매개변수에서 OvsDpdkSocketMemory 를 뺀 값입니다.

    DPDK 인스턴스와 연결된 플레이버에도 hw:mem_page_size=1GB 를 추가해야 합니다.

    참고

    OvsDpdkMemoryChannels 는 이 프로세스에 필요한 설정입니다. optimal operation을 위해 적절한 매개변수 및 값을 사용하여 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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.