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のサンプルを試してみることにする。それはまた別途書くつもり。。。