9.3. 使用 QoS 策略控制最小带宽

对于 Red Hat OpenStack Platform (RHOSP)网络服务(neutron),可在两个不同的上下文中强制实施保证的最小带宽 QoS 规则:网络服务后端强制和资源分配调度强制。

ML2/OVS 或 ML2/SR-IOV 的网络后端会尝试确保应用该规则的每个端口都小于指定的网络带宽。

当您使用资源分配调度带宽强制时,计算服务(nova)仅将虚拟机实例放在支持最小带宽的主机上。

您可以使用网络服务后端实施、资源分配调度强制或两者都应用 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. 使用网络服务后端强制强制实施最小带宽

您可以通过将 Red Hat OpenStack Platform (RHOSP)服务质量(QoS)策略应用到端口来确保为端口提供最小带宽。这些端口必须由扁平或 VLAN 物理网络支持。

注意

目前,带有 Open Virtual Network 机制驱动程序(ML2/OVN)的 Modular Layer 2 插件不支持最小带宽 QoS 规则。

先决条件

  • RHOSP 网络服务(neutron)必须加载 qos 服务插件。(这是默认值。)
  • 不要在同一物理接口中使用和不使用带宽保证的端口混合,因为这可能导致拒绝必要的资源(分片)到端口,而无需保证。

    提示

    创建主机聚合到将带宽保证与这些端口分开的端口,而无需带宽保证。

流程

  1. 提供您的凭据文件。

    示例

    $ source ~/overcloudrc

  2. 确认 qos 服务插件已加载到网络服务中:

    $ 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 的 ingress 和 egress 的 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 56x9aiw1-2v74-144x-c2q8-ed8w423a6s12

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

验证

  • ML2/SR-IOV

    使用 root 访问权限,登录 Compute 节点,并显示物理功能中持有的虚拟功能的详细信息。

    示例

    # 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

    使用 root 访问权限,登录到计算节点,显示物理网桥接口上的 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 策略应用到端口,以确保在其上生成 Red Hat OpenStack Platform (RHOSP)虚拟机实例的主机具有最小网络带宽。

先决条件

  • RHOSP 网络服务(neutron)必须加载 qosplacement 服务插件。默认情况下加载 qos 服务插件。
  • 网络服务必须支持以下 API 扩展:

    • agent-resources-synced
    • port-resource-request
    • qos-bw-minimum-ingress
  • 您必须使用 ML2/OVS 或 ML2/SR-IOV 机制驱动程序。
  • 只有当没有实例使用分配给策略的任何端口时,才能修改最小带宽 QoS 策略。如果绑定了端口,网络服务无法更新放置 API 使用信息。
  • 放置服务必须支持 microversion 1.29。
  • Compute 服务(nova)必须支持 microversion 2.72。

流程

  1. 提供您的凭据文件。

    示例

    $ source ~/overcloudrc

  2. 确认 qos 服务插件已加载到网络服务中:

    $ 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 的 ingress 和 egress 的 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 56x9aiw1-2v74-144x-c2q8-ed8w423a6s12

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

验证

  1. 以 stack 用户身份登录 undercloud 主机。
  2. 提供 undercloud 凭证文件:

    $ 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>

    示例

    在本例中,针对资源提供程序的声明在主机(dell-r730-014)上进行检查,使用资源提供程序 UUID e518d381-d590-5767-8f34-c20def34b252

    [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}}}

其他资源