9.3. QoS 정책을 사용하여 최소 대역폭 제어

RHOSP(Red Hat OpenStack Platform) 네트워킹 서비스(neutron)의 경우 두 가지 개별 컨텍스트에서 보장된 최소 대역폭 QoS 규칙을 적용할 수 있습니다. 네트워킹 서비스 백엔드 시행 및 리소스 할당 예약 적용.

네트워크 백엔드, ML2/OVS 또는 ML2/SR-IOV는 규칙이 적용되는 각 포트에 지정된 네트워크 대역폭보다 작지 않도록 합니다.

리소스 할당 스케줄링 대역폭 적용을 사용하는 경우 Compute 서비스(nova)는 VM 인스턴스를 최소 대역폭을 지원하는 호스트에만 배치합니다.

네트워킹 서비스 백엔드 적용, 리소스 할당 스케줄링 적용 또는 둘 다 사용하여 QoS minumum 대역폭 규칙을 적용할 수 있습니다.

다음 표에서는 최소 대역폭 QoS 정책을 지원하는 Modular Layer 2(ML2) 메커니즘 드라이버를 식별합니다.

표 9.4. 최소 대역폭 QoS를 지원하는 ML2 메커니즘 드라이버

ML2 메커니즘 드라이버agentVNIC 유형

ML2/SR-IOV

sriovnicswitch

direct

ML2/OVS

openvswitch

Normal

9.3.1. 네트워킹 서비스 백엔드 적용을 사용하여 최소 대역폭 적용

RHOSP(Red Hat OpenStack Platform) QoS(서비스 품질) 정책을 포트에 적용하여 포트의 네트워크 트래픽의 최소 대역폭을 보장할 수 있습니다. 이러한 포트는 flat 또는 VLAN 실제 네트워크에서 지원해야 합니다.

참고

현재 OVN(Open Virtual Network 메커니즘 드라이버)을 사용하는 Modular Layer 2 플러그인은 최소 대역폭 QoS 규칙을 지원하지 않습니다.

사전 요구 사항

  • RHOSP Networking 서비스(neutron)에 qos 서비스 플러그인이 로드되어야 합니다. (기본값입니다.)
  • 동일한 물리적 인터페이스에서 대역폭을 보장하지 않고 포트를 혼합하지 마십시오. 이로 인해 보장 없이 포트에 필요한 리소스 거부(sociation)가 발생할 수 있기 때문입니다.

    작은 정보

    호스트 집계를 생성하여 대역폭 보장 없이 대역폭 보장이 있는 포트를 분리합니다.

절차

  1. 자격 증명 파일을 가져옵니다.

    예제

    $ source ~/overcloudrc

  2. qos 서비스 플러그인이 Networking 서비스에 로드되었는지 확인합니다.

    $ openstack network qos policy list

    qos 서비스 플러그인이 로드되지 않은 경우 ResourceNotFound 오류가 발생하고 qos 서비스 플러그인을 로드해야 합니다. 자세한 내용은 9.2절. “QoS 정책을 위한 네트워킹 서비스 구성”의 내용을 참조하십시오.

  3. QoS 정책을 생성할 프로젝트의 ID를 확인합니다.

    $ openstack project list

    샘플 출력

    +----------------------------------+----------+
    | ID                               | Name     |
    +----------------------------------+----------+
    | 4b0b98f8c6c040f38ba4f7146e8680f5 | auditors |
    | 519e6344f82e4c079c8e2eabb690023b | services |
    | 80bf5732752a41128e612fe615c886c6 | demo     |
    | 98a2f53c20ce4d50a40dac4a38016c69 | admin    |
    +----------------------------------+----------+

  4. 이전 단계의 프로젝트 ID를 사용하여 프로젝트에 대한 QoS 정책을 생성합니다.

    예제

    이 예제에서는 admin 프로젝트에 대해 guaranteed_min_bw 라는 QoS 정책이 생성됩니다.

    $ openstack network qos policy create --share \
     --project 98a2f53c20ce4d50a40dac4a38016c69 guaranteed_min_bw
  5. 정책에 대한 규칙을 구성합니다.

    예제

    이 예에서는 guaranteed_min_bw 라는 정책에 대해 최소 대역폭 40000000 kbps를 사용하여 수신 및 송신에 대한 QoS 규칙이 생성됩니다.

    $ openstack network qos rule create \
     --type minimum-bandwidth --min-kbps 40000000 \
     --ingress guaranteed_min_bw
    
    $ openstack network qos rule create \
     --type minimum-bandwidth --min-kbps 40000000 \
     --egress guaranteed_min_bw
  6. 정책을 적용할 포트를 구성합니다.

    예제

    이 예에서 guaranteed_min_bw 정책은 포트 ID인 kubevirt x9aiw1-2v74-144x-c2q8-ed8w423a6s12 에 적용됩니다.

    $ openstack port set --qos-policy guaranteed_min_bw \
     56x9aiw1-2v74-144x-c2q8-ed8w423a6s12

