9.3. 使用 QoS 策略控制最小带宽
对于 Red Hat OpenStack Platform (RHOSP)网络服务(neutron),可以在两个不同的上下文中强制实施保证最小带宽 QoS 规则:网络服务后端强制和资源分配调度强制。
网络后端 ML2/OVS 或 ML2/SR-IOV 会尝试保证应用该规则的每个端口都小于指定的网络带宽。
当您使用资源分配调度带宽强制时,计算服务(nova)仅将虚拟机实例放在支持最小带宽的主机上。
您可以使用网络服务后端强制、资源分配调度实施或两者都应用 QoS 最小带宽规则。
下表标识支持最小带宽 QoS 策略的 Modular Layer 2 (ML2)机制驱动程序。
ML2 机制驱动程序 | Agent | VNIC 类型 |
---|---|---|
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 Networking 服务(neutron)必须载入
qos
服务插件。(这是默认值。) 不要将具有和没有带宽保证的端口混合到同一物理接口,因为这可能导致在不保证的情况下将所需的资源(打包)拒绝端口。
提示创建主机聚合以将带宽保证与那些端口分开,而无需带宽保证。
流程
提供您的凭据文件。
示例
$ source ~/overcloudrc
确认
qos
服务插件已加载到网络服务中:$ openstack network qos policy list
如果没有加载
qos
服务插件,则您会收到ResourceNotFound
错误,且您必须加载qos
服务插件,然后才能继续。更多信息请参阅 第 9.2 节 “为 QoS 策略配置网络服务”。识别您要为其创建 QoS 策略的项目 ID:
$ openstack project list
输出示例
+----------------------------------+----------+ | ID | Name | +----------------------------------+----------+ | 4b0b98f8c6c040f38ba4f7146e8680f5 | auditors | | 519e6344f82e4c079c8e2eabb690023b | services | | 80bf5732752a41128e612fe615c886c6 | demo | | 98a2f53c20ce4d50a40dac4a38016c69 | admin | +----------------------------------+----------+
使用上一步中的项目 ID,为项目创建一个 QoS 策略。
示例
在本例中,为
admin
项目创建一个名为guaranteed_min_bw
的 QoS 策略:$ openstack network qos policy create --share \ --project 98a2f53c20ce4d50a40dac4a38016c69 guaranteed_min_bw
配置策略的规则。
示例
在本例中,为名为
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
配置端口以将策略应用到。
示例
在本例中,
guaranteed_min_bw
策略应用于端口 ID56x9aiw1-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
其他资源
- 命令行界面参考中的 network qos policy create
- 命令行界面参考中的 network qos 规则创建
- 命令行界面参考中的 端口集
9.3.2. 使用最小带宽 QoS 策略调度实例
您可以将最小带宽 QoS 策略应用到端口,以确保生成其 Red Hat OpenStack Platform (RHOSP)虚拟机实例的主机具有最低网络带宽。
先决条件
-
RHOSP Networking 服务(neutron)必须载入
qos
和placement
服务插件。默认情况下加载qos
服务插件。 网络服务必须支持以下 API 扩展:
-
agent-resources-synced
-
port-resource-request
-
qos-bw-minimum-ingress
-
- 您必须使用 ML2/OVS 或 ML2/SR-IOV 机制驱动程序。
- 只有当没有使用该策略的任何端口的实例时,才能修改最小带宽 QoS 策略。如果端口绑定,网络服务将无法更新放置 API 使用量信息。
- 放置服务必须支持微版本 1.29。
- Compute 服务(nova)必须支持 microversion 2.72。
流程
提供您的凭据文件。
示例
$ source ~/overcloudrc
确认
qos
服务插件已加载到网络服务中:$ openstack network qos policy list
如果没有加载
qos
服务插件,则您会收到ResourceNotFound
错误,且您必须加载qos
服务插件,然后才能继续。更多信息请参阅 第 9.2 节 “为 QoS 策略配置网络服务”。识别您要为其创建 QoS 策略的项目 ID:
$ openstack project list
输出示例
+----------------------------------+----------+ | ID | Name | +----------------------------------+----------+ | 4b0b98f8c6c040f38ba4f7146e8680f5 | auditors | | 519e6344f82e4c079c8e2eabb690023b | services | | 80bf5732752a41128e612fe615c886c6 | demo | | 98a2f53c20ce4d50a40dac4a38016c69 | admin | +----------------------------------+----------+
使用上一步中的项目 ID,为项目创建一个 QoS 策略。
示例
在本例中,为
admin
项目创建一个名为guaranteed_min_bw
的 QoS 策略:$ openstack network qos policy create --share \ --project 98a2f53c20ce4d50a40dac4a38016c69 guaranteed_min_bw
配置策略的规则。
示例
在本例中,为名为
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
配置端口以将策略应用到。
示例
在本例中,
guaranteed_min_bw
策略应用于端口 ID56x9aiw1-2v74-144x-c2q8-ed8w423a6s12
:$ openstack port set --qos-policy guaranteed_min_bw \ 56x9aiw1-2v74-144x-c2q8-ed8w423a6s12
验证
- 以 stack 用户身份登录 undercloud 主机。
查找 undercloud 凭证文件:
$ source ~/stackrc
列出所有可用资源供应商:
$ 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 | +--------------------------------------+-----------------------------------------------------+------------+--------------------------------------+--------------------------------------+
检查特定资源提供的带宽。
(undercloud)$ openstack --os-placement-api-version 1.17 \ resource provider inventory list <rp_uuid>
示例
在本例中,由主机
dell-r730-014
上的接口enp6s0f1
提供的带宽被检查,使用资源供应商 UUIDe518d381-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 | +----------------------------+------------------+----------+------------+----------+-----------+----------+
要在实例运行时检查资源供应商的声明,请运行以下命令:
(undercloud)$ openstack --os-placement-api-version 1.17 \ resource provider show --allocations <rp_uuid>
示例
在本例中,针对资源提供程序的声明在主机(
dell-r730-014
)上进行检查,使用资源提供程序 UUIDe518d381-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}}}
其他资源
- 命令行界面参考中的 network qos policy create
- 命令行界面参考中的 network qos 规则创建
- 命令行界面参考中的 端口集