Chef Soloの実例〜CloudFoundryインストーラ [2]
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Chef Soloを用いたCloud Foundryのコンポーネントごとインストール
前回同様、Chef Soloを内部で用いているCloud Foundryのインストールを行います。今回は、単一のホストにCloud FoundryすべてをインストールするAll-in-One形式ではなく、コンポーネントごとに個別のホストにインストールを行います。
- cf-all-in-one: Cloud Foundryのすべてのコンポーネント
- cf-dea: DEA
- cf-router: Router
- cf-cchm: Cloud ControllerとHealth Managerなどのコアコンポーネント
のように、用途別のイメージを提供しています。
2012年4月現在のCloud Foundryのインストーラは、そのまま起動するとAll-in-One形式のインストールが行われますが、設定ファイルを与えてやることでコンポーネントごとのインストールを行えるようになっています。
コンポーネントごとのインストールはChefのRoleを利用して実現されています。Roleとは、AttributesとRun Listで構成されており、Nodeに対して複数のRecipeを適用するために用いられます。
Cloud FoundryのインストーラにはRolesとCookbooksが含まれており、これらを元にインストールが行われます。
イメージの事前準備
元となるイメージをubuntu server 10.04.4 (amd64)で準備します。このイメージは、コンポーネントごとの個別ホストにコピーして利用することになります。
ubuntu server 10.04.4 (amd64)のインストールが完了したら、curlをインストールします。
cf@ubuntu:~$ sudo aptitude install curl : cf@ubuntu:~$
次に、Cloud Foundryのインストールスクリプトを取得します。
cf@ubuntu:~$ wget https://github.com/cloudfoundry/vcap/raw/master/dev_setup/bin/vcap_dev_setup : cf@ubuntu:~$
取得したインストールスクリプトのchefsolo_launch.rbを起動している部分をコメントアウトします。これにより、初期設定、Chefのインストール、Cloud Foundryのgitレポジトリのクローンまでが行われます。
cf@ubuntu:~$ cp -a vcap_dev_setup vcap_dev_setup.orig cf@ubuntu:~$ cp -a vcap_dev_setup vcap_dev_setup-no-chefsolo cf@ubuntu:~$ vi vcap_dev_setup-no-chefsolo cf@ubuntu:~$ diff -u vcap_dev_setup.orig vcap_dev_setup-no-chefsolo --- vcap_dev_setup.orig 2012-04-24 09:58:46.634198516 +0900 +++ vcap_dev_setup-no-chefsolo 2012-04-24 10:00:49.084222703 +0900 @@ -154,4 +154,4 @@ ARGS="$ARGS -c $CONFIG_FILE" fi -$CLOUDFOUNDRY_HOME/vcap/dev_setup/lib/chefsolo_launch.rb $ARGS +#$CLOUDFOUNDRY_HOME/vcap/dev_setup/lib/chefsolo_launch.rb $ARGS cf@ubuntu:~$
変更したインストールスクリプトを実行します。
cf@ubuntu:~$ bash < ./vcap_dev_setup-no-chefsolo : deb http://apt.opscode.com/ lucid-0.10 main : 以下のパッケージが新たにインストールされます: chef irb1.8 libabstract-ruby1.8 libbunny-ruby libbunny-ruby1.8 liberubis-ruby : Initialized empty Git repository in /home/cf/cloudfoundry/vcap/.git/ : Already on 'master' cf@ubuntu:~$
以降はこのイメージを、インストールするコンポーネントごとにコピーして使います。
コンポーネントごとの分割方針
今回は4台のホストに分割を行います。
ホスト名 | IPアドレス | コンポーネント |
---|---|---|
cchm | 192.168.122.230 | Cloud Controller, CCDB, Health Manager, NATS server, 各サービスのGateway |
service0 | 192.168.122.220 | MySQL, MongoDB, Redis, Neo4j, RabbitMQ |
dea0 | 192.168.122.210 | Dea |
router0 | 192.168.122.200 | Router, Nginx |
分割の仕方はdeployments/READMEに簡単に記載されており、deployments/sampleに実例がいくつか用意されています。これらを参考に設定ファイルを作成し、個々のホストにインストールしていきます。
cchmのインストール
cchm.ymlファイルを以下の通り作成します。Cloud Controller, CCDB, Health Manager, NATS server, 各サービスのGatewayをインストールするものとします。
--- # cchm deployment: name: "cchm" domain: "example.jp" jobs: install: - cloud_controller: builtin_services: - mysql - mongodb - redis - neo4j - rabbitmq - ccdb - health_manager - nats_server - mysql_gateway - mongodb_gateway - redis_gateway - neo4j_gateway - rabbitmq_gateway
この設定ファイルを、インストールスクリプトに-cオプションで与えます。この設定ファイルのYAML形式のリストはChef用のRun Listに展開され、必要なRecipeの実行が行われます。All-in-One形式と異なり、各サービスそのものやDea、RouterなどはRun Listに含まれておらず、一切インストールされないことを確認します。
cf@cchm:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c cchm.yml [sudo] password for cf: : Installing deployment cchm, cloudfoundry home dir is /home/cf/cloudfoundry [Thu, 26 Apr 2012 11:35:49 +0900] INFO: *** Chef 0.10.8 *** [Thu, 26 Apr 2012 11:35:49 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[nats_server]", "role[ccdb]", "role[cloud_controller]", "role[mongodb_gateway]", "role[rabbitmq_gateway]", "role[neo4j_gateway]", "role[mysql_gateway]", "role[health_manager]", "role[redis_gateway]"] from JSON [Thu, 26 Apr 2012 11:35:49 +0900] INFO: Run List is [role[cloudfoundry], role[nats_server], role[ccdb], role[cloud_controller], role[mongodb_gateway], role[rabbitmq_gateway], role[neo4j_gateway], role[mysql_gateway], role[health_manager], role[redis_gateway]] [Thu, 26 Apr 2012 11:35:49 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, nats_server, postgresql, ccdb, ruby::ruby18, cloud_controller, mongodb::gateway, rabbitmq::gateway, neo4j::gateway, mysql::gateway, health_manager, redis::gateway] [Thu, 26 Apr 2012 11:35:49 +0900] INFO: Starting Chef Run for cchm [Thu, 26 Apr 2012 11:35:49 +0900] INFO: Running start handlers [Thu, 26 Apr 2012 11:35:49 +0900] INFO: Start handlers complete. : [Thu, 26 Apr 2012 11:50:00 +0900] INFO: Chef Run complete in 851.163901 seconds [Thu, 26 Apr 2012 11:50:00 +0900] INFO: Running report handlers [Thu, 26 Apr 2012 11:50:00 +0900] INFO: Report handlers complete Deployment Info *************** * Status: Success * Config files: /home/cf/cloudfoundry/.deployments/cchm/config * Deployment name: cchm * Note: * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local * Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n cchm start cf@cchm:~$
インストールが完了したら、指示通りにコンポーネントの起動を行います。
cf@cchm:~$ source /home/cf/.cloudfoundry_deployment_local cf@cchm:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n cchm start Targeting deployment "cchm" with cloudfoundry home "" Setting up cloud controller environment Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/cchm/config Executing /home/cf/cloudfoundry/.deployments/cchm/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start cloud_controller mongodb_gateway neo4j_gateway rabbitmq_gateway mysql_gateway health_manager redis_gateway -c /home/cf/cloudfoundry/.deployments/cchm/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/cchm/log cloud_controller : RUNNING mongodb_gateway : RUNNING neo4j_gateway : RUNNING rabbitmq_gateway : RUNNING mysql_gateway : RUNNING health_manager : RUNNING redis_gateway : RUNNING cf@cchm:~$
このように、必要なコンポーネントの起動のみが行われます。なお、CCDBで用いられるPostgreSQLとNATS serverは別途起動しています。
cf@cchm:~$ ps auxwwwf | grep "[ p]ostgres" postgres 24109 0.0 0.3 101596 7000 ? S 11:44 0:00 /usr/lib/postgre ql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_file=/etc/postgresql/8.4/main/postgresql.conf postgres 24111 0.0 0.1 101716 3196 ? Ss 11:44 0:00 \_ postgres: writer process postgres 24112 0.0 0.0 101596 1724 ? Ss 11:44 0:00 \_ postgres: wal writer process postgres 24113 0.0 0.0 101732 2028 ? Ss 11:44 0:00 \_ postgres: autovacuum launcher process postgres 24114 0.0 0.0 73136 1632 ? Ss 11:44 0:00 \_ postgres: stats collector process postgres 3527 0.0 0.3 104660 7420 ? Ss 11:52 0:00 \_ postgres: root cloud_controller 192.168.122.230(60541) idle postgres 3610 0.0 0.3 104616 7604 ? Ss 11:53 0:00 \_ postgres: root cloud_controller 192.168.122.230(60548) idle cf@cchm:~$ cf@cchm:~$ ps auxwwwf | grep "[ n]ats" root 3430 0.1 0.9 65940 19676 ? Sl 11:50 0:00 nats-server cf@cchm:~$
service0のインストール
service0.ymlファイルを以下の通り作成します。各サービスにはindexを振ります。今後service1などホストを増やした場合、indexを増やしていきます。また、NATS serverとして、既にインストール済のcchmホストを指定します。
--- # service0 deployment: name: "service0" domain: "example.jp" jobs: install: - mysql_node: index: "0" - mongodb_node: index: "0" - redis_node: index: "0" - neo4j_node: index: "0" - rabbitmq_node: index: "0" installed: - nats_server: host: "192.168.122.230" port: "4222" user: "nats" password: "nats"
cchm同様、この設定ファイルをインストールスクリプトに-cオプションで与えます。
cf@service0:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c service0.yml [sudo] password for cf: : [Thu, 26 Apr 2012 11:58:49 +0900] INFO: *** Chef 0.10.8 *** [Thu, 26 Apr 2012 11:58:49 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[neo4j_node]", "role[mysql_node]", "role[redis_node]", "role[rabbitmq_node]", "role[mongodb_node]"] from JSON [Thu, 26 Apr 2012 11:58:49 +0900] INFO: Run List is [role[cloudfoundry], role[neo4j_node], role[mysql_node], role[redis_node], role[rabbitmq_node], role[mongodb_node]] [Thu, 26 Apr 2012 11:58:49 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, neo4j, neo4j::node, mysql, mysql::node, redis, redis::node, rabbitmq, rabbitmq::node, mongodb, mongodb::node] [Thu, 26 Apr 2012 11:58:49 +0900] INFO: Starting Chef Run for service0 [Thu, 26 Apr 2012 11:58:49 +0900] INFO: Running start handlers [Thu, 26 Apr 2012 11:58:49 +0900] INFO: Start handlers complete. : [Thu, 26 Apr 2012 12:10:03 +0900] INFO: Chef Run complete in 673.710487 seconds [Thu, 26 Apr 2012 12:10:03 +0900] INFO: Running report handlers [Thu, 26 Apr 2012 12:10:03 +0900] INFO: Report handlers complete Deployment Info *************** * Status: Success * Config files: /home/cf/cloudfoundry/.deployments/service0/config * Deployment name: service0 * Note: * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local * Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n service0 start cf@service0:~$
インストールが完了したら、指示通りにコンポーネントの起動を行います。
cf@service0:~$ source /home/cf/.cloudfoundry_deployment_local cf@service0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n service0 start Targeting deployment "service0" with cloudfoundry home "" Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/service0/config Executing /home/cf/cloudfoundry/.deployments/service0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start neo4j_node mysql_node redis_node rabbitmq_node mongodb_node -c /home/cf/cloudfoundry/.deployments/service0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/service0/log neo4j_node : RUNNING mysql_node : RUNNING redis_node : RUNNING rabbitmq_node : RUNNING mongodb_node : RUNNING cf@service0:~$
サービスの起動のみが行われました。
dea0のインストール
dea0.ymlファイルを以下の通り作成します。service0.yml同様、NATS serverはcchmホストを指定します。
--- # dea0 deployment: name: "dea0" domain: "example.jp" jobs: install: - dea installed: - nats_server: host: "192.168.122.230" port: "4222" user: "nats" password: "nats"
これまで同様、この設定ファイルをインストールスクリプトに-cオプションで与えます。
cf@dea0:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c dea0.yml [sudo] password for cf: : Installing deployment dea0, cloudfoundry home dir is /home/cf/cloudfoundry [Thu, 26 Apr 2012 12:14:03 +0900] INFO: *** Chef 0.10.8 *** [Thu, 26 Apr 2012 12:14:03 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[dea]"] from JSON [Thu, 26 Apr 2012 12:14:03 +0900] INFO: Run List is [role[cloudfoundry], role[dea]] [Thu, 26 Apr 2012 12:14:03 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, dea] [Thu, 26 Apr 2012 12:14:03 +0900] INFO: Starting Chef Run for dea0 [Thu, 26 Apr 2012 12:14:03 +0900] INFO: Running start handlers [Thu, 26 Apr 2012 12:14:03 +0900] INFO: Start handlers complete. : [Thu, 26 Apr 2012 12:42:20 +0900] INFO: Chef Run complete in 1697.303422 seconds [Thu, 26 Apr 2012 12:42:20 +0900] INFO: Running report handlers [Thu, 26 Apr 2012 12:42:20 +0900] INFO: Report handlers complete Deployment Info *************** * Status: Success * Config files: /home/cf/cloudfoundry/.deployments/dea0/config * Deployment name: dea0 * Note: * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local * Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 start cf@dea0:~$
インストールが完了したら、指示通りにコンポーネントの起動を行います。
cf@dea0:~$ source /home/cf/.cloudfoundry_deployment_local cf@dea0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 start Targeting deployment "dea0" with cloudfoundry home "" Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log dea : RUNNING cf@dea0:~$
RUNNINGと出ていますが、実際は動作していません。
cf@dea0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 status Targeting deployment "dea0" with cloudfoundry home "" Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap status dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log dea : STOPPED cf@dea0:~$
ログを確認してみます。
cf@dea0:~$ lv /home/cf/cloudfoundry/.deployments/dea0/log/dea.log : [2012-04-26 12:43:27.172843] dea - pid=6011 tid=c9c0 fid=890f INFO -- Using directory: /var/vcap.local/dea/ /home/cf/cloudfoundry/vcap/dea/lib/dea/agent.rb:1766:in `block in update_droplet_fs_usage': Failed parsing df output: Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 (RuntimeError) /dev/vda1 9833300 3727516 5606280 40% / from /home/cf/cloudfoundry/vcap/dea/lib/dea/agent.rb:1773:in `call' :
このように、dfコマンドの出力に日本語が含まれているため、パースに失敗しているようです。そこで、起動スクリプトに環境変数 LANG=C LC_ALL=C を与えて起動し直します。
cf@dea0:~$ LANG=C LC_ALL=C /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n de a0 start Targeting deployment "dea0" with cloudfoundry home "" Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log dea : RUNNING cf@dea0:~$ cf@dea0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 status Targeting deployment "dea0" with cloudfoundry home "" Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap status dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log dea : RUNNING cf@dea0:~$
今度はこのように起動に成功しました。
router0のインストール
router0.ymlファイルを以下の通り作成します。やはり、NATS serverはcchmホストを指定します。
--- # router0 deployment: name: "router0" domain: "example.jp" jobs: install: - router installed: - nats_server: host: "192.168.122.230" port: "4222" user: "nats" password: "nats"
同様に、この設定ファイルをインストールスクリプトに-cオプションで与えます。
cf@router0:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c router0.yml [sudo] password for cf: : Installing deployment router0, cloudfoundry home dir is /home/cf/cloudfoundry [Thu, 26 Apr 2012 12:48:44 +0900] INFO: *** Chef 0.10.8 *** [Thu, 26 Apr 2012 12:48:45 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[router]"] from JSON [Thu, 26 Apr 2012 12:48:45 +0900] INFO: Run List is [role[cloudfoundry], role[router]] [Thu, 26 Apr 2012 12:48:45 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, nginx, router] [Thu, 26 Apr 2012 12:48:45 +0900] INFO: Starting Chef Run for router0 [Thu, 26 Apr 2012 12:48:45 +0900] INFO: Running start handlers [Thu, 26 Apr 2012 12:48:45 +0900] INFO: Start handlers complete. : [Thu, 26 Apr 2012 12:56:08 +0900] INFO: Chef Run complete in 443.2477 seconds [Thu, 26 Apr 2012 12:56:08 +0900] INFO: Running report handlers [Thu, 26 Apr 2012 12:56:08 +0900] INFO: Report handlers complete Deployment Info *************** * Status: Success * Config files: /home/cf/cloudfoundry/.deployments/router0/config * Deployment name: router0 * Note: * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local * Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n router0 start cf@router0:~$
インストールが完了したら、指示通りにコンポーネントの起動を行います。
cf@router0:~$ source /home/cf/.cloudfoundry_deployment_local cf@router0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n router0 start Targeting deployment "router0" with cloudfoundry home "" Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/router0/config Executing /home/cf/cloudfoundry/.deployments/router0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start router -c /home/cf/cloudfoundry/.deployments/router0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/router0/log router : RUNNING cf@router0:~$
以上で、すべてのコンポーネントごとのインストールが完了しました。
動作テスト
これらのホストとは別のホストから、vmcコマンドを用いて動作の確認を行います。まず、vmcコマンドを実行するホストの/etc/hostsに、router0ホストを指すエントリを追加します。
192.168.122.200 api.example.jp
このホストをターゲットに指定します。
cf@worker:~$ vmc target api.example.jp Successfully targeted to [http://api.example.jp] cf@worker:~$
ターゲットとして指定することに成功しました。次に、ユーザ登録を行います。
cf@worker:~$ vmc register --email cf@example.jp --passwd example Creating New User: OK Attempting login to [http://api.example.jp] Successfully logged into [http://api.example.jp] cf@worker:~$
ユーザ登録に成功しました。ここでcchmのログを確認してみます。
cf@cchm:~$ tail cloudfoundry/.deployments/cchm/log/cloud_controller.log : [2012-04-26 13:24:20.458470] cc_events - pid=1087 tid=99c8 fid=ac2b INFO -- [2012-04-26 13:24:20 +0900, :USER, "N/A", "POST:/users", "cf@example.jp", :SUCCEEDED] [2012-04-26 13:24:20.463739] cc - pid=1087 tid=99c8 fid=ac2b DEBUG -- Login request from cf@example.jp [2012-04-26 13:24:20.536121] cc - pid=1087 tid=99c8 fid=ac2b DEBUG -- Login request from cf@example.jp token # [2012-04-26 13:24:20.537255] cc_events - pid=1087 tid=99c8 fid=ac2b INFO -- [2012-04-26 13:24:20 +0900, :USER, "N/A", "POST:/users/cf@example.jp/tokens", :SUCCEEDED] cf@cchm:~$
ユーザ登録が成功したことが確認できます。
では、サンプルアプリの作成し、pushします。
cf@worker:/tmp$ mkdir env cf@worker:/tmp$ cd env/ cf@worker:/tmp/env$ cat > env.rb require 'rubygems' require 'sinatra' get '/' do host = ENV['VMC_APP_HOST'] port = ENV['VMC_APP_PORT'] "<h1>Hello from the Cloud! via: #{host}:#{port}</h1>" end cf@worker:/tmp/env$ cf@worker:/tmp/env$ vmc push env --instances 4 --mem 64M --url env.example.jp -n Creating Application: OK Uploading Application: Checking for available resources: OK Packing application: OK Uploading (0K): OK Push Status: OK Staging Application: OK Starting Application: OK cf@worker:/tmp/env$
pushに成功しました。cchmのログとdea0のログを確認してみます。
cf@cchm:~$ lv cloudfoundry/.deployments/cchm/log/cloud_controller.log : [2012-04-26 13:27:31.829169] cc_events - pid=1087 tid=99c8 fid=ac2b INFO -- [2012-04-26 13:27:31 +0900, :USER, "cf@example.jp", "PUT:/apps/env", "env", :SUCCEEDED] [2012-04-26 13:27:31.833380] cc - pid=1087 tid=99c8 fid=2a44 DEBUG -- Received "{\"id\":\"ed2f8644b67154419b22c64cc3e43000\",\"ip\":\"192.168.122.210\",\"port\":12345,\"version\":0.99}" in response to dea.discover request [2012-04-26 13:27:31.833543] cc - pid=1087 tid=99c8 fid=2a44 DEBUG -- Sending start message {"droplet":1,"name":"env","uris":["env.example.jp"],"runtime":"ruby18","framework":"sinatra","sha1":"8312ab833f0724ae4e88a4ea558192f87f0a8671","executableFile":"/var/vcap/shared/droplets/8312ab833f0724ae4e88a4ea558192f87f0a8671","executableUri":"http://192.168.122.230:9022/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671","version":"8312ab833f0724ae4e88a4ea558192f87f0a8671-1","services":[],"limits":{"mem":64,"disk":2048,"fds":256},"env":[],"users":["cf@example.jp"],"debug":null,"console":null,"index":0} to DEA ed2f8644b67154419b22c64cc3e43000 [2012-04-26 13:27:31.847439] cc_events - pid=1087 tid=99c8 fid=ac2b INFO -- [2012-04-26 13:27:31 +0900, :USER, "N/A", "GET:/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671", :SUCCEEDED] [2012-04-26 13:27:31.888304] cc - pid=1087 tid=99c8 fid=2a44 DEBUG -- Received "{\"id\":\"ed2f8644b67154419b22c64cc3e43000\",\"ip\":\"192.168.122.210\",\"port\":12345,\"version\":0.99}" in response to dea.discover request : cf@cchm:~$
cf@dea0:~$ lv cloudfoundry/.deployments/dea0/log/dea.log : [2012-04-26 13:27:31.828489] dea - pid=1023 tid=7aa6 fid=17b0 DEBUG -- DEA received discovery message: {"droplet":1,"limits":{"mem":64,"disk":2048,"fds":256},"name":"env","runtime":"ruby18","sha":"8312ab833f0724ae4e88a4ea558192f87f0a8671"} [2012-04-26 13:27:31.831843] dea - pid=1023 tid=7aa6 fid=17b0 DEBUG -- DEA received start message: {"droplet":1,"name":"env","uris":["env.example.jp"],"runtime":"ruby18","framework":"sinatra","sha1":"8312ab833f0724ae4e88a4ea558192f87f0a8671","executableFile":"/var/vcap/shared/droplets/8312ab833f0724ae4e88a4ea558192f87f0a8671","executableUri":"http://192.168.122.230:9022/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671","version":"8312ab833f0724ae4e88a4ea558192f87f0a8671-1","services":[],"limits":{"mem":64,"disk":2048,"fds":256},"env":[],"users":["cf@example.jp"],"debug":null,"console":null,"index":0} [2012-04-26 13:27:31.831954] dea - pid=1023 tid=7aa6 fid=17b0 DEBUG -- Requested Limits: mem=64M, fds=256, disk=2048M [2012-04-26 13:27:31.832076] dea - pid=1023 tid=7aa6 fid=17b0 DEBUG -- reserved_mem = 64 MB, max_memory = 4096 MB [2012-04-26 13:27:31.832173] dea - pid=1023 tid=7aa6 fid=1e60 DEBUG -- Need to download app bits from http://192.168.122.230:9022/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671 [2012-04-26 13:27:31.833006] dea - pid=1023 tid=7aa6 fid=17b0 DEBUG -- DEA received discovery message: {"droplet":1,"limits":{"mem":64,"disk":2048,"fds":256},"name":"env","runtime":"ruby18","sha":"8312ab833f0724ae4e88a4ea558192f87f0a8671"} [2012-04-26 13:27:31.846515] dea - pid=1023 tid=7aa6 fid=1e60 DEBUG -- Took 0.014 323594 to download and write file :
デプロイに成功したので、アクセスしてみます。
cf@worker:~$ telnet 192.168.122.200 80 Trying 192.168.122.200... Connected to 192.168.122.200. Escape character is '^]'. GET / HTTP/1.1 Host: env.example.jp Connection: close HTTP/1.1 200 OK Server: nginx/0.7.65 Date: Thu, 26 Apr 2012 04:33:54 GMT Content-Type: text/html;charset=utf-8 Connection: close X-Frame-Options: sameorigin X-XSS-Protection: 1; mode=block Content-Length: 57 <h1>Hello from the Cloud! via: 192.168.122.210:51435</h1> Connection closed by foreign host. cf@worker:~$
このサンプルアプリではservice0は用いていませんが、少なくともcchm、router0、dea0のコンポーネントごとのホストが協調し、正常に動作していることが確認できました。