OpenStack Manila on RDO


本ページは [OpenStack Advent Calendar 2015](http://www.adventar.org/calendars/968) に投稿しています。

OpenStack Manila は LIBERTY から正式にレディになりました。多くの可能性を秘めているサービスですがまずは**「ファイルサーバ（シェア）を作ってそれにアクセスする」**といった基本的な確認をしていきます。

>OpenStack Manila の概要をさくっとしりたい方はこちらをどうぞ。
<iframe src="//www.slideshare.net/slideshow/embed_code/key/oA8JxPb8OXolq" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/tsarah0822/openstack-manila-55315574" title="やっとでた！ OpenStack Manila" target="_blank">やっとでた！ OpenStack Manila</a> </strong> from <strong><a href="//www.slideshare.net/tsarah0822" target="_blank">tksarah</a></strong> </div>

# 流れ

1. OSインストール
2. RDOインストール
3. Packstack 実行
4. Network再設定
5. インスタンス作成と試行（確認用インスタンス）
6. Manila サービス確認

上記までは以下のページを参照ください。なお、1～5まではこの通りじゃなくとも、OpenStack のコアサービス＋Manila がちゃんと動いている状態であればかまいません。
[Manila を RDO で試してみる（準備編）](http://qiita.com/tksarah/items/dca0ee806779540a90c6)

続きをやっていきます。

# 関連サービスを整理
ここでこの後、読み進めるにあたって Manila との他のサービスの関連を表でまとめておきます。

| サービス名 | 関連性 | 補足説明 |
|:-----------:|:------------|:------------|
| Nova  |共有ファイルシステム（以下、シェア）へアクセス|許可されたインスタからアクセス|
| Glance |シェアサーバ用イメージ | Generic Driver 用に使われる|
| Cinder |シェアのための格納領域 |デフォルトはLVM|
| Neutron|セキュアマルチテナントを構成 | 3rd Party 側とも連携 |
| Sahara |データ格納領域|HDFS Driver によるインテグレーション|

シェアを作る上で実質的に必須なのは **Cinder**、**Neutron** です。Glance は Generic Driver を使わない場合にはシェアサーバ用イメージを使わないため不要です。Sahara は追加インテグレーションになるため必要に応じて利用します。

> シェアサーバ用イメージを使わない例として、バックエンドのストレージに NetApp FAS シリーズ を使う場合はそのストレージそのものがシェア（又はシェアを持つ仮想ストレージ）をマルチテナントで作成することができるため Glance は介在しません。

以下は Generic Driver を用いた場合の制御フローの概略図です。Manila の 3rd Party 製ドライバを利用する場合は、そこから直接 User Tenant のインスタンスへ共有プロトコル（NFSやCIFS）を提供します。

![ponchi.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/2ec431ee-4a35-d68b-723b-0bc5238ded7a.jpeg)



# Manila 設定
はじめに・・・Manilaのサービスはあがってますがそのままではシェアードファイルシステムサービスは利用できません。少しだけいくつか補足作業が必要でした。（確認バージョン：rdo-release-liberty-2.noarch）

## v2用エンドポイントを作る（admin）

```shell-session
# keystone service-create \
    --name manilav2 \
    --type sharev2 \
    --description "OpenStack Shared Filesystems V2"

# keystone endpoint-create \
    --service-id $(keystone service-list | awk '/ sharev2 / {print $2}') \
    --publicurl http://<your controller host>:8786/v2/%\(tenant_id\)s \
    --internalurl http://<your controller host>:8786/v2/%\(tenant_id\)s \
    --adminurl http://<your controller host>:8786/v2/%\(tenant_id\)s \
    --region regionOne
```

## Generic Driver 用のイメージの再登録（admin）

インストール後この Generic Driver 用イメージはセットアップされているが、これではブートできませんでした。（manila create をするとこのイメージがブートできないためシェア用インスタンスが作られずに失敗する）
以下のように既存のものを削除して、再登録しました。（このイメージは devstack により確認済みのイメージであり、RDO の アンサーファイルにも記述されている）

```
# glance image-delete manila-service-image
# wget https://www.dropbox.com/s/vi5oeh10q1qkckh/ubuntu_1204_nfs_cifs.qcow2
# glance image-create --name=manila-service-image --visibility public --disk-format=qcow2 --container-format=bare --file=ubuntu_1204_nfs_cifs.qcow2
```

## service_instance_flavor_id 変更
デフォルトでは **m1.tiny** となっており、これだと flavor が小さくて起動できないので、**m1.small** 以上にする。

```shell-session:/etc/manila/manila.conf
# grep flavor /etc/manila/manila.conf
service_instance_flavor_id=2
```
##【おまけ】テナント services に admin ロール付与（admin）
Manila で作成されるシェアサーバの実態は services テナント内で起動される専用のインスタンスです。また、シェア領域として作られる Cinder Volume も同様に services テナント内に作成されます。そのためこれらを admin ユーザで確認するために以下を設定しておくと便利です。

```shell-session
# keystone user-role-add --user=admin --role=_member_ --tenant=services
```
## NFS クライアント用インスタンス準備（demo）
NFSマウントできるようにNFSクライアント用のインスタンスを作成します。
ここでは、Fedora 23 のクラウドイメージ（ https://getfedora.org/ja/cloud/download/ ）を使います。

* インスタンス起動
* Floating IP 付与
* nfs-utils , bind-utils インストール

## シェア用ネットワーク（demo）
インスタンスはプライベートネットワークからシェア専用のネットワークを経由してManilaのシェア領域にアクセスします。

* 経由するプライベート用ネットワークのIDを確認（neutron net-list）
* プライベート用サブネットのIDを確認（neutron subnet-list）

```shell-session
# manila share-network-create --neutron-net-id 1870b612-8330-442e-aefa-23d88d13fc29 --neutron-subnet-id e5650c31-4f67-4805-a3d9-72f1b1a213b5 --name manila_share
```

## シェアのボリュームタイプの設定（admin）
Manila では Cinder 同様様々なシェアのタイプを設定できます。バックエンドのストレージドライバ別に設定したり、ドライバによっては更に**エクストラスペック**による指定も可能です。デフォルトのシェアタイプを作っておきます。

```shell-session
# manila type-create default_share_type True
```

# シェアの作成とアクセス

## シェア作成（demo）
シェア、つまりファイルサーバを作成します。

```shell-session
# manila create --name test-share --share-network manila_share --share-type default_share_type NFS 1
```

## アクセス許可設定（demo）
いわゆる作成したシェアにACLを設定します。

```shell-session
# manila access-allow test-share ip <private ip address of instance>
```

## クライアントからのNFSマウント
マウント情報は manila list や manila show で確認できます。以下は manila show の出力例。**export_locations** がマウントポイントのパラメータです。

```shell-session
# manila show test-share
+-----------------------------+----------------------------------------------------------------+
| Property                    | Value                                                          |
+-----------------------------+----------------------------------------------------------------+
| status                      | available                                                      |
| share_type_name             | default_share_type                                             |
| description                 | None                                                           |
| availability_zone           | nova                                                           |
| share_network_id            | 2f9ec151-e776-4abd-a3db-c1350f504900                           |
| export_locations            | 10.254.0.14:/shares/share-54650fba-5b73-4b06-9e93-4bb35b111ed9 |
| host                        | akira.tk.net@generic#generic                                   |
| snapshot_id                 | None                                                           |
| is_public                   | False                                                          |
| task_state                  | None                                                           |
| snapshot_support            | True                                                           |
| id                          | 71a9c8ee-d17b-43c0-855a-4c2c4f625d39                           |
| size                        | 1                                                              |
| name                        | test-share                                                     |
| share_type                  | 97ecf110-f403-4ac2-8bb1-b546824bddf8                           |
| created_at                  | 2015-11-25T15:03:10.000000                                     |
| share_proto                 | NFS                                                            |
| consistency_group_id        | None                                                           |
| source_cgsnapshot_member_id | None                                                           |
| project_id                  | f81e6a60c9584e35a8f890632fe6bf3e                               |
| metadata                    | {}                                                             |
+-----------------------------+----------------------------------------------------------------+
```

NFSクライアントからマウントします。以下はその例です。

```shell-session
# ip netns exec qrouter-a05eb3fb-b199-43f8-a01a-0329e79bf566 ssh -i cloud.key fedora@192.168.0.71
Last login: Wed Nov 25 14:32:35 2015 from 192.168.0.70
[fedora@demo-fedora23 ~]$ sudo mount -t nfs 10.254.0.14:/shares/share-54650fba-5b73-4b06-9e93-4bb35b111ed9 /mnt
[fedora@demo-fedora23 ~]$ df -h
Filesystem                                                      Size  Used Avail Use% Mounted on
devtmpfs                                                        990M     0  990M   0% /dev
tmpfs                                                          1001M     0 1001M   0% /dev/shm
tmpfs                                                          1001M  284K 1001M   1% /run
tmpfs                                                          1001M     0 1001M   0% /sys/fs/cgroup
/dev/vda1                                                        20G  626M   19G   4% /
tmpfs                                                           201M     0  201M   0% /run/user/1000
10.254.0.14:/shares/share-54650fba-5b73-4b06-9e93-4bb35b111ed9 1008M   34M  924M   4% /mnt
```

ちなみにこのクライアントでは **NFSv4** でマウントしています。

```shell-session
[fedora@demo-fedora23 ~]$ mount |grep /mnt
10.254.0.14:/shares/share-54650fba-5b73-4b06-9e93-4bb35b111ed9 on /mnt type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.5,local_lock=none,addr=10.254.0.14)
```

# 今後
やはり特徴的なのは、様々な 3rd Party Driver が使えることです。エンタープライズユーザにとっては抑えておきたいポイントであり、そこが**真骨頂**になります。よって、OSSで対応できるものや 3rd Party Driver を見ていきたいとおもいます。

# 参考

* http://docs.openstack.org/developer/manila/adminref/quick_start.html#installation-of-manila-binaries