これまでもこのブログでJuju + MAASを使ったOpenStackの構築方法について定期的に取り上げていましたが、 今回久しぶりにJujuでOpenStackをセットアップしたので、参考にした情報とかハマったところとかを共有するためにブログに書いてみます。
JujuとOpenStack
Juju はCanonicalが中心となって開発しているデプロイツールです。
Jujuは「Cloud」に対してマシンの作成、アプリケーションセットアップ、セットアップしたアプリケーションの管理を管理できるツールです。
オンプレ環境でOpenStackをJujuで構築する場合、同じくCanonicalのMAAS*1と組み合わせて使います。
JujuとOpenStackの情報は現在はOpenStackのドキュメントサイトにまとめられています。
JujuはCharmを使って一つ一つアプリケーションをデプロイしていく方法と、Bundleを使って一気にがっつり環境をデプロイする方法があります。
OpenStackのBundleは以前はCharmhubからダウンロードできましたが、現在はGitHubリポジトリーから入手するか、Jujuのバージョン3.x以降であればjuju download
コマンドを使って入手できます。
とはいえ、GitHubでOSとOpenStackバージョンの組み合わせがきちんと書かれた物をダウンロードしたほうが楽です。
今回使ったのは「Ubuntu 22.04 + OpenStack Yoga」の組み合わせのこれです。
OpenStack Yogaより新しいバージョンのOpenStackがリリースされていますが、あえてYogaをインストールしているのはサポート期間の都合です。 UbuntuはLTSと同時期のリリースを長期サポートしています。その都合です。
参考にした情報
Yagaのインストールを行うため、YagaバージョンのOpenStack Charms Deployment Guideを参考にしました。
Vault周りについては以前の記事がそのまま有効でした。
デプロイ後のログイン方法については以下の情報が参考になりました。
ハマったところ
以前もJujuでOpenStackをデプロイした経験があるので同じようにやったらうまくいくだろうと思っていたところ、ハマりました。
- https://tech.virtualtech.jp/entry/2022/02/15/163251
- https://tech.virtualtech.jp/entry/2021/03/19/173322
まず、Juju CharmやBundleを配布しているサイトが変わりました。以前はBundleのページに細かいデプロイ方法やBundleやCharmのダウンロードリンクなどがあったのですが、現在のページには無くなっています。
現在はOpenStack Charms Deployment Guideの方にまとめられています。その通りやれば環境が作れます。
このガイドで触れられていないBundleを使ったデプロイでは、ダウンロードしたBundle.yamlに対して次のような追記が必要でした。
name: openstack-base series: jammy variables: openstack-origin: &openstack-origin distro data-port: &data-port br-ex:eno50 osd-devices: &osd-devices /dev/sdb /dev/vdb expected-osd-count: &expected-osd-count 3 expected-mon-count: &expected-mon-count 3 machines: '0': series: jammy constraints: tags=bay5 spaces=public-space '1': series: jammy constraints: tags=bay13 spaces=public-space '2': series: jammy constraints: tags=bay16 spaces=public-space
variablesにはOpenStackのバージョンを記述します。今回はUbuntu 22.04LTSと同時期リリースのYogaをインストールするため、distroと追記しています。 data-portにはbr-exインターフェイスの物理ネットワークインターフェイスを指定します。このポートからインターネットに出ていき、Flating IPアドレスが発行されます。
machinesにはconstraintsでMAAS Tagを指定します。サーバーにMAAS Tagを指定することで、そのマシンが必ず使われます。指定しない場合は空いているサーバーが自動選択されます。 今回ハマったのが「spaces」です。デプロイを実行すると次のようなメッセージが出て、指定したマシンが一向に起動しませんでした。
Issueも見つけたのですが回避方法が分からず。
そして解決へ
Juju MachinesのConstraintにspacesの指定ができることを知って、今回の解決に至ったということです。
ちなみにこのspaces=public-space
の部分には、MAASのSubnetの設定を見れば何を設定すればいいかわかります。
ここまで準備ができたら、あとはこれを実行するだけです*2。簡単でしょう?
juju model-config default-space=public-space juju add-model --config default-series=jammy openstack juju switch openstack juju deploy ./bundle-edit.yaml --overlay ./openstack-base-spaces-overlay.yaml
デプロイが完了したらDashboardにログインし、ネットワーク、ルーター、セキュリティーグループ、フレーバー、イメージなどを登録すればプライベートクラウドとしてOpenStackを使えます。
デプロイは大体1時間程度かかります。
最後に
日本仮想化技術はVMware vSphereのような仮想化製品のほか、OpenStackやKubernetes、DevOps、GPUでPostgreSQLを爆速にする爆速DBなどいろいろ取り扱っていますので、そのあたりでお困りでしたらぜひお問い合わせください。
お仕事、お待ちしてます!
*1:決してMobility as a ServiceのほうのMaaSではないです
*2:正確にはJujuによるOpenStackデプロイを完了するために、Vault周りの作業をやる必要がありますけど