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

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

[前回の記事](https://qiita.com/s_yosh1d/private/c0d4ff25fffc1d69a908
)の続きとして、**All in One構成上に作成したインスタンスでONTAのNFS Volumeを利用する為のCinder 設定に関する内容**を記載します。

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/dd134a6e-dba2-b5e1-b0db-fac728a6725a.png>



## 何をしたい？できる？
- All in One構成のOpenStackのCinder機能でONTAPのVolumeを利用する


## 記事における環境情報
本記事では、以下の環境で実施した内容となります。
- ONTAP: 9.10.1
- CentOS: 7
- Openstack: Queens
- OpenstackはHyper-Vの仮想マシンへ導入
- Networkは1つのセグメントを用意　(検証なのでシンプル構成)


<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/e453640f-9550-1ada-e53b-fca86dc91ae6.png>

## Cinderを構成するコンポーネントについて

Cinderに関連するコンポーネントは、以下表の通りになります。

|コンポーネント  |説明  |
|---|---|
|cinder-volume  |ボリュームのライフサイクル全体を管理  |
|cinder-scheduler  |ボリューム作成の種別の決定やフィルタリング|
|cinder-backup  |ボリュームのバックアップを管理|


## ONTAPを利用したCinder Volume提供の為の設定

### 1. ONTAP上でSVM、LIF、Volumeの作成
OpenStackからNFS接続できるようにする為、ONTAP側でNFSアクセスができるようなSVMとLIF、Volumeの作成を実施します。


#### 1-1. SVM作成
```bash:
# SVMの作成
> vserver create -vserver openstack01 -subtype default -rootvolume openstack01_root -rootvolume-security-style unix
[Job 74021] Job succeeded:
Vserver creation completed.
```

#### 1-2. NFS mount用のLIFを作成
```bash:
> net int create -vserver openstack01 -lif data01 -service-policy default-data-files -address 172.16.10.244 -netmask 255.255.255.0 -home-node PS-A220-01 -home-port a0a-10
  (network interface create)
```

#### 1-3. NFS Volumeの作成
All Flash FASにおける作業の為、ここでは重複排除等の設定はデフォルトで有効化されます。
```bash:
> volume  create -vserver openstack01 -volume nfs01 -aggregate aggr1_node1 -size 20g -space-guarantee none -junction-path /nfs01 -snapshot-policy none

Warning: The export-policy "default" has no rules in it. The volume will therefore be inaccessible over NFS and CIFS protocol.
Do you want to continue? {y|n}: y
[Job 74022] Job succeeded: Successful
```

#### 1-4. NFSサービスの開始
検証環境なので、NFSv4のDomain設定等の細かい設定は割愛しています。
```bash:
> nfs create -vserver openstack01
```

#### 1-5. Export Policyの修正
All in one構成のOpenStackからのみNFS mountされるので、OpenStackと同一セグメントからのアクセスを許可します。
(作成したインスタンスから直接NFS mountではない)

```bash:
> export-policy rule create -vserver openstack01 -policyname default -clientmatch 172.16.10.0/24 -rorule any -rwrule any -anon 0
```

#### 1-6. HTTPアクセスの有効化
本記事では、cinder.confファイルの記載で接続プロトコルにhttpを使うので、ONTAP側でも疎通可能な状態にしておきます。

```bash:
> set advanced
Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel.
Do you want to continue? {y|n}: y

*> system service web modify -http-enabled true
```



### 2. Cinderの設定

作成したONTAPのSVMを利用する為、All in one構成のOpenStack側の操作を実施します。
**操作はCLIで実施します。**

本記事環境の設定イメージとしては以下のような形です。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/f52dc74e-be85-a51a-9e7b-10eb5f4c8eef.png>


#### 2-1. OpenStackへのSSHログイン
All in one のOpenStackにSSHログインして、OpenStackのadmin権限を読み込み、管理者専用 CLI コマンドへのアクセス権を取得します。

