概要
エンタープライズサポートを有する商用OSとして、Red Hat Enterprise LinuxやSUSE Linuxなどと並ぶところまで近年Ubuntuの採用が進んでいます。大きな理由としてはベアメタル上のキッティングの容易性やLTSの提供など、商用環境として好まれるサポート製品群が充実してきていることがあげられると思います。
また加えてUbuntuの製品サポートを提供するCanonicalが特に重点的に展開している、「Openstack」「Kubernetes」や「機械学習」が商業的な関心を大きく集めているのも一つの理由です。その中でも「Openstack」について、Red Hat社の「Red Hat Openstack Platform」に対抗する形でCanonicalでは「Charmed Openstack」を早期から展開していました。
そんな各社の「Openstack」展開ですが、Canonicalは開発者が容易にOpenstack環境を展開できるような「Microstack」を提供しています。構築難易度がVMWare製品などに比べて高いことから敬遠されてきたOpenstackですが、今回はこのMicrostackで簡単に環境を作成してみましょう。
前提
この記事で取り扱う内容は下記の通りです。
- OS(Ubuntu)がインストールされた状態のマシンに、Microstackを導入する
- Microstackで作成されたOpenstack Glanceにマシンイメージを登録する
- 上記のOpenstack Novaにマシンインスタンスを作成、起動する
- 2台目のPCを使用してMicrostackを使ってComputeノードを追加する
構成
今回はOpenstackの各API Endpointの検証およびIaCの検証環境の作成を目的としている為、物理/論理構成とも可能な限りシンプルな構成を取りました。ベアメタルの状態からホストOSを導入した直後、バニラの状態から構築しています。
テストした環境は、NATされたDHCPの稼働するローカルエリアネットワーク上に作成しました。またGUIが導入されていない為、OpenStackコンポーネントの内Horizon(Openstack Dashboard)を使用した確認には、作業用PC(192.168.101.2)を使用しています。
環境情報
セットアップには次期LTS予定のUbuntu 22.04を使用しました。ただ現時点ではpublic release, release candidateともに公開されていない状態なので、development branchのdaily buildより20220403を使用しています。
$ cat /etc/os-release
PRETTY_NAME="Ubuntu Jammy Jellyfish (development branch)"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
また確認に使用した機材は、1つのNICが有効化された物理機です。使用するNICには1つのローカルIPv4アドレスと1つのグローバルIPv6アドレスが割当てされています。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 20:cf:30:4c:30:90 brd ff:ff:ff:ff:ff:ff
inet 192.168.101.5/24 metric 100 brd 192.168.101.255 scope global dynamic enp5s0
valid_lft 188927sec preferred_lft 188927sec
inet6 2405:****:****:****:****:****:****:/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591593sec preferred_lft 604393sec
inet6 fe80::22cf:30ff:fe4c:3090/64 scope link
valid_lft forever preferred_lft forever
インストール
MicrostackはUbuntu通常のパッケージと異なり、環境のセットアップも含めてsnappyにて提供されています。snappyは通常のdebパッケージの導入と異なり、より独立性の高い状態でアプリケーションを導入するよう設計されたパッケージ管理/アプリケーション展開の為の仕組みです。通常snappyより導入されたパッケージのリソースは /snap以下に独立して配置されます。
インストールの際に引数として –betaおよび–devmodeを指定して、snapコマンドよりインストールします。
$ sudo snap install microstack --beta --devmode
microstack (beta) ussuri from Canonical✓ installed
OpenstackのメジャーバージョンとしてUssuriが導入されたことが確認できます。
$ snap list microstack
Name Version Rev Tracking Publisher Notes
microstack ussuri 245 latest/beta canonical✓ devmode
microstackコマンドより初期設定処理を行います。起動時引数に –computeないし–controlを指定することにより、役割を指定して導入することも可能です。またセットアップ最中にタイムアウトにより失敗した場合、再実行することにより中途より再開されるようです。
$ sudo microstack init --auto --control
2022-03-14 08:01:27,581 - microstack_init - INFO - Configuring clustering ...
2022-03-14 08:01:27,782 - microstack_init - INFO - Setting up as a control node.
2022-03-14 08:01:32,465 - microstack_init - INFO - Generating TLS Certificate and Key
2022-03-14 08:01:34,122 - microstack_init - INFO - Configuring networking ...
2022-03-14 08:01:43,785 - microstack_init - INFO - Opening horizon dashboard up to *
2022-03-14 08:01:45,338 - microstack_init - INFO - Waiting for RabbitMQ to start ...
Waiting for 172.17.9.175:5672
2022-03-14 08:01:55,011 - microstack_init - INFO - RabbitMQ started!
2022-03-14 08:01:55,011 - microstack_init - INFO - Configuring RabbitMQ ...
2022-03-14 08:01:56,472 - microstack_init - INFO - RabbitMQ Configured!
2022-03-14 08:01:56,506 - microstack_init - INFO - Waiting for MySQL server to start ...
Waiting for 172.17.9.175:3306
2022-03-14 08:02:09,193 - microstack_init - INFO - Mysql server started! Creating databases ...
2022-03-14 08:02:12,823 - microstack_init - INFO - Configuring Keystone Fernet Keys ...
2022-03-14 08:02:44,268 - microstack_init - INFO - Bootstrapping Keystone ...
2022-03-14 08:03:04,585 - microstack_init - INFO - Creating service project ...
2022-03-14 08:03:13,417 - microstack_init - INFO - Keystone configured!
2022-03-14 08:03:13,459 - microstack_init - INFO - Configuring the Placement service...
2022-03-14 08:03:45,135 - microstack_init - INFO - Running Placement DB migrations...
2022-03-14 08:03:51,361 - microstack_init - INFO - Configuring nova control plane services ...
2022-03-14 08:04:12,709 - microstack_init - INFO - Running Nova API DB migrations (this may take a lot of time)...
2022-03-14 08:04:53,559 - microstack_init - INFO - Running Nova DB migrations (this may take a lot of time)...
Waiting for 172.17.9.175:8774
2022-03-14 08:06:55,845 - microstack_init - INFO - Creating default flavors...
2022-03-14 08:07:36,768 - microstack_init - INFO - Configuring nova compute hypervisor ...
2022-03-14 08:07:36,768 - microstack_init - INFO - Checking virtualization extensions presence on the host
2022-03-14 08:07:36,799 - microstack_init - WARNING - Unable to determine hardware virtualization support by CPU vendor id "GenuineIntel": assuming it is not supported.
2022-03-14 08:07:36,799 - microstack_init - WARNING - Hardware virtualization is not supported - software emulation will be used for Nova instances
2022-03-14 08:07:40,370 - microstack_init - INFO - Configuring the Spice HTML5 console service...
2022-03-14 08:07:41,050 - microstack_init - INFO - Configuring Neutron
Waiting for 172.17.9.175:9696
2022-03-14 08:10:10,862 - microstack_init - INFO - Configuring Glance ...
Waiting for 172.17.9.175:9292
2022-03-14 08:11:08,492 - microstack_init - INFO - Adding cirros image ...
2022-03-14 08:11:13,750 - microstack_init - INFO - Creating security group rules ...
2022-03-14 08:11:31,725 - microstack_init - INFO - Configuring the Cinder services...
2022-03-14 08:13:03,656 - microstack_init - INFO - Running Cinder DB migrations...
2022-03-14 08:13:23,459 - microstack_init - INFO - restarting libvirt and virtlogd ...
2022-03-14 08:13:37,270 - microstack_init - INFO - Complete. Marked microstack as initialized!
正常性の確認
microstack.”command”によりsnapによりセットアップされた環境内でのコマンド実行が可能です。下記の例では openstackコマンドを実行することにより、設定されたhypervisorの稼働状況を確認しています。ほかにも microstack.mysql などOpenstackを構成する各サービスへのaliasが張られている為、各コンポーネントを詳細に確認することもできます。
$ sudo microstack.openstack hypervisor list
+----+---------------------+-----------------+---------------+-------+
| ID | Hypervisor Hostname | Hypervisor Type | Host IP | State |
+----+---------------------+-----------------+---------------+-------+
| 1 | ubuntusrv-dev01 | QEMU | 192.168.101.5 | up |
+----+---------------------+-----------------+---------------+-------+
新規イメージの登録
hypervisorが正常に稼働していることが確認できたので、実際に仮想マシンインスタンスを起動して稼働状況を確認しましょう。下記ではubuntu 20.04.1 LTSの最新のminimal, cloudのimgファイルをダウンロードして、Glanceイメージを作成しています。
$ curl -LO https://cloud-images.ubuntu.com/minimal/releases/focal/release-20220406/ubuntu-20.04-minimal-cloudimg-amd64.img
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 251M 100 251M 0 0 8185k 0 0:00:31 0:00:31 --:--:-- 8789k
$ sudo microstack.openstack image create --file ./ubuntu-20.04-minimal-cloudimg-amd64.img --disk-format qcow2 --container-format
bare --public "Ubuntu-20.04.1-release-20220406"
実際に指定したイメージ名で登録されたかどうか確認しましょう。microstackの環境では取って出しでそのまま使用できるように、デフォルトで軽量ディストリビューションのcirrosのイメージが登録されています。
$ sudo microstack.openstack image list
+--------------------------------------+---------------------------------+--------+
| ID | Name | Status |
+--------------------------------------+---------------------------------+--------+
| 50880ca8-30e7-4ebe-a124-9a526032690f | Ubuntu-20.04.1-release-20220406 | active |
| 7cf713d9-d5c3-4ca0-92a2-032715f78b9f | cirros | active |
+--------------------------------------+---------------------------------+--------+
$ sudo microstack.openstack image show 50880ca8-30e7-4ebe-a124-9a526032690f --fit-width
+------------------+-------------------------------------------------------+
| Field | Value |
+------------------+-------------------------------------------------------+
| checksum | 2e615c1d6b4b097c901e74fb7ff2c187 |
| container_format | bare |
| created_at | 2022-04-06T08:59:54Z |
| disk_format | qcow2 |
| file | /v2/images/50880ca8-30e7-4ebe-a124-9a526032690f/file |
| id | 50880ca8-30e7-4ebe-a124-9a526032690f |
| min_disk | 0 |
| min_ram | 0 |
| name | Ubuntu-20.04.1-release-20220406 |
| owner | 56307d10a2c8472d85deb7e71dfdae4d |
| properties | os_hash_algo='sha512', os_hash_value='4bb8031c22b238b |
| | 9fb2e5ee2a4cff1763016a61e96acff5bfbf9eb735f0c7085b71a |
| | daf7f3a12ab9894031a40663aecadcf58237e65b1f656a46b7520 |
| | 6ff2b98', os_hidden='False', owner_specified.openstac |
| | k.md5='2e615c1d6b4b097c901e74fb7ff2c187', owner_speci |
| | fied.openstack.object='images/Ubuntu-20.04.1-release- |
| | 20220406', owner_specified.openstack.sha256='34a4185d |
| | 1091f596b88726fd9ad14cf08d418d51c94ebece628534729ed29 |
| | b88', self='/v2/images/50880ca8-30e7-4ebe-a124-9a5260 |
| | 32690f' |
| protected | False |
| schema | /v2/schemas/image |
| size | 263454720 |
| status | active |
| tags | |
| updated_at | 2022-04-06T08:59:58Z |
| visibility | public |
+------------------+-------------------------------------------------------+
インスタンスの作成
作成するインスタンスの起動イメージとなるGlanceイメージが登録できたので、実際にイメージをもとに仮想マシンインスタンスを作成していきましょう。今回は簡易な動作確認を行う為、デフォルトで作成されたフレーバーを利用していきます。
使用可能なフレーバーの確認
使用するフレーバーを作成時に引数指定する必要があるため、openstack flavor listコマンドより登録されているフレーバーを確認していきます。Openstackでのフレーバーの概念はAWS EC2で言うところの「インスタンスタイプ」に対応しています。
$ microstack.openstack flavor list
+----+-----------+-------+------+-----------+-------+-----------+
| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+-------+------+-----------+-------+-----------+
| 1 | m1.tiny | 512 | 1 | 0 | 1 | True |
| 2 | m1.small | 2048 | 20 | 0 | 1 | True |
| 3 | m1.medium | 4096 | 20 | 0 | 2 | True |
| 4 | m1.large | 8192 | 20 | 0 | 4 | True |
| 5 | m1.xlarge | 16384 | 20 | 0 | 8 | True |
+----+-----------+-------+------+-----------+-------+-----------+
インスタンスの作成
今回はUbuntuの最低動作要件を満たす、m1.smallを指定してインスタンスを作成していきます。–nameオプションで作成するインスタンス名、末尾に使用するイメージ名をそれぞれ指定して microstack launchコマンドを使用してインスタンスを作成、起動します。また通常のopenstack clientと同様に、(microstack.)opemstack server create コマンドからも同様に作成することができます。
$ microstack launch --name ubuntu-instance0001 --flavor "m1.small" "Ubuntu-20.04.1-release-20220406"
Launching server ...
Allocating floating ip ...
Server ubuntu-instance0001 launched! (status is BUILD)
Access it with `ssh -i /home/**********/snap/microstack/common/.ssh/id_microstack ubuntu@10.20.20.112`
You can also visit the OpenStack dashboard at https://10.20.20.1:443
microstack launchコマンドより作成した場合、インスタンスに接続するための鍵ペアが自動的に作成されます。またssh接続するためのコマンドラインが末尾に出力されます。
sshでの接続確認
実際にハイパーバイザ上からssh接続して動作確認します。デフォルトユーザの「ubuntu」はsudoerとして登録された特権ユーザであるため、運用時には無効化し新規に特権を持つユーザを作成することが望ましいでしょう。
あるいは他のcloud-initが適用可能なイメージと同様に、起動時にハイパーバイザよりインスタンス上に設定の流し込みを行うことができます。詳細は 第1章 cloud-init の概要 Red Hat Enterprise Linux 8 | Red Hat Customer Portal などを参照してください。
$ ssh -i /home/**********/snap/microstack/common/.ssh/id_microstack ubuntu@10.20.20.112
The authenticity of host '10.20.20.112 (10.20.20.112)' can't be established.
ED25519 key fingerprint is SHA256:5f8zKWrMPV88XDEJBwY/GRpncGQ2VUwS8efeX59xa/I.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.20.20.112' (ED25519) to the list of known hosts.
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-1061-kvm x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
0 updates can be applied immediately.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@ubuntu-instance0001:~$
Horizon(ダッシュボード)の使用
今回のセットアップではハイパーバイザ上にGUI環境を導入していない為、ブラウザでの動作確認を想定していません。一方でOpenstackに用意されているWebUIである Horizonダッシュボードについても、Microstackのinit時に導入されています。
ダッシュボードへの接続にssh tunnelingしてポートをフォワーディングして、動作確認することができます。
credentialの確認
作成されたKeystoneユーザの認証情報については、作成した環境の設定を取得するsnap getコマンドより取得できます。下記コマンドを実行すると、英数大小文字からなるパスワードが表示されます。
$ sudo snap get microstack config.credentials.keystone-password
ssh tunnelingの接続(クライアントPCが別に存在する場合)
ブラウザアクセスする際のportをforwardingする為、開発用PC(ubuntudtp01)より下記sshの引数を指定したうえでssh接続します。
$ ssh 192.168.101.5 -L 8443:10.20.20.1:443
アクセス先のURLはSSH Tunnelingによりアクセス元のPCにforwardingされているので、https://127.0.0.1:8443 となります。ユーザ名「admin」と、上記のcredentialの確認時に表示された大小文字英数の文字列(パスワード)を入力し、ログインしましょう。
使用可能なOpenStackコンポーネント
各サービスについて
Openstackの各サービスについて、Install OpenStack services — Installation Guide ドキュメント で提示されるminimal deployment構成でセットアップされています。
$ microstack.openstack service list
+----------------------------------+-----------+-----------+
| ID | Name | Type |
+----------------------------------+-----------+-----------+
| 0821c33d044e4931aea0165b651e2b65 | cinderv3 | volumev3 |
| 0a91edc6a0944ab78e97d336e086ffb2 | cinderv2 | volumev2 |
| 3527eb3352084e7292b71a9d32140d4b | placement | placement |
| 587d6c1a45e2458189f847f9be5e6dae | neutron | network |
| 5e50d43b174e4d178fc0f0af334b5692 | nova | compute |
| 6f7c897afc7041298372459fb64a44bd | keystone | identity |
| cbb42cb3707041b1ac3360b2138cf407 | glance | image |
+----------------------------------+-----------+-----------+
neutronに関してはOVNを使用する形で構成されています。snappyでのインストール時にneutronを収容するOpen vSwitchが作成され、自動作成されたnetwork, subnet内では 10.20.20.1/24 が割り当てられます。neutronをOVNを利用して構成する手法については、第10章 Open Virtual Network (OVN) の使用 Red Hat OpenStack Platform 12 | Red Hat Customer Portal などで詳しく解説されていますのでここでは割愛します。
$ cat /snap/microstack/current/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
mechanism_drivers = ovn
extension_drivers = port_security,qos
tenant_network_types = geneve
overlay_ip_version = 4
external_network_type = flat
[ml2_type_geneve]
vni_ranges = 1:65535
max_header_size = 38
[ml2_type_flat]
flat_networks = *
[ovn]
# TODO(dmitriis): replace the common path with a template.
ovn_nb_connection = unix:/var/snap/microstack/common/run/ovn/ovnnb_db.sock
ovn_sb_connection = unix:/var/snap/microstack/common/run/ovn/ovnsb_db.sock
またCinderにて作成されたブロックデバイスについては、 /var/snap/microstack/common/lib/instances/ ディレクトリ内にqcow2形式で作成されます。instancesディレクトリ下層には、各インスタンスidに対応するフォルダが作成され、インスタンスの設定等が保持されます。
原則として(cinderでのvolume作成時に指定しない限り)該当のインスタンス情報に対応するフォルダは、マシンインスタンスの削除と連動して削除されます。作成したVolumeを保管する必要がある場合は、cinder.confを編集してvolume backendを追加するなど永続化させる仕組みが必要です。
複数ノード構成のMicroStack(クラスタ化)
上記Microstackの導入手順のうち、microstack initのタイミングで「役割を選択して初期設定が可能」と上述しました。この機能を利用することにより、ハイパーバイザをcomputeノードとしてセットアップして、既存のMicrostackでキッティングされたクラスタに参加させることが可能です。
二台目のハイパーバイザの設定
まず一台目のcontrollerとなるハイパーバイザ上で、二台目の追加に必要なトークン(connection string)を発行します。下記のmicrostackコマンドを実行すると、英大小文字数字からなる接続用のトークンが発給されます。トークンの有効期限は20分と短いので、二台目のハイパーバイザ上でsnap上からmicrostackの導入が完了してから発行しましょう。
$ 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):
次に二台目のハイパーバイザ上でmicrostack initを実行します。実行時に役割選択よりcomputeノードを指定する為–computeオプションを追記し、–joinオプションに先程発行したトークンを指定して初期設定を行いましょう。
$ sudo microstack init --auto --compute --join <token_string>
ハイパーバイザとして正常に追加されたかどうかは、下記のコマンドラインで確認できます。
$ sudo microstack.openstack hypervisor list
TIPS
microstack. プリフィックスの省略
Openstackクライアントコマンドについて、毎度microstack.openstackの様にプリフィックスを入力するのは面倒ですよね。snapのalias機能を利用してmicrostack.openstackに対してaliasを張ることにより、入力を省略することができます。
$ sudo snap alias microstack.openstack openstack
microstackの停止・再起動・アンインストール
今回導入したmicrostackの停止、再起動およびアンインストールは下記のコマンドラインでそれぞれ実行可能です。
$ sudo snap stop microstack
$ sudo snap restart microstack
$ sudo snap remove microstack
またリソースに空きを作りたいなどの理由で、一時的に無効化する場合は下記のコマンドラインで実行可能です。
$ sudo snap disable microstack