검증

  • ML2/SR-IOV

    루트 액세스를 사용하여 컴퓨팅 노드에 로그인하고 물리적 기능에 있는 가상 기능의 세부 정보를 표시합니다.

    예제

    # ip -details link show enp4s0f1

    샘플 출력

    50: enp4s0f1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master mx-bond state UP mode DEFAULT group default qlen 1000
        link/ether 98:03:9b:9d:73:74 brd ff:ff:ff:ff:ff:ff permaddr 98:03:9b:9d:73:75 promiscuity 0 minmtu 68 maxmtu 9978
        bond_slave state BACKUP mii_status UP link_failure_count 0 perm_hwaddr 98:03:9b:9d:73:75 queue_id 0 addrgenmode eui64 numtxqueues 320 numrxqueues 40 gso_max_size 65536 gso_max_segs 65535 portname p1 switchid 74739d00039b0398
        vf 0     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 1     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 2     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 3     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 4     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 5     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 6     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 7     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off
        vf 8     link/ether fa:16:3e:2a:d2:7f brd ff:ff:ff:ff:ff:ff, tx rate 999 (Mbps), max_tx_rate 999Mbps, spoof checking off, link-state disable, trust off, query_rss off
        vf 9     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state disable, trust off, query_rss off

  • ML2/OVS

    루트 액세스를 사용하여 계산 노드에 로그인하고 물리 브리지 인터페이스의 tc 규칙 및 클래스를 표시합니다.

    예제

    #  tc class show dev mx-bond

    샘플 출력

    class htb 1:11 parent 1:fffe prio 0 rate 4Gbit ceil 34359Mbit burst 9000b cburst 8589b
    class htb 1:1 parent 1:fffe prio 0 rate 72Kbit ceil 34359Mbit burst 9063b cburst 8589b
    class htb 1:fffe root rate 34359Mbit ceil 34359Mbit burst 8589b cburst 8589b

추가 리소스

9.3.2. 최소 대역폭 QoS 정책을 사용하여 인스턴스 예약

최소 대역폭 QoS 정책을 포트에 적용하여 RHOSP(Red Hat OpenStack Platform) VM 인스턴스가 생성되는 호스트에 최소 네트워크 대역폭이 있는지 확인할 수 있습니다.

사전 요구 사항

  • RHOSP Networking 서비스(neutron)에는 qos배치 서비스 플러그인이 로드되어야 합니다. qos 서비스 플러그인은 기본적으로 로드됩니다.
  • 네트워킹 서비스에서 다음 API 확장을 지원해야 합니다.

    • agent-resources-synced
    • port-resource-request
    • qos-bw-minimum-ingress
  • ML2/OVS 또는 ML2/SR-IOV 메커니즘 드라이버를 사용해야 합니다.
  • 정책이 할당된 포트를 사용하는 인스턴스가 없는 경우에만 최소 대역폭 QoS 정책을 수정할 수 있습니다. 포트가 바인딩된 경우 네트워킹 서비스는 배치 API 사용 정보를 업데이트할 수 없습니다.
  • 배치 서비스는 마이크로버전 1.29를 지원해야 합니다.
  • Compute 서비스(nova)는 마이크로 버전 2.72를 지원해야 합니다.

