OpenStack環境のCinderでONTAP利用④【CinderでONTAPのQoS利用設定メモ】

## はじめに
この記事では、最近検証環境を設定する必要があった経験をメモとして共有します。具体的には、**OpenStackのBlock StorageでONTAPを利用する方法**に焦点を当てています。

[前回の記事](https://qiita.com/s_yosh1d/items/42d187069fd3b86d1b70
)の続きとして、**Cinder Volumeの利用においてONTAPのQoSと連携させた設定についての内容**を記載します。

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/1f25a834-24af-22a2-9043-6d129aff5f51.png>


## 何をしたい？できる？
- Cinder VolumeでQoSを利用する
- 利用するCinderのQoS定義をONTAPのQoS Policy Groupと連携させる

## QoSとは？
Quality of Service（QoS）は、**パフォーマンス特性を制御するための機能で、Cinder volumeへのワークロードに対してIOPS（Input/Output Operations Per Second）の最大値や最小値を指定したり、帯域幅を制限する設定**が可能になります。
もちろん、**大元のStorageの限界を超えないような値を設定する必要があります。**

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/bafa3732-2498-cca1-040f-f789e3bd792c.png>


特に**ONTAPをBackend Storageとしている場合の設定方法については、2種類**あり、要件に応じて選択頂くことができます。

|設定方法  |概要|
|---|---|
|QoS Specの利用　　|Cinder側でQoSを定義する形で、ONTAPに個々のQoS PolicyGroupを新規作成 |
|extra-specsの利用|Cinder側でONTAPの既存QoS PolicyGroupを指定する形|





## 記事における環境情報
本記事では、以下の環境で実施した内容となります。
- ONTAP: 9.10.1 / 9.13.1 
- CentOS: 7
- Openstack: Queens
- **2つのONTAP Clusterを用意**
- **2種類のCinder Volume Typeとして設定(AFF/HDD)**
- **QoSの設定をMaxIOPSではなくMaxBPSで実施**

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/31639d1f-0e5f-121a-a5d0-b5179bf44f00.png>



## OpenStack CinderのQoS Specを利用したQoS設定
Cinder側で定義する形のQoS利用についての手順になりますが、Cinder Volumeを作成する度に、個別のQoS Policy groupがONTAP内に作成されます。
イメージとしては以下のような形です。

<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/3c088840-88bd-d449-73a2-fb48821a2e0b.png>


### 1. QoSの設定

#### 1-1. QoSスペックの設定
OpenStackのWeb管理画面からログインし、[管理]=>[ボリューム]=>[ボリューム種別]をクリックし、表示された画面で[QoSスペックの作成]を選択します。

<img width="700" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/e3129d0d-8cb4-5ccf-212a-5fafb5426d2a.png>

　
任意の名前を入力し、[作成]をクリックします。
<img width=500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/5fe3411d-461a-feae-c7be-f424bbf5770c.png>


#### 1-2. QoS値の設定
作成されたQoSスペックを指定して、[スペックの管理]を選択します。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/abd34ee3-4273-2763-76d5-c80c9ba5ad8e.png>

 　
表示された画面で、[作成]をクリックします。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/3715c7aa-d41f-2a11-872b-91fb445bb277.png>

　
表示された画面で、キーと値を入力し[作成]をクリックします。
ここでは最大5MB/secまでとした例になります。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/07560795-284c-1b51-3efd-03ee026a511a.png>


#### 1-3. QoSスペックとVolume typeの紐づけ
QoSと紐づけするボリューム種別の[QoSスペックの関連付けの管理]を選択します。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/116c9154-af81-0951-ad94-8eb33332de65.png>

表示された画面で、作成したQoSスペックを指定して[割り当て]をクリックします。

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/10b1ef37-ab76-4fd1-79d1-35b09c63c0ef.png>



#### 1-4. Cinder Volumeの作成
[プロジェクト]=>[ボリューム]=>[ボリューム]をクリックし、表示された画面で[ボリュームの作成]を選択します。
<img width="700" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/efdf08a6-3093-2eb0-99e8-cee8b2fce9df.png>

　
QoSを割り当てた種別を指定した上で作成を実施します。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/bc5ba86f-21c2-fa4e-668d-d61fa63baf11.png>


作成されたVolumeをクリックし、IDの確認を行います。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/965925f5-976b-6ef9-7218-e9668148cf6e.png>

　
ONTAP側でQoSの設定を確認すると、File(Cinder Volume)に対してQoSが設定されている事が確認できます。

- QoSのPolicy Group名
  openstack-91e3f18a-4ed4-4c4d-9ee3-a37d1e4b8483
　
- NFS Volume内に作成されるファイル名
  volume-91e3f18a-4ed4-4c4d-9ee3-a37d1e4b8483