```bash:
[root@queens ~]# ls
anaconda-ks.cfg  keystonerc_admin  queens_answers.cfg

[root@queens ~]# source keystonerc_admin
[root@queens ~(keystone_admin)]#
```



#### 2-2. cinder.confファイルの修正

/etc/cinder/cinder.confの修正を実施します。
まずは、接続するONTAPの情報を記載します。

- 接続するONTAP ClusterのCluster管理IP及びアカウントの記載
- 接続時に利用するプロトコル記載
- 利用するSVM名の記載
- SVMのIPとjunctionPathを記載するファイルのパスを記載
- SVMのIPとjunctionPathは別ファイルで記載

```bash:
[root@queens ~(keystone_admin)]# cat  /etc/cinder/cinder.conf 

(中略)
enabled_backends=lvm,ontap-aff01
(中略)

[ontap-aff01]
volume_backend_name=ontap-aff01
volume_driver=cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname=172.16.10.195
netapp_server_port=80
netapp_storage_protocol=nfs
netapp_storage_family=ontap_cluster
netapp_login=admin
netapp_password=PaSSP@ssTest1235
netapp_vserver=openstack01
nfs_shares_config=/etc/cinder/share01.config


[root@queens ~(keystone_admin)]# cat /etc/cinder/share01.config
172.16.10.244:/nfs01
```

#### 2-3. Cinderサービスの再起動
設定値を有効にする為、Cinderサービスを再起動します。
サービス一覧で、追加したONTAPについて、cinder-volumeとして追加されStatusがenabledでUP状態になっている事を確認します。
```bash:
[root@queens ~(keystone_admin)]# systemctl restart openstack-cinder*

[root@queens ~(keystone_admin)]# cinder service-list
+------------------+--------------------------+------+---------+-------+----------------------------+-----------------+
| Binary           | Host                     | Zone | Status  | State | Updated_at                 | Disabled Reason |
+------------------+--------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-backup    | queens.local             | nova | enabled | up    | 2024-03-21T06:58:54.000000 | -               |
| cinder-scheduler | queens.local             | nova | enabled | up    | 2024-03-21T06:59:00.000000 | -               |
| cinder-volume    | queens.local@lvm         | nova | enabled | up    | 2024-03-21T06:58:56.000000 | -               |
| cinder-volume    | queens.local@ontap-aff01 | nova | enabled | up    | 2024-03-21T06:59:00.000000 | -               |
+------------------+--------------------------+------+---------+-------+----------------------------+-----------------+
```



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

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/64f4d3f5-1e26-cfdc-e3f5-d65dec31076a.png>

任意の名前を入力し、[ボリューム種別の作成]をクリックします。

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/85293f96-0eac-aefc-5b03-ee33dc7798ef.png>

作成されたボリューム種別の右側から[追加スペックの表示]を選択します。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/d26cf374-85d6-3f91-d519-ea273299aa39.png>


表示された画面で[+作成]をクリックします。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/f7ec8ca8-75da-5a02-ba8d-d7725a6c5c74.png>

キーにvolume_backend_nameを入力し、値にcinder.confへ追記したontap-aff01を入力し[作成]をクリックします。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/618af9a0-8612-358b-a548-fd6f1a29d5f6.png>



### 4. Cinder Volume作成とインスタンスへの接続


#### 4-1. Cinder Volumeの作成

[プロジェクト]=>[ボリューム]=>[ボリューム]をクリックし、表示された画面で[ボリュームの作成]を選択します。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/2df95b89-7c89-1c9f-0507-474a6049d6e4.png>

表示された画面で任意のVolume名とサイズを入力し、**種別は先程定義したONTAPのものを指定**して、[ボリュームの作成]をクリックします。

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/67faf62d-d1b2-a369-ce73-224eb2fa9a7e.png>



Volumeの作成に成功すると、OpenStack側でNFS mountしているONTAP Volume上にcinder volumeのファイルが作成されているのが確認できます。

