Ubuntu Weekly Recipe

第341回 OpenStack環境を30分で構築する

この記事を読むのに必要な時間:およそ 5 分

インストールしたあとは

cloud-statusの画面を見るとわかるとおり,cloud-installコマンドだけで,一通りのサービスがインストールされ,起動しています。試しにOpenStackそのものを操作する場合,このうちDashboardにアクセスしてブラウザーから操作する方法が一般的でしょう。この場合,cloud-statusに表示されているURIにアクセスすれば良いだけです。ちなみにJuju GUIも使えるようになっています。Juju GUIについての詳しいことは第307回を参照してください。

図2 OpenStack DashboardのURIとJuju GUIのURI

図2 OpenStack DashboardのURIとJuju GUIのURI

さらに計算ノードを追加する場合も,このcloud-statusから行えます。シングルインストールの場合はそのマシン上に仮想マシンが追加されるだけなのであまり恩恵はありませんが,マルチインストールを構築した場合は,試してみると良いでしょう。

インストールマシンの外からDashboardにアクセスする

OpenStack installerの場合,LXCで作成したuoi-bootstrapコンテナーの中で各種サービスを立ち上げている都合上,OpenStack installerを実行した「マシンの外」からアクセスしたい場合は一手間必要です。特にWebサーバーとしてOpenStack Dashboardだけでなく,Juju GUIも立ち上がっているため,単純に80番ポートを転送すれば良いというわけではないことに注意してください。

iptablesでポート転送する,リバースプロキシを利用するなどいくつかの方法が考えられます。ここではnginxを使ったリバースプロキシの設定方法を紹介しておきましょう。

インストールしたマシン上で,nginxをインストールします(uoi-bootstrapコンテナーの中ではありません)⁠

$ sudo apt install nginx

Juju GUIも使いたい場合はSSLを有効にする必要があります。よってサーバーの証明書や秘密鍵も用意しておいてください。テスト目的ならとりあえず次のように作っておけば良いでしょう。

$ openssl req -new -days 365 -x509 -nodes -keyout cert.key -out cert.crt
$ sudo install -m 400 cert.key /etc/nginx/
$ sudo install -m 644 cert.crt /etc/nginx/

nginxのドキュメントを参考にリバースプロキシの設定を行います。Juju GUIを使う場合は,WebSocketをSSL経由で使えるようにしておく必要もあります。今回は「/etc/nginx/sites-available/cloudinstaller」を新規作成してそこに次のような設定を書いておきましょう。

server {
    listen 80;

    location / {
        proxy_pass http://10.0.4.169;
        proxy_set_header Host $http_host;
    }
}

server {
    listen 8080;

    location / {
        proxy_pass http://10.0.4.170;
        proxy_set_header Host $http_host;
    }
}

server {
       listen 443 ssl;

       ssl on;
       ssl_certificate /etc/nginx/cert.crt;
       ssl_certificate_key /etc/nginx/cert.key;

       location / {
             proxy_pass https://10.0.4.169;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
       }
}

設定を変更したら,有効化して再読み込みします。またdefault設定ファイルは削除しておきましょう。

$ sudo rm /etc/nginx/sites-enabled/default
$ sudo ln -s /etc/nginx/sites-available/cloudinstaller /etc/nginx/sites-enabled/
$ sudo service nginx configtest
$ sudo service nginx reload

OpenStack Dashboardには8080番ポートでアクセスするようにしています。Juju GUIを使わない場合は,80番ポートと443番ポートの設定は不要です。proxy_passのIPアドレスはそれぞれcloud-statusで表示されるDashboardとJuju GUIのIPアドレスに変更してください。

あとは外から,⁠http://(cloud-installしたマシンのIPアドレス):8080/horizon」にアクセスすればOpenStack Dashboardにアクセスできますし,⁠https://(cloud-installしたマシンのIPアドレス)⁠にアクセスすればJuju GUIになります。なおOpenStack Dashboardのアカウント名は「ubuntu」⁠パスワードはcloud-installで設定したパスワードです。

ちなみに,UbuntuのクラウドイメージをGlanceに同期させる「Simplestreams Image Sync」サービスも,HTTPを経由しています。設定の仕方によってはこのサービスが同期できなくなりますので,注意してください。

図3 OpenStack Dashboardのログイン画面

図3 OpenStack Dashboardのログイン画面

図4 OpenStack Dashboardにログインした状態

図4 OpenStack Dashboardにログインした状態

図5 ネットワークトポロジー

図5 ネットワークトポロジー

図6 Juju GUIの画面

図6 Juju GUIの画面

インスタンスを起動する

試しにDashboardからインスタンスを起動してみましょう。コンピュートのインスタンスから「インスタンスの起動」をクリックします。

最低でも詳細タブとネットワークタブの設定を行ってください。あとは「起動」ボタンを押せば,インスタンスが起動します。

図7 インスタンスの設定

図7 インスタンスの設定

図8 起動処理の開始

図8 起動処理の開始

もし「No valid host was found」と表示されてインスタンスの起動に失敗する場合は,おそらくリソースが足りていない状態です。

LXCの上でOpenStack installerを動かす

今回はUbuntu 14.04 LTSをインストールしたホスト上に直接OpenStack installerをインストールしました。OpenStack installer自身がコンテナーを作ってその上でいろいろ設定するとは言え,ホストに直接PPAを追加したくない場合もあるでしょう。

Ubuntu 14.04 LTSの上にコンテナーを作ってその上でOpenStack installerをインストールすることも可能です。この場合,Nested LXCが動くようにすることと,コンテナー内部からKVMが実行できるようにする必要があります。まずはLXCをインストールした上で,OpenStack installer用のコンテナーを作成しましょう。

$ sudo apt install lxc
$ sudo lxc-create -t ubuntu-cloud -n openstack -- --auth-key=/home/`id -u -n`/.ssh/authorized_keys

次にopenstackコンテナーの中でLXCを使えるようにします。

$ sudo editor /var/lib/lxc/openstack/config
(以下の2行を追加します)
lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting

さらにopenstackコンテナーの中でKVMを使えるようにします。

$ sudo editor /var/lib/lxc/openstack/rootfs/etc/rc.local
(exit 0;より前の行に次の3行を追加します)
mkdir -p /dev/net || true
mknod /dev/kvm c 10 232
mknod /dev/net/tun c 10 200

あとはopenstackコンテナーを起動し,そこにログインさえすれば,これまでの説明と同じ方法でインストールできます。

$ sudo lxc-start -n openstack -d
$ sudo lxc-attach -n openstack

この方法の場合,外からDashboardやJuju GUIにアクセスする際は,ホストマシンとopenstackコンテナーの間のポート転送設定も行わなくてはいけません。基本的にuoi-bootstrapコンテナーへの転送と手順は同じです。

まとめ

このようにUbuntu OpenStack installerを使えば,既存のUbuntuのオーケストレーションツールを駆使して,OpenStack環境をコマンド1つで構築できます。もし「ちょっとOpenStack環境作ってくれない?」なんて無茶ぶりされたときは,DevStackやPackstackの次ぐらいの選択肢の1つとして心の片隅にとどめておいてもらえれば嬉しいです。

すみません,コマンド1つは言い過ぎでした。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入