```bash:
> qos policy-group show -vserver openstack01
Name             Vserver     Class        Wklds Throughput   Is Shared
---------------- ----------- ------------ ----- ------------ ---------
openstack-91e3f18a-4ed4-4c4d-9ee3-a37d1e4b8483
                 openstack01 user-defined 1     0-5MB/s      true



> qos workload show -vserver openstack01
Workload       Wid   Policy Group Vserver  Volume   LUN    Qtree  File Path
-------------- ----- ------------ -------- -------- ------ ------ -------------
file-volume_91e3f18a_4ed4_4c4d_9ee3_a37d1e4b8483-wid16792
               16792 openstack-91e3f18a-4ed4-4c4d-9ee3-a37d1e4b8483
                                  openstack01
                                           nfs01    -      -      volume-91e3f18a-4ed4-4c4d-9ee3-a37d1e4b8483
```


## 事前に作成したONTAP QoS Policyを利用
事前にONTAP側でQoS Policy設定を実施しておき、Cinder Volumeの種別でONTAPのQoS Policy名をextra-specで指定しておくことでQoSが利用できるようになります。
イメージとしては以下のような形です。

<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/a21e969f-529b-6bda-8b6a-a8aa85323360.png>


### 2. 既存ONTAP QoS Policyの利用


#### 2-1. ONTAP側でQoS Policy作成
QoSを定義したいCinder volumeのBackend定義されているONTAPでQoS Policyを最大10MB/sで作成します。
**作成時に -is-sharedをfalseを指定することで個々のCinder volume毎に10MB/sで利用可能**ます。
(Cinder Volumeを2つ作成するとそれぞれに10MB/s設定となる)


```bash:
> qos policy-group create -vserver openstack02 -policy-group policy001 -is-shared false -max-throughput 10mb/s


> qos policy-group show -vserver openstack02
Name             Vserver     Class        Wklds Throughput   Is Shared
---------------- ----------- ------------ ----- ------------ ---------
policy001        openstack02 user-defined 0     0-10MB/s     false
```


#### 2-2. Volume typeとの紐づけ
OpenStackのWeb管理画面からログインし、[管理]=>[ボリューム]=>[ボリューム種別]をクリックし、表示された画面で対象の種別[追加スペックの表示]を選択します。

<img width="700" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/0f0c80c4-5ae2-914a-3893-93439d7b01ab.png>

 　
表示された画面で、[+作成]をクリックします。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/1125dde0-cec2-9689-ab5d-4e99ba572f76.png>
　

表示された画面で、キーと値を入力し[作成]をクリックします。
**キーには、netapp:qos_policy_groupを入力し、値には先程作成したONTAPのQOS Policyを入力します。**
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/0d253a97-9fdf-0088-7480-3ffafc16c33b.png>



#### 2-3. Cinder Volumeの作成
[プロジェクト]=>[ボリューム]=>[ボリューム]をクリックし、表示された画面で[ボリュームの作成]を選択します。
<img width="700" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/efdf08a6-3093-2eb0-99e8-cee8b2fce9df.png>

　
追加スペックでQoS Policyを設定した種別を指定して作成を実施します。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/cdf07b07-45ae-f3f9-9cf6-0f76b142963b.png>

　
作成されたVolumeをクリックし、IDの確認を行います。
<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/95d2572b-5992-1462-430b-e8f9fe219a1b.png>




ONTAP側でQoSの設定を確認すると、File(Cinder Volume)に対してQoSが設定されている事が確認できます。

- QoSのPolicy Grouo名
  policy001
　
- NFS Volume内に作成されるファイル名
  volume-ebfbb723-0859-4165-9a71-11ae62b88384


```bash:
> qos policy-group show -vserver openstack02
Name             Vserver     Class        Wklds Throughput   Is Shared
---------------- ----------- ------------ ----- ------------ ---------
policy001        openstack02 user-defined 1     0-10MB/s     false


> qos workload show -vserver openstack02
Workload       Wid   Policy Group Vserver  Volume   LUN    Qtree  File Path
-------------- ----- ------------ -------- -------- ------ ------ -------------
file-volume_ebfbb723_0859_4165_9a71_11ae62b88384-wid24667
               24667 policy001    openstack02
                                           nfs02    -      -      volume-ebfbb723-0859-4165-9a71-11ae62b88384
```



## 参考及びリンク
[OpenStack Docs: Key Concepts](https://netapp-openstack-dev.github.io/openstack-docs/queens/cinder/key_concepts/section_cinder-key-concepts.html)

[QoS の概要を使用してスループットを保証](https://docs.netapp.com/ja-jp/ontap/performance-admin/guarantee-throughput-qos-task.html)

[OpenStack環境のCinderでONTAP利用①【Packstack利用のOpenStack QueensのAll in One Installメモ】](https://qiita.com/s_yosh1d/private/29a32c5838f33898b77c)

[OpenStack環境のCinderでONTAP利用②【OpenStack Queensの初期設定メモ】](https://qiita.com/s_yosh1d/private/c0d4ff25fffc1d69a908)

[OpenStack環境のCinderでONTAP利用③【CinderでONTAPの利用設定メモ】](https://qiita.com/s_yosh1d/private/42d187069fd3b86d1b70)