猫も杓子もクラウドという世相において、クラウドプラットフォームのソフトウェアである「OpenStack」は 非常に重要な位置を占めています。おりしも先月末には国際的なカンファレンスである「OpenStack Summit Tokyo 2015」が開催されました。 これを機に読者の中にも「ちょっと使ってみよう」と思われた方や「ちょっと使ってみろ」と上司に言われた方もいることでしょう。今回はOpenStackを簡単に試せる「DevStack」をVirtualBox上のUbuntuにインストールしてみます。
「OpenStackを簡単に試せる」という幻想
「UbuntuにOpenStackを簡単にデプロイする」と言えば、第341回 でも紹介した「Ubuntu OpenStack Installer 」が存在します。こちらはUbuntu上でKVM/LXC/Juju/MAASを駆使することで、シングルノードやマルチノードのOpenStack Compute環境を構築するツールです。紹介した頃はまだリリースされたばかりのツールでしたが、その後も活発的に開発が続いています。Ubuntuがインストールされた十分に高性能なマシンがある場合は、この方法を使ってインストールし、OpenStackのそれ以外のコンポーネントはJuju経由でセットアップしていくという手もあるでしょう。
しかしながら「ちょっと使ってみる」という目的であれば、上記のようなリソースを用意できないこともあるかもしれません。特に普段はWindowsを使っていて、UbuntuはVirtualBox上だけというケースも多々あるものと思います。そこで今回は、VirtualBox上に構築する方法を考えてみることにします[1] 。
VirtualBox上の仮想マシンではまだKVMが使えません。そこでOpenStack Installerではなく「DevStack 」の「All-In-One Single VM」によるインストールを行います。これは、OpenStackの諸々を一つの仮想マシンの中で動かすモードで、必要に応じてComputeの各インスタンスをQEMUで動かすため、CPU仮想化支援機構がない環境でもOpenStackを試すことができるのです。もちろんKVMを使えない環境ではソフトウェアエミュレーションとなるため、インスタンスの性能はかなり落ちます。
DevStackそのものはその名のとおり、OpenStackの開発のためにその環境を簡単にデプロイするためのツールです。そのためプロダクション環境での利用には向いていません。All-In-One Single VM以外にもいろいろなセットアップ方法が用意はされていますが、もし「ちょっと使ってみる」ではなく本格的に利用する目的であれば、OpenStack Installerといった他のデプロイツールを使うようにしてください。
DevStackのインストール
DevStackはUbuntuだけでなくいろいろなLinuxディストリビューションをサポートしています。今回はUbuntu 14.04.3 LTSを使うことにしましょう。デスクトップ版でもサーバー版でもかまいませんので、あらかじめVirtualBoxにUbuntu 14.04.3 LTSをインストールした仮想マシンを用意しておいてください。仮想マシンには4GB以上のRAMと50GB程度のストレージを割り当てられることが望ましいです[2] 。
インストールしたUbuntuゲストにはホストからsshログインできたほうがこの先なにかと便利です。そこでゲストにopenssh-serverパッケージをインストールしておいてください。またホストからゲストへアクセスするために仮想マシンの設定も必要です。VirtualBoxの設定から仮想マシンにホストオンリーアダプターを追加する方法もありますが、SSH程度であればポートフォワーディングするという手もあります。今回は後者のみ説明します。
VirtualBoxのマネージャーウィンドウから対象の仮想マシンを選択し、設定>ネットワーク>ポートフォワーディングの順にメニューをたどってください。仮想マシンは起動中の状態でもかまいません。あとは設定画面でホストの2022ポートをゲストの22ポートに転送しておきましょう。IPアドレスについては空欄のままでも大丈夫です。
図1 SSHのポートフォワード設定
ホストから次のようにゲストにssh接続できるか確認してください。
$ ssh -o UserKnownHostsFile=/dev/null -p 2022 127.0.0.1
Ubuntuサーバーの仮想マシンを用意できたら、実際にDevStackをインストールします。インストールの手順自体は簡単です。
$ sudo apt-get install git
$ git clone -b stable/liberty https://git.openstack.org/openstack-dev/devstack
$ cd devstack
上記ではOpenStackの10月にリリースされたばかりであるLibertyを指定しています。ちなみにここでstable/libertyブランチの代わりにmasterブランチを使うと、OpenStackの開発版がインストールされることになります[3] 。
[3] local.confの中で「コンポーネント名_BRANCH」変数を設定すると、コンポーネントごとに使用するブランチを変更することも可能です。詳しくはstackrcファイルの中を参照してください。
次に設定ファイルであるlocal.confを編集します。最低限必要なのは、各サービスのパスワードを個別に設定することだけです。
[[local|localrc]]
ADMIN_PASSWORD=devstack
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=tokentoken
インスタンスを起動する際に利用するツールはDEFAULT_VIRT_DRIVERやLIBVIRT_TYPE変数で設定します。何も設定していない場合はlibvirtとkvmの組み合わせを使用します。さらにVirtualBoxのようなkvmが使えない(/dev/kvmが存在しない)環境では自動的にqemuにフォールバックします。また、インスタンスのコンソール上でlibvirtと日本語レイアウトのキーボードを組み合わせて使う場合、NovaのVNCの設定が必要です 。次のようにvnc_keymapオプションを設定するコードをlib/novaに追加しましょう。
(以下のような形になるよう、vnc_keymapの行を追加する)
iniset $NOVA_CONF DEFAULT novncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
iniset $NOVA_CONF DEFAULT xvpvncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
iniset $NOVA_CONF DEFAULT vnc_keymap "ja"
最後にデプロイスクリプトを実行しましょう。表示されるログからGitリポジトリからのクローンやパッケージのインストールがいろいろと動いていることがわかるはずです。環境によりますがデプロイ完了まで30分弱かかります。
$ ./stack.sh
(前略)
This is your host IP address: 10.0.2.15
This is your host IPv6 address: ::1
Horizon is now available at http://10.0.2.15/dashboard
Keystone is serving at http://10.0.2.15:5000/
The default users are: admin and demo
The password: devstack
2015-11-15 10:24:17.368 | stack.sh completed in 1611 seconds.
HorizonのURLが表示されるのでそこにアクセスしましょう。といっても今回ゲストはNAT設定になっています。そこで仮想マシンにSSHと同じように80ポートへのポートフォワードを設定します。VirtualBoxのマネージャーウィンドウから対象の仮想マシンを選択し、設定、ネットワーク、ポートフォワーディングの順にメニューをたどって設定してください。
図2 HTTPとコンソール用のポートフォワード設定
6080番ポートは後ほど仮想マシンのコンソールにアクセスするために設定しています。さて、ホスト上のブラウザから「http://localhost:2080」にアクセスしてみましょう。Horizonのログイン画面が表示されたら、ユーザー名「admin」 、パスワード「devstack」でログインしてください。
図3 Ubuntuテーマが適用されていないOpenStack Horizonのログイン画面
図4 ログインしたらシステムの概要が表示される
DevStackでデプロイされるコンポーネントはlocal.confもしくはstackrcにあるENABLED_SERVICES変数で変更できます。特に指定しなければCompute(Nova) 、Identicy(Keystone) 、Block Storage(Cinder) 、Image Service(Glance)あたりが導入されます。
なお、起動したサービスのログは、GNU screenのウィンドウとして展開されています。状況を確認したい場合はDevStackをインストールしたマシン上で次のコマンドを実行してください。
$ screen -x devstack
サービスごとにウィンドウが展開されていますので、「 Ctrl-a」のあとにpキーやnキーでウィンドウをたどっていくとログが表示されることでしょう。screenを抜けるには(デタッチするには)「 Ctrl-a」のあとにdキーを入力します。
イメージの追加とインスタンスの起動
実際にインスタンスを起動してみましょう。Glanceには最初からCirrOS と呼ばれる軽量OSが登録されています[4] 。これを起動しても良いのですが、せっかくUbuntuのRecipeなのでUbuntuのクラウドイメージを登録する方法を紹介します[5] 。
Horizonのサイドバーにある「プロジェクト」から「コンピュート」の「イメージ」を選択します。名前や説明は適当に入力し、「 イメージソース」に次のURLを入力します。
http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
さらに形式は「QCOW2」を選択して、「 イメージの作成」ボタンをクリックしてください。
図5 イメージの作成
イメージのダウンロードが始まります。「 ステータス」が「稼働中」になるまでしばらく時間がかかるので注意してください。
さて、ようやくインスンタンスの起動です。Horizonのサイドバーにある「プロジェクト」から「コンピュート」の「インスタンス」を選択します。画面にあらわれた「インスタンスの起動」をクリックして表示されるダイアログにて、「 インスタンス名」を設定し、「 インスタンスのブートソース」を「イメージから起動」に、「 イメージ名」を先ほど追加したUbuntuにします。「 フレーバー」はm1.nanoだと割り当てメモリーサイズが小さすぎるので最低でもm1.microに変更しておいたほうがよいでしょう。
図6 インスタンスの設定
UbuntuのCloud Imageはアカウントを作るもののパスワードをロックするため、そのままだとコンソールログインできません。あらかじめ「アクセスとセキュリティー」タブからキーペアを生成して追加するか、「 作成後」タブでCloudInit スクリプトで調整する必要があります。今回はてっとりばやくCloudInitでパスワードを変更してしまいましょう。「 作成後」タブで「直接入力」を選択した上で、次の設定を入力してください。
#cloud-config
password: vmpass
chpasswd: { expire: False }
ssh_pwauth: True
4行目の設定は、SSHのパスワードログインを許可するものです。もし「アクセスとセキュリティー」からキーペアを登録するのであれば、パスワードログインは不許可のままにしておきましょう。
図7 CloudInitの設定
最後に「起動」ボタンを押してインスタンスを起動します。起動処理に入ると自動的にインスタンスのステータス画面に遷移します。「 ステータス」が「稼働中」になったら「インスタンス名」をクリックしてみましょう。インスタンスの詳細画面が表示されますので、「 コンソール」タブをクリックしてください。VirtualBoxの仮想マシンのネットワーク設定がNATのみの場合、このままではコンソールを表示できません。そこで「コンソールのみを表示するにはここをクリックします」のリンク先をコピーし、IPアドレス部分を「localhost」に置き換えて再度アクセスします。
図8 起動完了後のコンソール画面
アカウント名は「ubuntu」 、パスワードはCloudInitで設定した「vmpass」指定します。
コンソールではなくSSH経由で接続する場合は、まず22番ポートにアクセスできるようセキュリティーグループを設定します。サイドバーの「アクセスとセキュリティー」から「セキュリティーグループ」でdefaultグループのルールを編集するか、新規グループを作成してください。次にインスタンスのアクションから「Floating IPの割り当て」を選択してIPアドレスを割り当てた上で、同じくアクションの「セキュリティグループの編集」で先ほど作成したグループを追加します。
仮想マシンの外からアクセスするならば、VirtualBoxのポートフォワード設定を追加してインスタンスのFloating IPの22番ポートにアクセスできるようにしておきましょう。
XenialとMitakaに向けて
UbuntuもOpenStackも半年毎、4月と10月にリリースを行っています。UbuntuではOpenStackの最初のリリースであるAustinのリリース前後からUbuntuに取り込む対応を開始し、CactusからはUbuntuのリリース時点でOpenStackの最新リリースを、つまりはリリースされたばかりのバージョンを取り込み続けています。
またLTSで提供するバージョンについては、Ubuntuのmainコンポーネントとして5年間のサポート を行うことになっています。たとえば12.04時のEssexや14.04時のIcehouseがLTSの対象です。
さて、来年4月のリリースを目指して開発中のXenial Xerus は、2年ぶりのLTSとなる予定です。このLTSには、OpenStackの次のリリースであるMitaka が取り込まれ、5年間サポートされることになるでしょう。この「Mitaka」はそのまま東京の「三鷹」のことです。OpenStackのコードネームはUbuntuと同じくアルファベット順に命名されますが、その候補はOpenStack Summitが開催される都市の周辺で該当する名前を選ぶ仕組みになっているのです。
せっかくの日本語名がついたリリースです。これを機にDevStackで開発版のOpenStackを試し、開発に参加してみるのはいかがでしょうか。