仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

新しいMicroStackを使ってみる

MicroStackとはなにか

MicroStackとは、プライベートクラウドソフトウェアであるOpenStackをラップトップやベアメタルサーバーに簡単にセットアップできるソフトウェアです。シングルノードで動かしたり、マルチノードにも対応しています。

Kubernetesに対してMicroK8sというものがありましたが、そのOpenStack版がMicroStackというわけです。 現在のMicroStackはベースにMicroK8s、その上にMicroStackベースのOpenStackが載る形になるので、双方の基礎的な理解が必要になります。まあでも勉強にはなります。

最近VMwareが無償版で提供していたESXiを終了してしまったので、その代替としてMicroStackを使うのもありかもしれません。ESXiと比べて色々違うので苦労すると思いますが、ネットワークやストレージなどの下回りを事前にきちんと固めてから使う分(特に特別なハードウェアなどを使わず仮想マシンを動かす程度)には、おそらくうまく動いてくれると思います。

前のバージョンとの違い

前のMicroStackはsnapパッケージを使ってOpenStackを動かすものでした。 例えばラップトップマシンとか、仮想マシンとか、ベアメタルのマシンとかにインストールして大体30分くらいで使えるようになるので重宝していました。

snapcraft.io

前のMicroStackについてはこちらのブログでも何度か取り上げています。

tech.virtualtech.jp

新しいバージョンのMicroStackは、ある意味OpenStackがMicrok8sの上で動いているイメージになります。 色々なことを思い出すのでこれまで触ってこなかったのですが、非常に重い腰をあげて触ってみることにしました。

snapcraft.io

(公式ドキュメントよりアーキテクチャー図)

snapcraftのページ を見ると、MicroStackの他のディストリビューションのインストール例がありますが、sunbeam prepare-node-scriptを実行してみると[ $(lsb_release -sc) != 'jammy' ] && { echo 'ERROR: Sunbeam deploy only supported on jammy'; exit 1; }と言う部分があるので、現状はUbuntu 22.04でないと動かないようです。まあでもインストールだけはできるので、嘘はついていないですけどね。おそらく該当のページは機械的に作られているページなのかなと思われます。 そのため、基本的には公式のドキュメントサイトの方を見ると良いです。

microstack.run

ちなみに新しいMicroStackは前のものと同様、シングルノートとマルチノードをサポートしています。 今回はシングルノードを試してたいと思います。

インストールしよう

調査した時点では、MicroStackの実行にはUbuntu 22.04が必要になります。マイナーバージョンは問わないので、その時の最新版のJammyを使います。Issueを見ると、Ubuntu Desktopではうまく動かないと行ったような情報が見られたので、Ubuntu Server 22.04を用意しました。

bugs.launchpad.net

DesktopとServerで若干設定や導入されているパッケージやサービスに差異があるのでその都合でしょうか。 インストール方法はだいたいここに書かれているのですが、若干わかりにくいのでまとめます。

microstack.run

まずはMicroStackをインストールします。注意したい点はmicrostackというsnapパッケージではなく、openstackと言うパッケージを使う点です。前のバージョンはmicrostackというパッケージで現在も公開されています。

$ sudo snap install openstack --channel 2023.1

snap info openstackを実行するといくつかバージョンが見つかりますが、今回はドキュメントと一緒の2023.1をインストールすることにしました。

要件を満たすための準備をする

インストールしたら次にこれを実行すると、Microstackの実行に必要な要件を確認できます。 確認するだけで処理は行われません。

$ sunbeam prepare-node-script

手動で表示されたそれぞれの処理を実行するか、次のように実行して要件を満たすために必要な処理を自動で行います。

$ sunbeam prepare-node-script | bash -x && newgrp snap_daemon

bootstrapの実行

次にこれを実行します。

$ sunbeam cluster bootstrap

エラーが出た場合は、その指示に従ってコマンドを実行します。 実行し終わったらもう一度sunbeam cluster bootstrapを実行します。

管理用ネットワークと管理用のMetalLB address範囲を設定します。 いつものようにCanonical MAASでデプロイしたノードで環境を作っているので、 MAASのReserved rangesでmetallb用のレンジを切って、それを設定します。IPは10個あれば足りそうです。

...
Management networks shared by hosts (CIDRs, separated by comma) (10.20.20.0/24): 172.17.28.0/24
MetalLB address allocation range (supports multiple ranges, comma separated) (10.20.20.10-10.20.20.20): 172.17.28.71-172.17.28.80

入力すると、こんな感じでデプロイが始まります。

