OpenStack の All-in-One 環境が爆速で作れてしまいます.. microstack があればね!

#概要
OpenStack の開発やテスト環境を構築する際には devstack が一般的に用いられますが、devstack は様々な構成に対応している反面、実際に稼働させるまでには次のように手間や時間が掛かっておりました。

- 使いたい OpenStack バージョンや基本構成を local.conf に設定する
- stack.sh を実行する (デプロイ完了までに、10 - 30分程度を要します)
- openrc を読み込む
- instance を起動する

上記の作業が、microstack を使うことで劇的に早くなります。
本ドキュメントでは、microstack を使ってインスタンス作成等を試した結果について、まとめます。

#microstack で何ができるの?
microstack を使うと、コマンドを数発打ち込むだけで安定稼働版の OpenStack All-in-One 環境が構築できます。また、microstack は snap 形式のパッケージとなっているため、OSで稼働している他のソフトウェアと競合することがありません。既存の環境を一切壊さずにアンインストールをすることも出来ます。

2020年4月現在では公式の Quickstart ドキュメント等が整備されております。基本的には、 Quickstart の内容に従ってコマンドを実行するだけで OpenStack 環境が構築できます。

ただし、microstack 自体は Laptop マシンにインストールされた Ubuntu で使うことを前提としているため、例えば Mac + vagrant のような環境で使う場合は設定を一部変更する必要がありますのでご注意ください。

- [Installation and Quickstart](https://microstack.run/docs/)
- [github microstack](https://github.com/CanonicalLtd/microstack)
- [discourse での microstack 解説記事](https://discourse.jujucharms.com/t/tutorial-deploying-k8s-on-openstack-in-your-laptop-with-microstack-juju/1439)

#microstack 使い方
次に、microstack の使い方について解説します。

## microstack のインストール
次のコマンドを実行すると、microstack がインストールされます。OpenStack を構成するために
必要な依存パッケージも全て microstack パッケージの中に含まれているため、前準備は一切不要です。

```bash
sudo snap install microstack --classic --beta
```

## コマンドエイリアスの作成 (Optional)
microstack では、OpenStack の CLI は、デフォルトでは プレフィックスとして 'microstack.' が付くため、'microstack.openstack' と入力する必要があります。
コマンドを余分に打ち込むのが面倒な場合は、次のコマンドにて短縮させることも出来ます。

```bash
sudo snap alias microstack.openstack openstack
```
## virt_type 設定変更(Mac や VM にインストールする場合)
Mac + vagrant や Public Cloud など、いわゆる VM 環境に microstack を
インストールした場合は、次のように nova-compute の設定ファイル (virt_type, cpu_mode)
を変更した上で、service を再起動します。

```bash
sudo vi /var/snap/microstack/common/etc/nova/nova.conf.d/hypervisor.conf
```

```ini:hypervisor.conf
[libvirt]
#virt_type = kvm
virt_type = qemu
#cpu_mode = host-passthrough
```

```bash
sudo systemctl restart snap.microstack.nova-compute.service
```

## OpenStack の初期設定
次のコマンドを実行することで、OpenStack 各コンポーネントの初期化やサービス起動等が自動的に実施されます。

```bash
sudo microstack.init --auto
```

なお、上記コマンドでは neutron network の初期設定や glance image の追加等も自動的に実施されるので、コマンド実行後はすぐに instance を作成できる状態になります。

## インスタンスの起動 (microstack.launch コマンドを使用)
microstack.init コマンドで自動作成された network や ssh credential 等を使って instance を起動したい場合は、次のように "microstack.launch" コマンドを実行すると (openstack cli のように沢山のオプションを付けなくても)簡単に instance を作成できます。

```bash
# "test" がインスタンス名となります
microstack.launch cirros --name test
```

上記コマンドを実行すると、instance 作成後に ssh login を実行するためのコマンドが表示されます。そのままコピー・ペーストするだけで、当該instance にログインできるのでとても便利です。

```bash
launching server ...
Allocating floating ip ...
Server test launched! (status is BUILD)

Access it with `ssh -i $HOME/.ssh/id_microstack cirros@10.20.20.67`
You can also visit the OpenStack dashboard at http://10.20.20.1:80
```

## インスタンスの起動 (openstack コマンドを使用)
インスタンスの起動方法は、通常の OpenStack CLI と同一手順となります。

```bash
microstack.openstack server create --flavor m1.small --nic net-id=test --image cirros my-microstack-server

# SSHログイン方法
ssh -i ~/.ssh/id_microstack cirros@(floating-ip アドレス)
```

## dashboard へのアクセス方法
vagrant + VirtualBox で private_network を作成している場合は、手元の hypervisor host から web browser を用いて直接 dashboard にアクセスできます。

```bash
http://{private_network ip of the VirtualBox VM}
  -> ssh port forward を用いて接続する場合は、次のように port-forward します
     ssh -L10080:10.20.20.1:80 target-host
username: admin
password: keystone
```

## microstack の停止・再開方法
microstack の利用を一時的に停止したい場合は、次のコマンドを実行します。

```bash
sudo snap disable microstack
```

再開する場合は、次のコマンドを実行します。

```bash
sudo snap enable microstack
```

## microstack のアンインストール方法
microstack をアンインストールしたい場合は、次のコマンドを実行します。

```bash
sudo snap remove microstack
```

#まとめ
本ドキュメントでは、OpenStack の All-in-One 環境を爆速でインストール する方法として、
microstack を紹介させていただきました。
microstack を使えば、少々 OpenStack の API 動作を調べたいけれど devstack を
デプロイするのは面倒だな..というような場面や、CI/CD で OpenStack API を使いたい場面にとても便利だと思うので、ご興味のある人は、一度試してみると良いと思います。