MicroStackを使って手軽にOpenStackを試しました

リンクバル技術部のデニスです。

今回、個人的にOpenStackを試す機会がありましたので、手順などについてこちらで共有したいと思います。

OpenStackとは、クラウドコンピューティングの環境を構築するためのオープンソースソフトウェア(OSS)です。OpenStackを使うことで、AWSのような環境を自前で準備することができるというイメージで、提供されたdashboard、CLI、REST API経由で仮想化されたVMやストレージ、ネットワークなどの管理ができます。

存在を知って少し興味を持っていましたが、OpenStackに触れる機会は今回が初めてです。多数のモジュールで構成された複雑なアーキテクチャ、そしてインストールやデプロイが大変だという評判から中々手を出さずにいましたが、今回、MicroStackというプロジェクトを知ったおかげで試してみようと思いました。

目次

MicroStackとは

MicroStackとはUbuntu Linuxを提供するCanonical社が開発しているプロジェクトで、OpenStackの導入をとても楽にしてくれるのがメリットです。サイトには以下のように記載されていて、企業での小規模プライベートクラウドの構築のための利用なども呼びかけています。ただ、MicroStackはまだベータ版です。

OpenStack for the edge, micro clouds and developers

ドキュメントにはMicroStack以外に開発環境構築の手助けをしてくれるDevStackやPackStackというソフトウェアの記載がありますが、MicroStackに比べて手間がかかりそうです。

実際に本番でAWSの代わりに利用するなどのユースケースの場合、参考資料を読んで知ったのですが、OpenMetalのように即利用可能なOpenStackベースの環境を提供してくれるサービスもあります。

OpenStackは多数のモジュール(Serviceと呼ばれています)で構成されていて、ドキュメントでは各モジュールのインストールガイドが確認できます。MicroStackにはそのうちの最も一般的に需要がありそうなモジュールが含まれていて、以下がその一部になります。

  • Keystone – Identity
  • Horizon – Dashboard
  • Nova – Compute
  • Neutron – Networking
  • Cinder – Storage

検証手順

今回は以下の検証をしてみました。

  • MicroStackのインストール
  • MicroStackの設定(特にネットワーク)
  • Virtual machineの作成、SSH接続

検証には最近購入したOS無しの安い中古ミニPCです。準備としては余っていたRAMでメモリ増設、Ubuntu Server 22.04のインストール、SSHの設定です。

一台のPCで動かしますので、Single-node installationの手順で進めます。同じドキュメントに複数Nodeの構築手順も確認できます。

インストールはMicroStackのsnapパッケージを入れるだけです。

$ sudo snap install microstack --beta

完了したら初期化を行います。僕の環境では10分ほどかかりました。

$ sudo microstack init --auto --control

こちらが完了しましたら、https://<ip_address>でDashboard(Horizon service)をアクセスできます。SSL証明書の警告を無視したらログイン画面が表示され、ユーザーはadmin、パスワードは以下のコマンドで取得できます。

$ sudo snap get microstack config.credentials.keystone-password

ログイン後には以下の画面が表示されます。

ネットワーク

OpenStackのインストール後、デフォルトのネットワークが構築されています。しかし、提供されるネットワークにVMを作成しても、ホストからしかアクセスできないような設定になっています。このままでは利用があまりにも制限されますので、ローカルネットワークでリモートアクセスができるようにしました。設定はこちらの参考記事に沿って行いました。

まずはデフォルトで作成されているリソースを削除する必要がありますので、Project > Network > Routersからtest-routerを削除します。

それからProject > Network > Networks画面で既存のネットワークを削除します。

新しいexternal networkを作成しますが、こちらのネットワークのIPアドレスは物理ネットワークからアクセスが可能になります。Admin > Network > Networks画面で「+ Create Network」を選択し、以下の内容を入力します。

physnet1とはMicroStackでのNeutron(ネットワークモジュール)のデフォルトの物理ネットワーク名です。「Subnet」画面の内容は自分のローカルネットワークの設定に合わせて以下のように記入しました。

最後に実際にVMに付与するIPアドレスの範囲を指定する必要があります。DHCPを無効にして、ルーターのDHCPが付与する範囲と被らないものを設定しました。

次に以下のコマンドでbridgeの設定を行いました。OpenStackホストのEthernetインターフェースがeno1です。ホストのIPはルーターで固定しているので、参考記事とは違ってDHCPでbridgeの設定を行なっています。

$ sudo bash -c 'microstack.ovs-vsctl add-port br-ex eno1 && \
ip addr flush dev eno1 && \
dhclient -v br-ex'