절차

  1. 자격 증명 파일을 가져옵니다.

    예제

    $ source ~/overcloudrc

  2. qos 서비스 플러그인이 Networking 서비스에 로드되었는지 확인합니다.

    $ openstack network qos policy list

    qos 서비스 플러그인이 로드되지 않은 경우 ResourceNotFound 오류가 발생하고 qos 서비스 플러그인을 로드해야 합니다. 자세한 내용은 9.2절. “QoS 정책을 위한 네트워킹 서비스 구성”의 내용을 참조하십시오.

  3. QoS 정책을 생성할 프로젝트의 ID를 확인합니다.

    $ openstack project list

    샘플 출력

    +----------------------------------+----------+
    | ID                               | Name     |
    +----------------------------------+----------+
    | 4b0b98f8c6c040f38ba4f7146e8680f5 | auditors |
    | 519e6344f82e4c079c8e2eabb690023b | services |
    | 80bf5732752a41128e612fe615c886c6 | demo     |
    | 98a2f53c20ce4d50a40dac4a38016c69 | admin    |
    +----------------------------------+----------+

  4. 이전 단계의 프로젝트 ID를 사용하여 프로젝트에 대한 QoS 정책을 생성합니다.

    예제

    이 예제에서는 admin 프로젝트에 대해 guaranteed_min_bw 라는 QoS 정책이 생성됩니다.

    $ openstack network qos policy create --share \
     --project 98a2f53c20ce4d50a40dac4a38016c69 guaranteed_min_bw
  5. 정책에 대한 규칙을 구성합니다.

    예제

    이 예에서는 guaranteed_min_bw 라는 정책에 대해 최소 대역폭 40000000 kbps를 사용하여 수신 및 송신에 대한 QoS 규칙이 생성됩니다.

    $ openstack network qos rule create \
     --type minimum-bandwidth --min-kbps 40000000 \
     --ingress guaranteed_min_bw
    $ openstack network qos rule create \
     --type minimum-bandwidth --min-kbps 40000000 \
     --egress guaranteed_min_bw
  6. 정책을 적용할 포트를 구성합니다.

    예제

    이 예에서 guaranteed_min_bw 정책은 포트 ID인 kubevirt x9aiw1-2v74-144x-c2q8-ed8w423a6s12 에 적용됩니다.

    $ openstack port set --qos-policy guaranteed_min_bw \
     56x9aiw1-2v74-144x-c2q8-ed8w423a6s12

