10.2.2. 最小帯域幅を確保する QoS ポリシーおよびルールの作成と適用
物理ネットワーク (physnet) がサポートする segmentation_type=flat
または segmentation_type=vlan
が設定されたネットワークのポートに対して、帯域幅の確保を要求することができます。
- 同じ物理インターフェース上で、帯域幅を確保するポートと確保しないポートを混在させないでください。確保しないポートの帯域幅が不足する可能性があるためです。ホストアグリゲートを作成して、帯域幅を確保するポートを確保しないポートから分離します。
- 最小帯域幅を確保する QoS ポリシーを変更できるのは、ポリシーが割り当てられたポートを使用するインスタンスがない場合に限ります。
サポートされているドライバーおよびエージェント
- SR-IOV (sriovnicswitch) vnic_types: direct、macvtap
ML2/OVS (openvswitch) vnic_types: normal、direct
注記ML2/OVN は最小帯域幅をサポートしません。
前提条件
- Placement サービスは、マイクロバージョン 1.29 をサポートする必要があります。
- Compute (nova) サービスは、マイクロバージョン 2.72 をサポートする必要があります。
Networking (neutron) サービスは、以下の API 拡張機能をサポートする必要があります。
-
agent-resources-synced
-
port-resource-request
-
qos-bw-minimum-ingress
-
-
OpenStack CLI を使用して配置情報を照会するには、アンダークラウドに Placement サービスパッケージ
python3-osc-placement
をインストールします。
手順
Openstack Networking で Placement サービスプラグインがまだ設定されていない場合には、以下の手順を実施します。
カスタム環境ファイルに
NeutronServicePlugins
がすでに設定されている場合には、パラメーターを更新して「placement」を含めます。そうでなければ、カスタム環境ファイルを作成して以下の設定を追加します。parameter_defaults: NeutronServicePlugins: 'router,qos,segments,trunk,placement'
この設定を適用するには、その他の環境ファイルと共にカスタム環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
(undercloud) $ openstack overcloud deploy --templates \ -e [your environment files] -e /home/stack/templates/network-environment.yaml
詳しい情報は、『director のインストールと使用方法』の「オーバークラウド環境の変更」を参照してください。
(オプション)
vnic_types
をブラックリストに登録するには (複数の ML2 メカニズムドライバーがデフォルトでサポートし、複数のエージェントが Placement により追跡されている場合)、/etc/neutron/plugins/ml2/ml2_conf.ini
にvnic_type_blacklist
を追加して、エージェントを再起動します。[ovs_driver] vnic_type_blacklist = direct [sriov_driver] #vnic_type_blacklist = direct
最小帯域幅を提供する必要のある各コンピュートノードの該当するエージェントに対して、リソースプロバイダーの受信および送信帯域幅を設定します。以下の形式を使用して、受信もしくは送信のみ、またはその両方を設定することができます。
送信帯域幅だけを設定する場合 (kbps 単位):
resource_provider_bandwidths = <bridge0>:<egress_kbps>:,<bridge1>:<egress_kbps>:,...,<bridgeN>:<egress_kbps>:
受信帯域幅だけを設定する場合 (kbps 単位):
resource_provider_bandwidths = <bridge0>::<ingress_kbps>,<bridge1>::<ingress_kbps>,...,<bridgeN>::<ingress_kbps>
送信および受信帯域幅の両方を設定する場合 (kbps 単位):
resource_provider_bandwidths = <bridge0>:<egress_kbps>:<ingress_kbps>,<bridge1>:<egress_kbps>:<ingress_kbps>,...,<bridgeN>:<egress_kbps>:<ingress_kbps>
以下に例を示します。
OVS エージェント用にリソースプロバイダーの受信および送信帯域幅を設定するには、
/etc/neutron/plugins/ml2/openvswitch_agent.ini
にresource_provider_bandwidths
を追加します。[ovs] bridge_mappings = physnet0:br-physnet0 resource_provider_bandwidths = br-physnet0:10000000:10000000
SRIOV エージェント用にリソースプロバイダーの受信および送信帯域幅を設定するには、
/etc/neutron/plugins/ml2/sriov_agent.ini
にresource_provider_bandwidths
を追加します。[sriov_nic] physical_device_mappings = physnet0:ens5,physnet0:ens6 resource_provider_bandwidths = ens5:40000000:40000000,ens6:40000000:40000000
リソースプロバイダーの帯域幅を実装するには、設定したエージェントを再起動します。
QoS ポリシーを作成するプロジェクトの ID を特定します。
(overcloud) $ openstack project list +----------------------------------+----------+ | ID | Name | +----------------------------------+----------+ | 4b0b98f8c6c040f38ba4f7146e8680f5 | auditors | | 519e6344f82e4c079c8e2eabb690023b | services | | 80bf5732752a41128e612fe615c886c6 | demo | | 98a2f53c20ce4d50a40dac4a38016c69 | admin | +----------------------------------+----------+
admin
プロジェクトに「guaranteed_min_bw」という名前の QoS ポリシーを作成します。(overcloud) $ openstack network qos policy create --share --project 98a2f53c20ce4d50a40dac4a38016c69 guaranteed_min_bw
「guaranteed_min_bw」ポリシーのルールを設定します。
(overcloud) $ openstack network qos rule create --type minimum-bandwidth --min-kbps 40000000 --ingress guaranteed_min_bw (overcloud) $ openstack network qos rule create --type minimum-bandwidth --min-kbps 40000000 --egress guaranteed_min_bw
「guaranteed_min_bw」ポリシーを適用するポートを設定します。
(overcloud) $ openstack port set --qos-policy guaranteed_min_bw <port_name|port_ID>
検証
利用可能なすべてのリソースプロバイダーを一覧表示します。
(undercloud) $ 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 によって提供される帯域幅が示されています。
[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>
出力例:
[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}}}