設定が起動時に適応されるため、以下の内容で/usr/local/bin/microstack-bridge-setupというスクリプトを作成しました。

#!/bin/bash
#
# Configure bridging to make OpenStack VMs accessible from the local network
#

dhclient -v br-ex || :

そして、該当のサービスの設定を作成しました:/etc/systemd/system/microstack-bridge-setup.service

[Unit]
Description=Service to configure bridging to make OpenStack VMs accessible from the local network
Requires=snap.microstack.external-bridge.service
After=snap.microstack.external-bridge.service

[Service]
ExecStart=/usr/local/bin/microstack-bridge-setup
SyslogIdentifier=microstack-bridge-setup
Restart=no
WorkingDirectory=/usr/local/bin
TimeoutStopSec=30
Type=oneshot

[Install]
WantedBy=multi-user.target

あとはサービスを有効にするだけです。

$ sudo chmod +x /usr/local/bin/microstack-bridge-setup
$ sudo systemctl daemon-reload
$ sudo systemctl enable microstack-bridge-setup.service

ここからはDashboardに戻って設定を続けます。まずはVMが設置されるinternet networkを作成します。

SubnetにはプライベートネットワークのCIDRを設定します。

こちらが完了したら、今度はAdmin > Network > Routers画面で「+ Create Router」を選択し、以下のように作成したexternal networkを指定して設定します。

Project > Network > Network Topology画面を確認すれば分かりやすいですが、routerはまだexternalとinternalネットワークを繋いでいませんので、同じ画面で「+ Add Interface」を選択します。

作成したInternal networkを設定したら完了です。

イメージの追加

OpenStackにはデフォルトでcirrosというテスト用のイメージが含まれています。こちらを利用する場合、SSH接続の際に利用するパスワードはgocubsgoです。

ただ、今回はせっかくなので、新しいイメージを取り入れて検証したいと思います。以下のコマンドでUbuntu 22.04のCloud Imageを追加します。最初はイメージ作成の際にエラーが出ましたので、こちらのStackOverflowの解答の通りにsnapのフォルダーにファイルを移動したら問題なく実行されました。

$ wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64-disk-kvm.img
$ sudo mv jammy-server-cloudimg-amd64-disk-kvm.img /var/snap/microstack/common/images/
$ microstack.openstack image create ubuntu-22.04 \
  --disk-format qcow2 \
  --file /var/snap/microstack/common/images/jammy-server-cloudimg-amd64-disk-kvm.img \
  --public

VMの作成

Ubuntuが利用できるようになりましたので、VMの作成に必要なあと2つの設定を行います。

まずは、Project > Network > Floating IPsで物理ネットワークからのアクセス用に新しいIPアドレスを作成します。「Allocate IP To Project」を選択し、以前作成したexternalネットワークが選択されていることを確認します。

そして、Project > Network > Security Groupsで新しいセキュリティグループを作成します。「+ Create Security Group」を選択し、admin-remote-access-sgという名前をつけました。ルール管理画面が表示されますが、新しいIngressルールを2つ追加します。以下のように「All ICMP」、そして同じように「SSH」用のルールを設定しますが、僕のローカルネットワークからのみアクセスを許可するようにCIDRを設定しました。

これでようやく新しいVMを作成できます。Project > Compute > Instancesで「Launch Instance」を選択し、以下のように設定しました。

Details
Instance Name: admin-test-server

Source
「Source」ではVolumeの設定を変更して、以前追加したUbuntuのイメージを適応します。

※ 「Create New Volume: Yes」で失敗しました。おそらくこちらの情報で解決すると思いますが、まだ試せていません。

Flavor
「Flavor」とはAWSのEC2 instance typeと同じ概念ですね。新しいflavorを追加できますが、今回はm1.smallを使います。

Network
以前作成したinternalネットワーク(admin-network-int-01)を適応しました。

Security Group
defaultが付与されますが、こちらを外して新しく作成したセキュリティグループを適応します。

Key Pair
接続ようにキーペアをインポート、もしくは新しく作成します。

「Launch Instance」でVMの起動が開始しますので、あとは「Associate Floating IP」で以前作成したIPアドレスを付与するだけです。

僕の場合、物理ネットワークの192.168.0.220というIPが付与されましたが、問題なくpingssh接続もできました。

まとめ

今回MicroStackを使ってOpenStackを試すことができましたが、確かにインストールは楽でした。使い始められるまでの設定も少なかったですし、個人的に検証用に使う分には良い印象でした。

ただ、いくつかの問題に遭遇しましたし、特にリポジトリーを確認したところもう何ヶ月も内容が更新されていないところも気になりましたので、実際に企業などで使うのは厳しい印象を受けました。

参考