검증

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

    $ source ~/stackrc
  3. 사용 가능한 모든 리소스 공급자를 나열합니다.

    $ openstack --os-placement-api-version 1.17 resource provider list

    샘플 출력

    +--------------------------------------+-----------------------------------------------------+------------+--------------------------------------+--------------------------------------+
    | uuid                                 | name                                                | generation | root_provider_uuid                   | parent_provider_uuid                 |
    +--------------------------------------+-----------------------------------------------------+------------+--------------------------------------+--------------------------------------+
    | 31d3d88b-bc3a-41cd-9dc0-fda54028a882 | dell-r730-014.localdomain                           |         28 | 31d3d88b-bc3a-41cd-9dc0-fda54028a882 | None                                 |
    | 6b15ddce-13cf-4c85-a58f-baec5b57ab52 | dell-r730-063.localdomain                           |         18 | 6b15ddce-13cf-4c85-a58f-baec5b57ab52 | None                                 |
    | e2f5082a-c965-55db-acb3-8daf9857c721 | dell-r730-063.localdomain:NIC Switch agent          |          0 | 6b15ddce-13cf-4c85-a58f-baec5b57ab52 | 6b15ddce-13cf-4c85-a58f-baec5b57ab52 |
    | d2fb0ef4-2f45-53a8-88be-113b3e64ba1b | dell-r730-014.localdomain:NIC Switch agent          |          0 | 31d3d88b-bc3a-41cd-9dc0-fda54028a882 | 31d3d88b-bc3a-41cd-9dc0-fda54028a882 |
    | f1ca35e2-47ad-53a0-9058-390ade93b73e | dell-r730-063.localdomain:NIC Switch agent:enp6s0f1 |         13 | 6b15ddce-13cf-4c85-a58f-baec5b57ab52 | e2f5082a-c965-55db-acb3-8daf9857c721 |
    | e518d381-d590-5767-8f34-c20def34b252 | dell-r730-014.localdomain:NIC Switch agent:enp6s0f1 |         19 | 31d3d88b-bc3a-41cd-9dc0-fda54028a882 | d2fb0ef4-2f45-53a8-88be-113b3e64ba1b |
    +--------------------------------------+-----------------------------------------------------+------------+--------------------------------------+--------------------------------------+

  4. 특정 리소스에서 제공하는 대역폭을 확인합니다.

    (undercloud)$ openstack --os-placement-api-version 1.17 \
     resource provider inventory list <rp_uuid>

    예제

    이 예에서 호스트 dell-r730-014 에서 enp6s0f1 인터페이스에 의해 제공되는 대역폭은 리소스 공급자 UUID, e518d381-d590-5767-8f34-c20def34b252 를 사용하여 확인됩니다.

    [stack@dell-r730-014 nova]$ openstack --os-placement-api-version 1.17 \
     resource provider inventory list e518d381-d590-5767-8f34-c20def34b252

    샘플 출력

    +----------------------------+------------------+----------+------------+----------+-----------+----------+
    | resource_class             | allocation_ratio | min_unit |   max_unit | reserved | step_size |    total |
    +----------------------------+------------------+----------+------------+----------+-----------+----------+
    | NET_BW_EGR_KILOBIT_PER_SEC |              1.0 |        1 | 2147483647 |        0 |         1 | 10000000 |
    | NET_BW_IGR_KILOBIT_PER_SEC |              1.0 |        1 | 2147483647 |        0 |         1 | 10000000 |
    +----------------------------+------------------+----------+------------+----------+-----------+----------+

  5. 인스턴스가 실행 중인 경우 리소스 공급자에 대한 클레임을 확인하려면 다음 명령을 실행합니다.

    (undercloud)$ openstack --os-placement-api-version 1.17 \
     resource provider show --allocations  <rp_uuid>

    예제

    이 예에서 리소스 공급자에 대한 클레임은 리소스 공급자 UUID인 e518d381-d590-5767-8f34-c20defb252를 사용하여 호스트에서 dell- r730-014 에서 확인됩니다.

    [stack@dell-r730-014 nova]$ openstack --os-placement-api-version 1.17 resource provider show --allocations  e518d381-d590-5767-8f34-c20def34b252 -f value -c allocations

    샘플 출력

    {3cbb9e07-90a8-4154-8acd-b6ec2f894a83: {resources: {NET_BW_EGR_KILOBIT_PER_SEC: 1000000, NET_BW_IGR_KILOBIT_PER_SEC: 1000000}}, 8848b88b-4464-443f-bf33-5d4e49fd6204: {resources: {NET_BW_EGR_KILOBIT_PER_SEC: 1000000, NET_BW_IGR_KILOBIT_PER_SEC: 1000000}}, 9a29e946-698b-4731-bc28-89368073be1a: {resources: {NET_BW_EGR_KILOBIT_PER_SEC: 1000000, NET_BW_IGR_KILOBIT_PER_SEC: 1000000}}, a6c83b86-9139-4e98-9341-dc76065136cc: {resources: {NET_BW_EGR_KILOBIT_PER_SEC: 3000000, NET_BW_IGR_KILOBIT_PER_SEC: 3000000}}, da60e33f-156e-47be-a632-870172ec5483: {resources: {NET_BW_EGR_KILOBIT_PER_SEC: 1000000, NET_BW_IGR_KILOBIT_PER_SEC: 1000000}}, eb582a0e-8274-4f21-9890-9a0d55114663: {resources: {NET_BW_EGR_KILOBIT_PER_SEC: 3000000, NET_BW_IGR_KILOBIT_PER_SEC: 3000000}}}

추가 리소스