This key is not known by any other names
⠼ Bootstrapping Juju onto machine ... 
...
⠏ Adding MicroK8S unit to machine ... 
...
⠹ Deploying MicroCeph ... 
...
⠏ Deploying OpenStack Control Plane to Kubernetes (this may take a while) ... deploying services
...
⠇ Deploying OpenStack Control Plane to Kubernetes (this may take a while) ... waiting for services to come 
online (0/29)
...

microk8s.kubectlコマンドでデプロイの状況を確認できます。openstack名前空間でOpenStackのサービスが動いていますね。

$ microk8s.kubectl get po -A
NAMESPACE        NAME                                       READY   STATUS            RESTARTS   AGE
kube-system      hostpath-provisioner-69cd9ff5b8-7r8vq      1/1     Running           0          3m24s
metallb-system   speaker-xrsrh                              1/1     Running           0          3m25s
metallb-system   controller-9556c586f-c6qpf                 1/1     Running           0          3m24s
kube-system      coredns-6f5f9b5d74-2447p                   1/1     Running           0          4m40s
kube-system      calico-node-vtts7                          1/1     Running           0          110s
kube-system      calico-kube-controllers-78b7dfb4fd-8vnc8   1/1     Running           0          108s
openstack        modeloperator-756b77f874-94f8s             1/1     Running           0          95s
openstack        certificate-authority-0                    1/1     Running           0          70s
openstack        nova-0                                     0/4     PodInitializing   0          26s
openstack        glance-mysql-router-0                      1/2     Running           0          61s
openstack        keystone-mysql-router-0                    0/2     Running           0          17s
openstack        cinder-0                                   0/3     PodInitializing   0          26s
openstack        nova-mysql-router-0                        1/2     Running           0          53s
openstack        traefik-0                                  0/2     PodInitializing   0          25s
openstack        cinder-ceph-mysql-router-0                 0/2     Running           0          14s
openstack        nova-cell-mysql-router-0                   0/2     Running           0          42s
openstack        nova-api-mysql-router-0                    0/2     Running           0          37s
openstack        neutron-mysql-router-0                     0/2     Running           0          4s
openstack        cinder-mysql-router-0                      0/2     Running           0          20s
openstack        rabbitmq-0                                 0/2     Init:0/1          0          6s

ある程度デプロイが進むと、juju statusコマンドでも状況を確認できます(例はデプロイ途中の状態)。

$ juju status
Model       Controller          Cloud/Region     Version  SLA          Timestamp
controller  sunbeam-controller  sunbeam/default  3.2.0    unsupported  02:35:30Z

App              Version  Status   Scale  Charm            Channel        Rev  Exposed  Message
controller                active       1  juju-controller  3.2/stable      14  no       
microceph                 unknown      0  microceph        edge             9  no       
microk8s                  active       1  microk8s         legacy/stable  121  no       
sunbeam-machine           active       1  sunbeam-machine  latest/edge      1  no       

Unit                Workload  Agent  Machine  Public address  Ports      Message
controller/0*       active    idle   0        172.17.28.95               
microk8s/0*         active    idle   0        172.17.28.95    16443/tcp  
sunbeam-machine/0*  active    idle   0        172.17.28.95               

Machine  State    Address       Inst id  Base          AZ  Message
0        started  172.17.28.95  manual:  ubuntu@22.04      Manually provisioned machine

Offer      Application  Charm      Rev  Connected  Endpoint  Interface    Role
microceph  microceph    microceph  9    0/0        ceph      ceph-client  provider

引き続きデプロイ中です。

...
⠹ Adding OpenStack Hypervisor unit to machine ... 

終わったようです。

Node has been bootstrapped with roles: control, compute

次のように実行すると、Microk8s上のOpenStackサービスの稼働状況がわかります。エラーなどがないことを確認します。

