仮想化通信

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

OpenStack YogaをJujuでセットアップしてみる

これまでもこのブログでJuju + MAASを使ったOpenStackの構築方法について定期的に取り上げていましたが、 今回久しぶりにJujuでOpenStackをセットアップしたので、参考にした情報とかハマったところとかを共有するためにブログに書いてみます。

JujuとOpenStack

Juju はCanonicalが中心となって開発しているデプロイツールです。

Jujuは「Cloud」に対してマシンの作成、アプリケーションセットアップ、セットアップしたアプリケーションの管理を管理できるツールです。

オンプレ環境でOpenStackをJujuで構築する場合、同じくCanonicalのMAAS*1と組み合わせて使います。

maas.io

JujuとOpenStackの情報は現在はOpenStackのドキュメントサイトにまとめられています。

docs.openstack.org

JujuはCharmを使って一つ一つアプリケーションをデプロイしていく方法と、Bundleを使って一気にがっつり環境をデプロイする方法があります。 OpenStackのBundleは以前はCharmhubからダウンロードできましたが、現在はGitHubリポジトリーから入手するか、Jujuのバージョン3.x以降であればjuju downloadコマンドを使って入手できます。

とはいえ、GitHubでOSとOpenStackバージョンの組み合わせがきちんと書かれた物をダウンロードしたほうが楽です。

github.com

今回使ったのは「Ubuntu 22.04 + OpenStack Yoga」の組み合わせのこれです。

github.com

OpenStack Yogaより新しいバージョンのOpenStackがリリースされていますが、あえてYogaをインストールしているのはサポート期間の都合です。 UbuntuはLTSと同時期のリリースを長期サポートしています。その都合です。

ubuntu.com

参考にした情報

Yagaのインストールを行うため、YagaバージョンのOpenStack Charms Deployment Guideを参考にしました。

Vault周りについては以前の記事がそのまま有効でした。

デプロイ後のログイン方法については以下の情報が参考になりました。

ハマったところ

以前もJujuでOpenStackをデプロイした経験があるので同じようにやったらうまくいくだろうと思っていたところ、ハマりました。

まず、Juju CharmやBundleを配布しているサイトが変わりました。以前はBundleのページに細かいデプロイ方法やBundleやCharmのダウンロードリンクなどがあったのですが、現在のページには無くなっています。

charmhub.io

現在は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周りの作業をやる必要がありますけど