kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

Chef ServerにClient/Nodeを登録

昨日書いたさくらのVPSにchef-serverをインストール - kikumotoのメモ帳で作成したChef Serverに、Chefのclietやnodeを登録した手順をメモする。インストール対象はここでもさくらのVPS CentOS5.5 i386環境。

client, nodeが何かについてはChefを最速で使いこなすためのいくつかのポイント - Masatomo Nakano Blogが非常にわかりやすかった。

knife client

Cookbookを作成してServerに反映(アップ)するためツールとしてknifeというものがあり、それをChef Serverのclientとして登録する必要がある。

rubyをインストールして、/etc/chef/solo.rbを記述するところまでは、serverと同じ手順。clientをインストールするためには ~/chef.jsonを以下のように記述。

{
  "chef": {
    "server_url": "http://[chef serverのホスト名orIP]:4000",
    "init_style": "init"
  },
  "run_list": [ "recipe[chef::bootstrap_client]" ]
}

これで、次のようにchef-soloコマンドを実行した。

chef-solo -c /etc/chef/solo.rb -j ~/chef.json -r http://s3.amazonaws.com/chef-solo/bootstrap-latest.tar.gz

なお、cookbookの作成やアップロードは一般ユーザで実行してよいものなので、適当なユーザを用意しておく。

で、knife clientのためにキーペア(公開鍵、秘密鍵)を作成する。私の理解では公開鍵はChef Serverに保持され、公開鍵を自身で管理することになる。これは、Chef Server上で作成したknifeの環境で以下のように実行する。

$ knife client create user1 -n -a -f ./user1.pem

この作成された秘密鍵(user1.pem)を、今回作業しているサーバにscpなどの手段で持ってくる。Chef Server側ではこのファイルは消してしまってよい。

$ cd ~
$ mkdir .chef
$ scp [chef-server]:/path/to/user1.pem ./chef/

この状態で以下のようにknife configureでknife環境を設定する。

$ knife configure
/usr/lib/ruby/gems/1.8/gems/rest-client-1.6.1/lib/restclient/abstract_response.rb:50: warning: parenthesize argument(s) for future version
No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb] 
Please enter the chef server URL: [http://localhost:4000] http://[Chef Serverホスト名orIP]:4000
Please enter an existing username or clientname for the API: [root] user1
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem] 
Please enter the path to a chef repository (or leave blank): 
WARN: *****
WARN: 
WARN: You must place your client key in:
WARN:   /home/user1/.chef/user1.pem
WARN: Before running commands with Knife!
WARN: 
WARN: *****
WARN: 
WARN: You must place your validation key in:
WARN:   /etc/chef/validation.pem
WARN: Before generating instance data with Knife!
WARN: 
WARN: *****
WARN: Configuration file written to /home/user1/.chef/knife.rb

これでknife client listとして、user1が含まれたリストが表示されればOK。

Nodeの登録

Chef Server上のrecipeを適用して、自分が望む状態にしたい対象のサーバがNodeという理解。そのサーバ上では別にknifeが動く必要性もない。

NodeはChef Serverに登録しないといけないので、その手順を書く。

chef-soloを実行するまでは上記のknife clientの場合と同じ。その後、Chef Serverから/etc/chef/validation.pemをNodeとして登録したサーバの同位置に持ってくる。そして

# chef-client

と実行すればOK。

これで、Chef Web UI とか、knife node list とかに登録したノードが表示される。また、clientとしても登録されている。

以上で、Cookbook を作成する環境と、構築したいNodeの環境が整った。

今後はCookbookのサンプルを試してみることにする。それはまた別途書くつもり。。。