およそ1年半前にmicrostackを使ってOpenStackを1台のサーバーで動かしました。
今回はそのマルチノードを試したいと思います(ちなみに後半に解説する「microstackを物理ネットワークに接続する」流れはシングルノードのmicrostackでも同様に参考になると思います)。
microstackの現在のバージョンはOVNがデフォルトで使われています。ちょうどとあるお仕事で OVNベースのOpenStack環境が必要だったので動かしてみようと思ったのがきっかけでした。
マルチノードのmicrostackについては公式の手順として以下のドキュメントにまとめられています。
microstackのインストールを開始
まず、二台以上のUbuntu Serverがインストールされた環境にmicrostackの同じバージョンをインストールします。
$ sudo snap install microstack --devmode --beta
インストールのポイントとして、--devmode
と言うオプションを忘れないようにするということです。このオプションを忘れるとsudo microstack init
がうまく動きません。
それぞれmicrostackのインストールが終わったら、「初期化」を行います。最初のノードでsudo microstack init --auto --control
を実行します。スペックによるとは思いますが、手元の環境では作業終了まで大体10分程度の時間を要しました。
$ sudo microstack init --auto --control 2021-08-10 09:10:05,670 - microstack_init - INFO - Configuring clustering ... 2021-08-10 09:10:05,864 - microstack_init - INFO - Setting up as a control node. ... 2021-08-10 09:20:40,619 - microstack_init - INFO - Complete. Marked microstack as initialized!
上記が終わったら、sudo microstack add-compute
を1台目の環境で実行します。返ってきたconnection-stringをコピーしておきます。
実行例
$ sudo microstack add-compute Use the following connection string to add a new compute node to the cluster (valid for 20 minutes from this moment): hKhob3N0bmFtZawxNzIuMTcuMjguNjKrZmluZ2VycHJpbnTEIAhfsIjr3Dg2B6a7f6JjHbYxLr/8iKPHROTIbnrmFBgbomlk2SAyNTc1NDgzYzYzYTM0Zjk3OTRkZmQwOWZiNzAzNGM4MaZzZWNyZXTZIDkyMVlOWU1EVW50dVB1NEhjLTBIbkxvV29CT1hZcEF4
コンピュートノードにもコントローラーと同様のバージョンのmicrostackがインストールされていることを確認した後、sudo microstack init --auto --compute --join <connection-string>
をコンピュートノード上で実行するようです。ドキュメントに書かれているように、追加するコンピュート毎にこの処理が必要です。
実行例
$ sudo microstack init --auto --compute --join hKhob3N0bmFtZawxNzIuMTcuMjguNjKrZmluZ2VycHJpbnTEIAhfsIjr3Dg2B6a7f6JjHbYxLr/8iKPHROTIbnrmFBgbomlk2SAyNTc1NDgzYzYzYTM0Zjk3OTRkZmQwOWZiNzAzNGM4MaZzZWNyZXTZIDkyMVlOWU1EVW50dVB1NEhjLTBIbkxvV29CT1hZcEF4 2021-08-10 09:24:57,459 - microstack_init - INFO - Configuring clustering ... 2021-08-10 09:24:57,685 - microstack_init - INFO - Setting up as a compute node. ... 2021-08-10 09:26:21,119 - microstack_init - INFO - Complete. Marked microstack as initialized!
構築したOpenStackを使ってみる
以降のコマンドはコントローラーノード(1台目)で実行します。 デプロイした環境がうまく動いているか確認してみます。
実行例
$ sudo microstack.openstack hypervisor list +----+---------------------+-----------------+--------------+-------+ | ID | Hypervisor Hostname | Hypervisor Type | Host IP | State | +----+---------------------+-----------------+--------------+-------+ | 1 | bay11-gen8.maas | QEMU | 172.17.28.62 | up | | 2 | bay12-gen8.maas | QEMU | 172.17.28.68 | up | +----+---------------------+-----------------+--------------+-------+
microstackは1台でも動かせるようにするため、デフォルトでcomputeノードとしても振る舞います。
インスタンスを起動してみます。nova:
の後の「bay12-gen8.maas」はハイパーバイザー名を指定します。前の手順で確認できます。指定しない場合はどちらかのノードに適当にスケジューリングされると思います。
実行例
$ microstack launch cirros --name test --availability-zone nova:bay12-gen8.maas Launching server ... Allocating floating ip ... Server test launched! (status is BUILD) Access it with `ssh -i /home/ubuntu/snap/microstack/common/.ssh/id_microstack cirros@10.20.20.155` You can also visit the OpenStack dashboard at http://10.20.20.1:80
表示された指示にしたがって、インスタンスにSSH接続できます。ログインできますが、現時点では外部ネットワークへのアクセスはできないようです。一応回避策はあります。
$ ssh -i /home/ubuntu/snap/microstack/common/.ssh/id_microstack cirros@10.20.20.155
OVNのCLIでネットワークを確認してみる
デプロイした環境でOVNが使われているか確認してみます。ovs-vsctol show
等と比べると、どのポートが何で使われているのかおおよそ判別がつくようになっています。
実行例
$ sudo microstack.ovn-nbctl show switch 39396018-fc0e-4293-8851-3ba18b0df98a (neutron-5b718ab9-90b1-4378-b87d-09fb5a1c7cf0) (aka test) port 6309d609-6536-478d-98e8-42176afdbe3e addresses: ["fa:16:3e:c6:d8:37 192.168.222.210"] port 97f12c2f-05c0-4a14-b2e0-f1063e3b31f3 type: router router-port: lrp-97f12c2f-05c0-4a14-b2e0-f1063e3b31f3 port d5191a40-de98-4910-8691-492d8106e407 type: localport addresses: ["fa:16:3e:35:88:4c 192.168.222.2"] switch d267e34a-70d6-4dbd-bf62-592e570b048b (neutron-a8efd06f-a1f1-4070-8249-971086339d76) (aka external) port provnet-4751fd12-ae3c-4716-9a2e-c64bc1874e07 type: localnet addresses: ["unknown"] port 9b0866cf-5fd7-417b-acd2-2add6564f265 type: router router-port: lrp-9b0866cf-5fd7-417b-acd2-2add6564f265 port d73387c0-dde2-49f4-8e09-71c92d2770df type: localport addresses: ["fa:16:3e:73:c0:49"] router 51b84297-8cf4-446c-9a80-157e9a4a28fe (neutron-d5d17725-4075-406d-b861-7bf96096651f) (aka test-router) port lrp-97f12c2f-05c0-4a14-b2e0-f1063e3b31f3 mac: "fa:16:3e:87:f9:f8" networks: ["192.168.222.1/24"] port lrp-9b0866cf-5fd7-417b-acd2-2add6564f265 mac: "fa:16:3e:ed:25:b5" networks: ["10.20.20.164/24"] gateway chassis: [2540f620-adbe-41d5-aa22-9b3ad61313fe cbc75bcd-4755-458a-be46-2c0d31f53128] nat 66638880-1b2c-42ab-8054-dea0bd3298aa external ip: "10.20.20.164" logical ip: "192.168.222.0/24" type: "snat" nat f08c3124-a648-4f14-a7b9-a91da3b85b24 external ip: "10.20.20.155" logical ip: "192.168.222.210" type: "dnat_and_snat"
次のコマンドを実行すると、デフォルトでは3つの項目が表示されるはずです。一つはexternalネットワーク、一つはテストネットワーク、一つは仮想ルーターです。
実行例
$ sudo microstack.ovn-sbctl list datapath_bindin _uuid : c25c68d8-7c70-4254-90aa-1a49244e4cc4 external_ids : {logical-switch="d267e34a-70d6-4dbd-bf62-592e570b048b", name=neutron-a8efd06f-a1f1-4070-8249-971086339d76, name2=external} tunnel_key : 2 _uuid : f9268b41-e070-4eaa-a5b6-715bb599cc4c external_ids : {logical-router="51b84297-8cf4-446c-9a80-157e9a4a28fe", name=neutron-d5d17725-4075-406d-b861-7bf96096651f, name2=test-router} tunnel_key : 3 _uuid : 45de9d5a-b77b-4217-843c-14638375edae external_ids : {logical-switch="39396018-fc0e-4293-8851-3ba18b0df98a", name=neutron-5b718ab9-90b1-4378-b87d-09fb5a1c7cf0, name2=test} tunnel_key : 1
microstackノードを物理ネットワークに接続する
前の手順でOpenStackクラスターをサクッと動かすことができましたが、microstackのデフォルト構成では物理ネットワークに接続はされていません。つまりインスタンスにアクセスはできますが、インスタンスから外へはアクセスができない状況です(SSH経由でクラスターの外からもアクセスできない)。
このままではちょっと使いにくいので、物理ネットワークに接続してインスタンスからインターネットにでられるようにしたいと思います。
手順はこちらのガイドに書かれています。
https://connection.rnascimento.com/2021/03/08/openstack-single-node-microstack/
現在のmicrostackはOVNをバックエンドに使っています。br-exと言うブリッジデバイスが作られた状態になっています。つまり、このbr-exにインターネットにでられる設定をしたNICを追加するだけで問題解決という話のようです。
OpenStack Dashboardにアクセスする
OpenStack Dashboardにアクセスするため、多段SSHを仕込みます。実行例で指定している10.20.20.1
は、ブリッジbr-exに
デフォルトで仕込まれたIPアドレスです。
ssh -i <ssh-key> -N -L 8001:10.20.20.1:80 <user>@<server-ip>
次のコマンドでadminユーザーのパスワードを確認します。
sudo snap get microstack config.credentials.keystone-password
ブラウザーで次のURLを開くとアクセスできます: http://localhost:8001
デフォルトユーザー admin、パスワードはコマンドを実行して確認した長いパスワードを入力します。
bridge-mappingsデバイスを確認
次のコマンドで、bridge-mappingsデバイスを確認します。physnet1
のようです。
$ sudo microstack.ovs-vsctl get open . external_ids:ovn-bridge-mappings | awk -F: '{gsub("\"","");; print $1}' physnet1
ポートの追加
各コンピュート(1台目も含む)で以下を実施します。
eno2
はサーバーの2つめのNICを指定します。管理用ネットワークとは別のVLANが設定されていると良いと思います。
$ sudo microstack.ovs-vsctl add-port br-ex eno2 $ sudo ip link set br-ex up
あとは参考サイトに書かれたとおり、すでに作られているdemo用の既存のルーター、ネットワークを全部消して仮想ルーターと外向けおよび内向けのネットワークを作り直し、仮想ルーターにそれぞれのネットワークを接続するだけです。
なお、このコマンドを実行した後は多段SSHを仕込むこと無く、OpenStack Dashboardに直接アクセスできるようになります。