```bash:
[root@queens ~(keystone_admin)]# df -h |grep nfs01
172.16.10.244:/nfs01   19G  320K   19G   1% /var/lib/cinder/mnt/833067e7f79fa5e29491446c3ad99bdf

[root@queens ~(keystone_admin)]# ls -al /var/lib/cinder/mnt/833067e7f79fa5e29491446c3ad99bdf
total 4
drwxr-xr-x 2 nobody nobody       4096 Mar 21 17:35 .
drwxr-xr-x 3 cinder cinder         46 Mar 21 15:57 ..
-rw-rw---- 1 nobody nobody 3221225472 Mar 21 17:35 volume-87cad616-cc73-432a-8127-74c2a4e9b6d0

[root@queens ~(keystone_admin)]# cinder list
+--------------------------------------+-----------+-------+------+-------------+----------+--------------------------------------+
| ID                                   | Status    | Name  | Size | Volume Type | Bootable | Attached to                          |
+--------------------------------------+-----------+-------+------+-------------+----------+--------------------------------------+
| 2063d3ad-19ca-4e2c-a7d1-e933d2a83998 | in-use    |       | 1    | iscsi       | true     | d83abf48-9562-42a5-8dad-3cc0847f3cd7 |
| 87cad616-cc73-432a-8127-74c2a4e9b6d0 | available | vol01 | 3    | ONTAP-AFF01 | false    |                                      |
+--------------------------------------+-----------+-------+------+-------------+----------+--------------------------------------+
```

#### 4-2. インスタンスへのCinder Volume接続

[プロジェクト]=>[コンピュート]=>[インスタンス]をクリックし、表示された画面でインスタンスを指定して[ボリュームの接続]を選択します。

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/388d0801-e4b2-13bb-f73b-c4cc2dacd0d2.png>

表示された画面で、先ほど作成したCinder Volumeを指定し、[ボリュームの接続]をクリックします。

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/01fd34f6-2117-37a4-10d0-964e9a65df11.png>


#### 4-3. インスタンスへログインしてCinder Volumeでファイルシステム作成
Cinder Volume接続したインスタンスにFloating IPが割り当てられていることを確認後、SSHでログインを実施します。

```bash:
PS C:\temp\sshkey> ssh -i admin-pair01.pem cirros@172.16.10.243
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'admin-pair01.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "admin-pair01.pem": bad permissions
cirros@172.16.10.243's password:
```

接続したCinder Volumeを指定してパーティション作成を実施します。
```bash:
# 作成した3GBのcinder volumeが見えている事の確認
$ sudo fdisk -l
(中略)
Disk /dev/vdb: 3 GiB, 3221225472 bytes, 6291456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


# パーティション作成
$ sudo fdisk  /dev/vdb

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x64392dae.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-6291455, default 2048): 2048
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-6291455, default 6291455): 6291455

Created a new partition 1 of type 'Linux' and of size 3 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
```

ファイルシステムを作成してmountを実施します。
```bash:
$ sudo mke2fs -t ext4 /dev/vdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 786176 4k blocks and 196608 inodes
Filesystem UUID: e2173ca0-0193-42b7-b6c1-499c3d704bb5
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

$ sudo mkdir /ontap
$ sudo mount /dev/vdb1 /ontap
$ df -h
Filesystem                Size      Used Available Use% Mounted on
/dev                    224.6M         0    224.6M   0% /dev
/dev/vda1               960.8M     43.2M    886.0M   5% /
tmpfs                   233.1M         0    233.1M   0% /dev/shm
tmpfs                   233.1M    100.0K    233.0M   0% /run
/dev/vdb1                 2.9G     24.0K      2.7G   0% /ontap
```




## 参考及びリンク
[NetApp unified driver](https://docs.openstack.org/cinder/queens/configuration/block-storage/drivers/netapp-volume-driver.html)

[Cinder Driver Support Matrix](https://docs.openstack.org/cinder/latest/reference/support-matrix.html)

[OpenStackプライベート クラウド](https://www.netapp.com/ja/hybrid-cloud/redhat/openstack-private-cloud/)

[Deployment and Operations Guide](https://netapp-openstack-dev.github.io/openstack-docs/queens/)

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