MicroStackとはなにか
MicroStackとは、プライベートクラウドソフトウェアであるOpenStackをラップトップやベアメタルサーバーに簡単にセットアップできるソフトウェアです。シングルノードで動かしたり、マルチノードにも対応しています。
Kubernetesに対してMicroK8sというものがありましたが、そのOpenStack版がMicroStackというわけです。 現在のMicroStackはベースにMicroK8s、その上にMicroStackベースのOpenStackが載る形になるので、双方の基礎的な理解が必要になります。まあでも勉強にはなります。
最近VMwareが無償版で提供していたESXiを終了してしまったので、その代替としてMicroStackを使うのもありかもしれません。ESXiと比べて色々違うので苦労すると思いますが、ネットワークやストレージなどの下回りを事前にきちんと固めてから使う分(特に特別なハードウェアなどを使わず仮想マシンを動かす程度)には、おそらくうまく動いてくれると思います。
前のバージョンとの違い
前のMicroStackはsnapパッケージを使ってOpenStackを動かすものでした。 例えばラップトップマシンとか、仮想マシンとか、ベアメタルのマシンとかにインストールして大体30分くらいで使えるようになるので重宝していました。
前のMicroStackについてはこちらのブログでも何度か取り上げています。
新しいバージョンのMicroStackは、ある意味OpenStackがMicrok8sの上で動いているイメージになります。 色々なことを思い出すのでこれまで触ってこなかったのですが、非常に重い腰をあげて触ってみることにしました。
snapcraftのページ を見ると、MicroStackの他のディストリビューションのインストール例がありますが、sunbeam prepare-node-script
を実行してみると[ $(lsb_release -sc) != 'jammy' ] && { echo 'ERROR: Sunbeam deploy only supported on jammy'; exit 1; }
と言う部分があるので、現状はUbuntu 22.04でないと動かないようです。まあでもインストールだけはできるので、嘘はついていないですけどね。おそらく該当のページは機械的に作られているページなのかなと思われます。
そのため、基本的には公式のドキュメントサイトの方を見ると良いです。
ちなみに新しいMicroStackは前のものと同様、シングルノートとマルチノードをサポートしています。 今回はシングルノードを試してたいと思います。
インストールしよう
調査した時点では、MicroStackの実行にはUbuntu 22.04が必要になります。マイナーバージョンは問わないので、その時の最新版のJammyを使います。Issueを見ると、Ubuntu Desktopではうまく動かないと行ったような情報が見られたので、Ubuntu Server 22.04を用意しました。
DesktopとServerで若干設定や導入されているパッケージやサービスに差異があるのでその都合でしょうか。 インストール方法はだいたいここに書かれているのですが、若干わかりにくいのでまとめます。
まずは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
を実行して自動処理する必要があったわけです。