$ microk8s.kubectl get po -n openstack
NAME                             READY   STATUS    RESTARTS      AGE
modeloperator-756b77f874-94f8s   1/1     Running   0             84m
certificate-authority-0          1/1     Running   0             83m
glance-mysql-router-0            2/2     Running   0             83m
nova-api-mysql-router-0          2/2     Running   0             83m
nova-cell-mysql-router-0         2/2     Running   0             83m
keystone-mysql-router-0          2/2     Running   0             83m
cinder-mysql-router-0            2/2     Running   0             83m
neutron-mysql-router-0           2/2     Running   0             82m
rabbitmq-0                       2/2     Running   0             82m
cinder-ceph-mysql-router-0       2/2     Running   0             83m
cinder-0                         3/3     Running   0             83m
horizon-mysql-router-0           2/2     Running   0             82m
nova-mysql-router-0              2/2     Running   0             83m
glance-0                         2/2     Running   0             82m
placement-0                      2/2     Running   0             82m
horizon-0                        2/2     Running   0             82m
neutron-0                        2/2     Running   0             82m
placement-mysql-router-0         2/2     Running   1 (80m ago)   82m
ovn-central-0                    4/4     Running   0             81m
keystone-0                       2/2     Running   0             82m
placement-mysql-0                2/2     Running   0             82m
neutron-mysql-0                  2/2     Running   0             82m
nova-mysql-0                     2/2     Running   0             80m
keystone-mysql-0                 2/2     Running   0             80m
traefik-0                        2/2     Running   0             83m
cinder-ceph-0                    2/2     Running   0             82m
ovn-relay-0                      2/2     Running   0             82m
glance-mysql-0                   2/2     Running   0             82m
horizon-mysql-0                  2/2     Running   0             80m
cinder-mysql-0                   2/2     Running   0             80m
nova-0                           4/4     Running   0             83m

クラウドの設定

次を実行するとクラウドの構成ができます。利用するユーザーとExternalネットワークの設定を行っていきます。

$ sunbeam configure --openrc demo-openrc

Local or remote access to VMs [local/remote] (local): remote
CIDR of network to use for external networking (10.20.20.0/24): 172.16.0.0/16
IP address of default gateway for external network (10.20.20.1): 172.16.0.1
Populate OpenStack cloud with demo user, default images, flavors etc [y/n] (y):
Username to use for access to OpenStack (demo): demo
Password to use for access to OpenStack (mt********): hogehugahogeee
Network range to use for project network (192.168.122.0/24):
List of nameservers guests should use for DNS resolution (172.17.28.3): 8.8.8.8
Enable ping and SSH access to instances? [y/n] (y):
Start of IP allocation range for external network (10.20.20.2): 172.16.214.32
End of IP allocation range for external network (10.20.20.254): 172.16.214.63
Network type for access to external network [flat/vlan] (flat):
Writing openrc to ytooyama-openrc ... done
Free network interface that will be configured for external traffic [eno50/eno51/eno52/eno53/eno54/eno55/eno56] (eno50): eno50

Dashboardへのアクセス

sunbeam dashboard-urlを実行すると、OpenStack Dashboard "Horizon"のURLが表示されます。

ユーザー、パスワード、ドメイン情報はそれぞれ設定したユーザー、パスワード、ドメインはusersを入れてログインします。 詳細はこちらに書かれています。

MicroStack - Accessing the OpenStack dashboard

あとはキーペアを登録してインスタンスを実行...みたいなことも問題なくできました。

MicroStackの管理

触ってみたところ設定したユーザーは管理権限は付与されていないようで、Admin側の設定は行えないようでした。 管理系を触るにはここに書かれているようにsunbeam openrc > admin-openrcを実行して、管理者用の認証情報を取得して、そのユーザーでログインすれば良いようです。

MicroStack - Using the OpenStack CLI

他のユーザーを作るには、管理ユーザーで行なえます。

これでopenstackコマンドを使って、色々できるようになります。 Dashboardからイメージを追加しようとしてうまくいかなかったので、openstackコマンドでイメージ追加しました。 ちゃんと、Ubuntu以外のOSも動作しました。

MicroStack

MicroStackはおよそ数時間で環境ができるので、ちょっとOpenStackを使いたいときとかアプリケーション開発などでテスト環境を用意したい場合などに便利だと思います。DevOpsなどでCI/CDのプラットフォームとしても使えそうでしょうか?

わりとすんなり動いてくれたので、次のタイミングでは新しいMicroStackを使おうかなと思っています。

ハマったところ

bootstrapが永遠に終わらない

以下の部分を勘違いしてsunbeam prepare-node-scriptコマンドを実行してそのまま次に進んでしまい、sunbeam cluster bootstrapコマンドを実行して永遠に処理が終わらないという失敗をしてしまいました。straceやtopコマンドで見てもプロセスが実行されたり終了したりを繰り返すだけでCPUやメモリーは使われておらず、特に処理が行われているように見えませんでした。

それはそうです。やらなければならない処理をしていないんですから。

Sunbeam can generate a script to ensure that the machine has all of the required dependencies installed and is configured correctly for use in MicroStack - you can review this script using

ドキュメントを今一度よく見て、sunbeam prepare-node-script | bash -x && newgrp snap_daemonを実行したところ、うまく動きました。sunbeam prepare-node-scriptコマンドで表示される設定を手動で行うか、sunbeam prepare-node-script | bash -x && newgrp snap_daemonを実行して自動処理する必要があったわけです。