fbpx

Chef Soloの実例〜CloudFoundryインストーラ [2]

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

Chef Soloを用いたCloud Foundryのコンポーネントごとインストール

前回同様、Chef Soloを内部で用いているCloud Foundryのインストールを行います。今回は、単一のホストにCloud FoundryすべてをインストールするAll-in-One形式ではなく、コンポーネントごとに個別のホストにインストールを行います。

Scalrが提供しているCloud Foundryでは、

  • 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のインストーラにはRolesCookbooksが含まれており、これらを元にインストールが行われます。

イメージの事前準備

元となるイメージを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のコンポーネントごとのホストが協調し、正常に動作していることが確認できました。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA