今回はCloud Foundry V2をAll in oneでデプロイしてみます。
All in oneをデプロイするにはいくつか方法がありますが、今回はCloud Foundryが公式に提供している、Bosh-liteを使ってデプロイを試します。
前提環境
VirtualBox
Vagrant(1.4.3以上)
Ruby(1.9.3以上), Bundler
上記2つが動作するOSX,あるいはLinux
メモリ: 6GBのVMを上げられるだけの空きメモリがあること
これらの環境を予め用意しておいてください。
VirtualBoxの他に、VMWare FusionやAWSでも利用可能ですが、今回はVirtualBox前提で解説します。
また、Windows環境でも動作させることは可能ですが、今回の解説では対象外とします。
Bosh-liteのセットアップ
bosh-liteをclone
mkdir ~/workspace
cd ~/workspace
git clone git@github.com:cloudfoundry/bosh-lite.git
~/workspace を作ってcloneしてください。異なるディレクトリにすると、後々スクリプト修正が必要になってしまいます。
vagrant up
cd bosh-lite
bundle install
vagrant up --provider virtualbox
BOSHにログイン
$ bundle install
$ bosh target 192.168.50.4 lite
Target set to `Bosh Lite Director'
$ bosh login
Your username: admin
Enter password: *****
Logged in as `admin'
bundle installで必要なgemをインストールします。
--pathなどを付けずに、グローバルな領域にインストールすることをお勧めします。もし環境を汚したくないと言う場合は、rbenv等でRubyの環境を分けておきましょう。bundle install後、rbenv rehashするのを忘れずに。
インストールが終わったら、boshコマンドでログインします。
username/passwordは admin/admin です。
Routeの追加
sudo scripts/add-route
Warden Stemcellのセットアップ
wget http://bosh-jenkins-gems-warden.s3.amazonaws.com/stemcells/latest-bosh-stemcell-warden.tgz
bosh upload stemcell latest-bosh-stemcell-warden.tgz
VMやコンテナのベースになる、Stemcellをセットアップします。350MB前後あるので、少々時間がかかります。
何かうまく行かないとき
vagrant ssh -c "sudo sv restart director"
何故かboshへのログインやstemcellのアップロードが上手くいかないときは、このコマンドでboshの再起動を試しましょう。
Cloud Foundryのセットアップ
cf-releaseのcloneとセットアップ
cd ~/workspace
git clone https://github.com/cloudfoundry/cf-release
cd cf-release
git checkout v172
git submodule update --init --recursive --force
Cloud Foundryのリポジトリをworkspaceにcloneしたあと、セットアップしたいCFのバージョンをcheckoutします。
releaseのアップロード
cd ~/workspace/bosh-lite
bosh upload release ../cf-release/releases/cf-172.yml
release ymlをboshにアップロードします。チェックアウトしたcf-releaseのバージョンと、ymlのファイル名が一致している必要があります。
しばらく時間がかかるので、気長に待ちます
spiffのセットアップ
https://github.com/cloudfoundry-incubator/spiff/releases
次に、このURLから最新のspiffをダウンロードします。
OSXならば spiff_darwin_amd64.zip
Linuxならば spiff_linux_amd64.zip
をダウンロードし、解凍して出てきたspiffを、パスの通っている場所(/usr/local/bin など)にコピーし、パーミッションを755にしておきます。
(linuxでの例)
wget https://github.com/cloudfoundry-incubator/spiff/releases/download/v1.0/spiff_linux_amd64.zip
unzip spiff_linux_amd64.zip
sudo mv spiff /usr/local/bin
sudo chmod 755 /usr/local/bin/spiff
manifestの作成
./scripts/make_manifest_spiff
manifestを作成するスクリプトを実行します。spiffのセットアップができていなかったり、workspaceディレクトリ以外にbosh-liteをcloneしていると、失敗するので要注意。
CFのデプロイ
bosh deployment manifests/cf-manifest.yml
bosh deploy
長かったセットアップ作業もこれで最後です。
boshにmanifestをアップロードし、deployコマンドでデプロイを開始します。
これも30分程度時間がかかりますので、ゆっくり待ちましょう。スクリプトが流れ終わったらデプロイ完了です。
ログインしてみる
cfコマンドのセットアップ
CFにデプロイするために、cfコマンドをセットアップします。
https://github.com/cloudfoundry/cli
のDownloadsから、各OS向けのCLIインストーラがダウンロードできるので、ダウンロードしてインストールしておきます。
ログインして最初の設定を行う
cf api http://api.10.244.0.34.xip.io
cf auth admin admin
cf create-org me
cf target -o me
cf create-space development
cf target -s development
cfコマンドをインストール出来たら、上記コマンドでログインし、最初の設定を行います。この一連の作業では
- APIエンドポイントの指定
- ログイン
- Orgの作成→指定
- Spaceの作成→指定
を行っています。
アプリのデプロイ
それでは、さっそくアプリのデプロイをしてみましょう。
さきほどセットアップに利用したcf-releaseの中に、サンプルアプリケーションがあるのでそれを使ってみます。
cd ~/workspace/cf-release/src/acceptance-tests/assets/dora/
cf push dora
Sinatraで書かれた、doraというサンプルアプリをpushしました。
Showing health and status for app dora in org me / space development as admin...
OK
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: dora.10.244.0.34.xip.io
state since cpu memory disk
#0 running 2014-07-06 09:31:09 PM 0.0% 22.4M of 256M 0 of 1G
こういう表示が出たら、デプロイ成功です。
curl dora.10.244.0.34.xip.io
Hi, I'm Dora!%
ブラウザが使える環境なら、ブラウザを使ってアプリにアクセスしてみましょう。
QA
v172以外をデプロイしたい
チェックアウトするcf-releaseのtagをデプロイしたいバージョンにして、bosh upload releaseで上げるymlも変更すれば、他のバージョンをデプロイできます。
カスタマイズしてデプロイしたい
spiffで作られたmanifestを変更することで、カスタマイズした構成でデプロイできます(といっても、All in oneで出来ることは限られますが・・・)
MySQLやPostgresなどのServiceはデプロイ出来ないの?
Service系はreleaseが分けられているため、今回の手順だけではデプロイ出来ません。Service付きのデプロイ方法は、また後日解説します。
gem install cfで入るcfコマンドは使えないの?
使えなくはないですが、Ruby CFコマンドはもうメンテされていないので、お勧めしません。
https://github.com/cloudfoundry/cli
からダウンロードできる、Go版のCFコマンドを使いましょう。
ぶっちゃけこれデプロイ面倒くさくない?
めんどいよ!
いくつか簡単にする方法はあるんですが、それはまた後日。