Mirantis OpenStack 8.0をVirtualBox上で試してみる

# 概要

Mirantis OpenStack 8.0がVirtualBox上で手軽に試せそうだったので、実際に試してみました。

# 環境

以下のMacbook Proで試しています。

* Mac OSX El Capitan
* プロセッサ: Intel Core i7
* プロセッサ速度: 3.1GHz
* プロセッサの個数: 1
* プロセッサコア数: 2
* メモリ: 16GB

[Supported Host Operating Systems and VirtualBox Versions](https://docs.mirantis.com/openstack/fuel/fuel-8.0/quickstart-guide.html#supported-host-operating-systems-and-virtualbox-versions)には、古いOS (Mac OS 10.7.5 (Lion)) やVirtualBoxのバージョンが記載されていますが、とりあえず最新でも確認はできました。

# 構築手順

基本的な手順は、Mirantisのページに記載されている[QuickStart Guide](https://docs.mirantis.com/openstack/fuel/fuel-8.0/quickstart-guide.html)に従って実施しています。

ただし、このガイドにはFuelを入れるところまでしか記載されておらず、それ以降はほとんどマニュアル等を見ずに実施したので、間違い等があるかもしれません。

## 事前準備

[Prerequisites](https://docs.mirantis.com/openstack/fuel/fuel-8.0/quickstart-guide.html#prerequisites)に従って手順実行に必要な資材を用意します。

Oracle VirtualBoxとOracle VM VirtualBox Extension Packは、Homebrew caskを使ってインストールしました。

```shell-session
$ brew cask install virtualbox
$ brew cask install virtualbox-extension-pack
```

また、[Download Mirantis OpenStack](https://software.mirantis.com/openstack-download-form/)のページから"Mirantis OpenStack 8.0 ISO"と"VirtualBox Scripts"をダウンロードします。ダウンロードしたVirtualBoxスクリプトが入ったZIPファイルを適当なディレクトリに解凍後、ISOファイルを"virtualbox/iso/"ディレクトリに移動しておきます。

```shell-session
$ unzip vbox-scripts-8.0.zip
$ mv MirantisOpenStack-8.0.iso virtualbox/iso/
$ cd virtualbox/
```

## Fuelマスターとスレーブの構築

Mirantis OpenStackでは、Fuelという管理ツールを使ってOpenStackをデプロイします。ダウンロードしたVirtualBoxスクリプトを使うことで、仮想ネットワーク、Fuelマスターノード、スレーブノードを簡単に構築できます。

構築用のスクリプトとして、`launch.sh`, `launch_8GB.sh`, `launch_16GB.sh`の３種類があります。メモリ１６GBあるので何も考えずに`launch_16GB.sh`を実行すると、Fuelマスターノード用に１台、スレーブノード用に5台の合計6台のVMが起動してきてスペック的に辛いので、今回はスレーブ３台を起動する`launch.sh`を使っています。デフォルトだとスレーブに割り当てられるメモリが少ないため、今回はスレーブにそれぞれ6GB/4GB/4GBを割り当てるように、`config.sh`の168行目から170行目を以下のように修正しました。

```
150 if [ "$CONFIG_FOR" = "16GB" ]; then
151   vm_slave_memory_default=1536
152
153   vm_slave_memory_mb[1]=2048
154   vm_slave_memory_mb[2]=2048
155   vm_slave_memory_mb[3]=2048
156   vm_slave_memory_mb[4]=2048
157   vm_slave_memory_mb[5]=2048
158 elif [ "$CONFIG_FOR" = "8GB" ]; then
159   vm_slave_memory_default=1024
160
161   vm_slave_memory_mb[1]=1536
162   vm_slave_memory_mb[2]=1536
163   vm_slave_memory_mb[3]=1536
164 else
165   # Section for custom configuration
166   vm_slave_memory_default=1024
167
168   vm_slave_memory_mb[1]=6144
169   vm_slave_memory_mb[2]=4096
170   vm_slave_memory_mb[3]=4096
171   # vm_slave_memory_mb[1]=2048
172   # vm_slave_memory_mb[2]=1024
173   # vm_slave_memory_mb[3]=1024
174 fi
```

あとは`sh launth.sh`を実行すれば、自分の環境では１時間弱くらいでFuelマスターノードとスレーブノードが構築されました。

ただし、本来であれば、(1) Fuelマスターノード構築、(2) ブートストラップイメージ作成、(3) Fuelスレーブノード構築となるようですが、(2)の完了を待たずにスレーブのVMが作成され、起動待ち状態のままスクリプトの実行が完了することがありました。その状態で後述のFuelダッシュボードにアクセスすると、以下のエラーメッセージが表示され、スレーブを自動検出できません。

```
There is no active bootstrap. Bootstrap image building is in progress.
Usually it takes 15-20 minutes. It depends on your internet connection
and hardware performance. Please reboot failed to discover nodes after
bootstrap image become available.
```

その場合には、３０分くらい待つとブートストラップイメージが作成されるため、うまくいけば何もせずに勝手にスレーブがそのイメージから起動して自動検出されます。ただし、タイムアウトが発生して起動できなかったスレーブがある場合には、VirtualBoxから再起動することで自動検出されるようになります。

なお、VirtualBoxのGUIがVMごとに表示されますが、それが邪魔ならば、上記`config.sh`の`headless=0`の値を`1`にすることで表示されなくなると思います。

## Fuelダッシュボードへのアクセス

構築完了後、コンソール上に表示された以下のメッセージに従いブラウザで`http://10.20.0.2:8000/`にアクセスすると、Fuelダッシュボードが表示されます。

```
To access master node, please point your browser to:
    http://10.20.0.2:8000/
The default username and password is admin:admin
```

## Fuelプラグインのインストール

このままOpenStackを構築してもいいのですが、いくつかFuelプラグインを試したかったため、Fuelダッシュボードの"Plugins"から参照している[Plugins Catalog](https://www.mirantis.com/validated-solution-integrations/fuel-plugins/)にアクセスして興味あるプラグインをダウンロードします。

今回は、Monitoringカテゴリーにある以下をインストールしています。

* ElasticSearch/Kibana Fuel Plugin
* InfluxDB/Grafana Fuel Plugin
* LMA Collector Fuel Plugin
* LMA Nagios Fuel Plugin

FuelマスターノードにSSHでログイン後 (デフォルトのユーザー名/パスワード: `root`/`r00tme`)、興味のあるプラグイン (RPM形式) を`wget`等でダウンロードします 。

ダウンロード完了後、Fuelプラグインをインストールします。インストール方法は、各プラグインのドキュメントに記載されているのですが、基本的には`fuel plugins --install <RPM名>`コマンドで以下のようにインストールできます。

```shell-session
[root@fuel ~]# fuel plugins --install lma_infrastructure_alerting-0.9-0.9.0-1.noarch.rpm
読み込んだプラグイン:fastestmirror, priorities
lma_infrastructure_alerting-0.9-0.9.0-1.noarch.rpm を調べています: lma_infrastructure_alerting-0.9-0.9.0-1.noarch
lma_infrastructure_alerting-0.9-0.9.0-1.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ lma_infrastructure_alerting-0.9.noarch 0:0.9.0-1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

===================================================================================================================================================================================
 Package                                            アーキテクチャー          バージョン                  リポジトリー                                                        容量
===================================================================================================================================================================================
インストール中:
 lma_infrastructure_alerting-0.9                    noarch                    0.9.0-1                     /lma_infrastructure_alerting-0.9-0.9.0-1.noarch                     21 M

トランザクションの要約
===================================================================================================================================================================================
インストール  1 パッケージ

合計容量: 21 M
インストール容量: 21 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : lma_infrastructure_alerting-0.9-0.9.0-1.noarch                                                                                                     1/1
  検証中                  : lma_infrastructure_alerting-0.9-0.9.0-1.noarch                                                                                                     1/1

インストール:
  lma_infrastructure_alerting-0.9.noarch 0:0.9.0-1

完了しました!
Plugin lma_infrastructure_alerting-0.9-0.9.0-1.noarch.rpm was successfully installed.
```

`fuel plugins`コマンドでインストールされたプラグインを確認できます。

```shell-session
[root@fuel ~]# fuel plugins
id | name                        | version | package_version
---|-----------------------------|---------|----------------
1  | elasticsearch_kibana        | 0.9.0   | 4.0.0
2  | influxdb_grafana            | 0.9.0   | 4.0.0
3  | lma_collector               | 0.9.0   | 4.0.0
4  | lma_infrastructure_alerting | 0.9.0   | 4.0.0
```

## OpenStackの構築

Fuelダッシュボードにアクセスすると、Equipmentから３台のノードが検出されていることを確認できます。あとで分かりやすくするため、スレーブノードの名前を変更しています。

![equipment.png](https://qiita-image-store.s3.amazonaws.com/0/84248/199293f6-cd03-fbdd-43b4-7060794909f5.png)


OpenStackを構築するには、Enviromentsページの"New OpenStack Environment"をクリックしてウィザードを入力していくことでOpenStack環境を作成します。基本、名前と必要に応じてサービスを追加するくらいで、それ以外はデフォルトのままにしています。

環境作成後、"Settings"のタブから以下のみを設定しています。

* Security:
  * Public Key: ノードに鍵でログインできるようにするため、`ssh-keygen -t rsa -f id_rsa`コマンドで生成した公開鍵 (`id_rsa.pub`) の内容をコピー＆ペースト
* Other:
  * インストールした各Fuelプラグインをチェックしないと有効にならないようなのでチェック
  * 必須項目である各種パスワードの入力
  * emailによる通知をチェックを外す

次に"Nodes"タブでノードを追加します。とりあえず今回は以下のように各ノードにロールを割り当てています。なお、スクリーンショット上は、OSを選んでいないのですが、最終的には選んでいます。OS選択の有無がどのように影響するのかはよく分かっていません。

![nodes.png](https://qiita-image-store.s3.amazonaws.com/0/84248/8b8bbe71-9527-5b37-6349-842c5761854c.png)

あとは、"Dashboard"タブから変更を適用することにより、実際にOpenStack環境の構築が始まります。しばらく待つと、デプロイが完了し、FuelダッシュボードからHorizonやKibana, Grafana等へのリンクが表示されます。

![dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/84248/02b5de17-33cd-c3fc-d101-5dc985244190.png)

ただし、自分の環境では、Horizon以外のリンクを押してもちゃんと動作しませんでした。もう少し調べてみようかと思います。

# おわりに

とりあえずまだ構築しただけなので、いろいろと触ってみて追記していきたいと思います。