GCEでOSvを動かそう

OSvは、ハイパーバイザやIaaSプラットフォームへアプリケーションをデプロイすることに特化した軽量OSです(※詳しくはこちら)。

今回はRuby on Railsで書かれたブログエンジン「Publify」をインストールしたOSvのイメージをGoogle Compute Engine(GCE)へデプロイしてみます。

プロジェクトを作成

まずOSv用にプロジェクトを作成してみます。

Cloud Storageの登録

Cloud Storageが有効化されてなかったので登録しておきます。

GCE SDKのインストー

GCE管理用のコマンド群を使用するため、SDKをインストールします。

curl https://sdk.cloud.google.com | bash
プロジェクトIDの設定

先ほど作成したプロジェクトへログインしてIDを設定します。

gcloud auth login
gcloud config set project fresh-mason-798
バケットの作成

OSvのディスクイメージをアップロードするためにCloud Storageへバケットを作成します。

gsutil mb gs://osv_test
Rubyのインストー

Publify入りのディスクイメージをビルドするためにrvmでRubyをインストールします。

 gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable
source ~/.profile
rvm install 2.1.4
rvm use 2.1.4
sudo yum install sqlite-devel
OSvイメージのビルド

OSvのソースコードをcloneしてPublifyのイメージをビルドします。
ビルドが終わったらGCE用のtar.gzファイルを生成します。

git clone https://github.com/cloudius-systems/osv.git
git submodule update --init --recursive
make image=ruby-publify
./scripts/gen-gce-tarball.sh

※今回は、make image=ruby-publify,httpserverとしたところエラーが出て起動しなかった(Rubyとの組み合わせで発生するバグ)のでhttpserverを外しましたが、これがないと8000番ポートにRESTサーバが起動しないのでOSvの管理が著しく不便になります。Ruby以外のアプリを使用する時は必ず付けることをオススメします。

OSvイメージのデプロイ

gsutil・gcutilコマンドを使ってgen-gce-tarball.shコマンドで生成したosv.tar.gzをアップロード、デプロイします。
今回はus-central1-aのf1-microへosvという名前で実行することにしました。

gsutil cp build/release/osv.tar.gz gs://osv_test/osv.tar.gz
gcutil addimage osv gs://osv_test/osv.tar.gz
gcutil addinstance --image=osv  --machine_type=f1-micro  --zone=us-central1-a osv
動作状況の確認

getserialportoutputでOSvインスタンスの動作状況を確認します。

gcutil getserialportoutput osv

以下のような出力が表示されます。

(略)
OSv v0.16-22-ga6c87f0
eth0: 10.240.159.233
sigaltstack() stubbed
=> Booting Thin
=> Rails 3.2.21 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
You did not specify how you would like Rails to report deprecation notices for your production environment, please set config.active_support.deprecation to :notify at config/environments/production.rb
WARNING: fcntl(F_SETLK) stubbed
Thin web server (v1.6.3 codename Protein Powder)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop
ファイヤウォールの設定

グローバルIPからポート3000へ接続出来るように設定を変更します。

gcutil addfirewall publify --description="publify http" --allowed="tcp:3000"
Publifyへ接続

http://<インスタンスグローバルIP>:3000/ へブラウザから接続すると、Publifyのセットアップ画面が出てくるので設定を開始します。

覗いてみる

http://146.148.55.173:3000/ で起動中です(そのうち落とします)。

まとめ

OSvのイメージをGCEへデプロイする方法を解説しました。
今回はPublifyの例を挙げましたが、CassandraのようなJavaアプリやRedisのようなネイティブアプリも同様の手順でデプロイすることが可能です。