Nise-BOSH で 1VM Cloud Foundry の構築
CloudFoundry という PaaS 環境を自分で作れるオープンソースがあるのだが、 いかんせんそれを構築しようとすると、IaaS が必要だったり、 古いバージョンしかインストールできなかったりと気軽に最新バージョンを試すための環境を作るのがめんどくさい。
ところがつい最近、Nise-BOSH という、 気軽に Cloud Foundry のコンポーネントのインストールを試すことができるツールが出てきたので、 それを使って 1VM 上に Cloud Foundry の必須コンポーネントを全部インストールしてやって、 実際に動作する Cloud Foundry を 1VM で構築してみた。
環境
試した環境は、MacBook Air 11-inch, Late 2010 @ 4GB 上に Vagrant で構築した、 こんな構成。
- OS: Ubuntu 10.04 LTS (Lucid Lynx) 64 bit
- http://files.vagrantup.com/lucid64.box
- Memory: 2048 MB
- IP Address: 192.168.33.10
- HDD: 10GB
- Ruby: ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
インストールするコンポーネント
本当は、以下を説明する前に BOSH とはなんぞやとかそのような説明をするのが筋と言うものだと思うが、 面倒なので割愛する。slideshare に すごいBOSHたのしく学ぼう という資料があがってるのでそれですべてを理解してもらいたい。
理解したなら、Cloud Foundry には cf-release という BOSH 用のレシピが公開されていて、
そのレシピ中の以下の Job Template
をインストールすれば、
Cloud Foundry が構築されるということを把握できているはずであろう。
- potgres
- vcap_redis
- nats
- uaa
- cloud_controller_ng
- serialization_data_server
- dea_next
- gorouter
- health_manager_next
以降の操作はすべて Vagrant で起動した VM 上で root でおこなう。 だって頻繁に root 権限が必要になって面倒なのですもの。
Nise-BOSH のインストール
本来ならば、本物の BOSH
を利用して cf-release
をインストールするのが手順なのだが、
そのためには aws やら OpenStack などが必要になってくるので、
自分の PC 上に Cloud Foundry をインストールするために OpenStack をインストールするだとかよくわからない行動をとることになってしまいがち。
そこで Nise-BOSH
ですよ。
apt-get install debootstrap runit
cd /vcap
git clone https://github.com/nttlabs/nise_bosh.git
cd ./nise_bosh
git remote add yuanying https://github.com/yuanying/nise_bosh.git
git fetch yuanying
git checkout -b multi-monitrc-spike yuanying/multi-monitrc-spike
bundle install
./bin/init
reboot
以上で Nise-BOSH
のインストールが完了。vap ユーザの作成や必須パッケージがインストールされて、
Cloud Foundry がインストールされる準備が整う。
ちなみに、本家の Nise-BOSH
を利用しても良いのだが、
今のところ本家では複数の Job Template
を 1VM にインストールすることを想定していないので、
複数 Job Template
のインストールに対応しているブランチを利用することにした。
Cloud Foundry のインストール
リリースの作成
Cloud Foundry のインストールの前に、cf-release
というリリースのソースから、
リリースを作成する必要がある。
cf-release
は本家のものを使いたいところだが、1VM で動くことを考えていないのかわからないが、
そのまま使うとうまくインストールできないため、
これまたワタクシ作成のパッチを適用してあげたものを利用する。
cd /vcap
git clone https://github.com/cloudfoundry/cf-release.git
cd ./cf-release
git remote add yuanying https://github.com/yuanying/cf-release.git
git pull yuanying master
./update
gem install bosh_cli
bosh create release --force
リリースをダウンロードした後に、bosh create release
でリリースを作成した。
インストール
BOSH
はシステムの構築のために、リリースと、Deployment Manifest
という、
そのシステムをどういう構成で構築するのかの情報を記述したファイルを必要とする。
今回はとりあえず 1VM で動くための Deployment Manifest
を用意したのでそれを利用する。
ドメインは自分の利用したいドメインに修正すること。xip.io を使うと便利かもしれない。
ダウンロードした Deployment Manifest
を、
micro-ng.yml という名前で保存した後に、nise_bosh コマンドで
Cloud Foundry の各コンポーネントをインストールする。
cd /vcap/nise_bosh
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 postgres
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 nats
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 gorouter
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 dea_next
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 health_manager_next
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 cloud_controller_ng
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 serialization_data_server
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 uaa
yes | bundle exec ./bin/nise-bosh /vcap/cf-release /vcap/micro_ng.yml -n 127.0.0.1 vcap_redis
使ってみる
インストールした Cloud Foundry を、以下のコマンドで実行する。
cd /vcap/nise_bosh
mkdir -p /var/vcap/shared
chown vcap:vcap /var/vcap/shared
mkdir -p /var/vcap/store
./bin/run-job start postgres
./bin/run-job start nats
./bin/run-job start gorouter
./bin/run-job start dea_next
./bin/run-job start health_manager_next
./bin/run-job start cloud_controller_ng
./bin/run-job start serialization_data_server
./bin/run-job start uaa
./bin/run-job start vcap_redis
メールアドレス micro@vcamp.me、パスワード micro というアカウントができているので、 適当なクライアントで試せます。起動して安定するまで時間がかかるので、コーヒーを一杯飲んでから試すのが良いかもしれない。
cf target http://api.192.168.33.10.xip.io
cf login micro@vcap.me