Chefを使ってみよう [2]
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Server, Node, Workstationの3台構成
前回はchef-allホスト1台ですべての役割を負っていましたが、今回はServer, Node, Workstationの役割をそれぞれ1台に分割します。
ホスト名 | IPアドレス | 一般ユーザ |
chef-server | 192.168.24.210 | admin |
chef-node | 192.168.24.211 | nodeuser |
chef-workstation | 192.168.24.212 | worker |
chef-serverホストは前回のchef-allホストを改名してそのまま利用します。
chef-nodeホストとchef-workstationホストは新規にUbuntu Server 11.10をインストールし、Opscode社のaptレポジトリの設定までを行います。
chef-nodeホストの準備
chef-nodeホストにChefのClientをインストールします。
root@chef-node:~# aptitude install chef The following NEW packages will be installed: chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a} liberubis-ruby{a} liberubis-ruby1.8{a} libhighline-ruby{a} libjson-ruby{a} libmixlib-authentication-ruby{a} libmixlib-authentication-ruby1.8{a} libmixlib-cli-ruby{a} libmixlib-cli-ruby1.8{a} libmixlib-config-ruby{a} libmixlib-config-ruby1.8{a} libmixlib-log-ruby{a} libmixlib-log-ruby1.8{a} libmoneta-ruby{a} libmoneta-ruby1.8{a} libnet-ssh-multi-ruby{a} libnet-ssh2-ruby{a} libohai-ruby{a} libohai-ruby1.8{a} libpolyglot-ruby{a} libreadline5{a} librestclient-ruby{a} libruby1.8{a} libsystemu-ruby1.8{a} libtreetop-ruby{a} libuuidtools-ruby{a} libuuidtools-ruby1.8{a} libyajl-ruby{a} ohai{a} ruby-highline{a} ruby-ipaddress{a} ruby-json{a} ruby-mime-types{a} ruby-net-ssh{a} ruby-net-ssh-gateway{a} ruby-net-ssh-multi{a} ruby-rest-client{a} ruby1.8{a} ruby1.8-dev{a} rubygems{a} 0 packages upgraded, 43 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/3,932 kB of archives. After unpacking 22.3 MB will be used. Do you want to continue? [Y/n/?] y :
This is the full URI that clients will use to connect to the server. . This will be used in /etc/chef/client.rb as 'chef_server_url'. URL of Chef Server (e.g., http://chef.example.com:4000):
には http://192.168.24.210:4000 と入力し、Chef Serverとしてchef-serverホストに接続するように設定します。
ただし、この状態ではchef-clientプロセスはchef-serverホストに接続することはできません。chef-clientプロセスのログを確認してみます。
root@chef-node:~# cat /var/log/chef/client.log [Sat, 14 Apr 2012 14:49:27 +0900] INFO: Daemonizing.. [Sat, 14 Apr 2012 14:49:27 +0900] INFO: Forked, in 732. Priveleges: 0 0 [Sat, 14 Apr 2012 14:49:46 +0900] INFO: *** Chef 0.10.8 *** [Sat, 14 Apr 2012 14:49:46 +0900] INFO: Client key /etc/chef/client.pem is not present - registering [Sat, 14 Apr 2012 14:49:46 +0900] WARN: Failed to read the private key /etc/chef/validation.pem: # [Sat, 14 Apr 2012 14:49:46 +0900] ERROR: Chef::Exceptions::PrivateKeyMissing: I cannot read /etc/chef/validation.pem, which you told me to use to sign requests! [Sat, 14 Apr 2012 14:49:46 +0900] FATAL: Stacktrace dumped to /var/cache/chef/chef-stacktrace.out [Sat, 14 Apr 2012 14:49:46 +0900] ERROR: Sleeping for 1800 seconds before trying again
このようにCehf Serverの秘密鍵がないためです。よって、chef-serverホストの秘密鍵をchef-nodeホストにコピーします。
root@chef-node:~# cat > /etc/chef/validation.pem : (chef-server の /etc/chef/validation.pem をコピーします) : root@chef-node:~# cat > /etc/chef/webui.pem : (chef-server の /etc/chef/webui.pem をコピーします) : root@chef-node:~# chmod 600 /etc/chef/*.pem root@chef-node:~# chown root.root /etc/chef/*.pem root@chef-node:~#
chef-clientプロセスを再起動します。
root@chef-node:~# /etc/init.d/chef-client restart * Restarting chef-client chef-client ...done. root@chef-node:~#
再度ログを確認します。
root@chef-node:~# cat /var/log/chef/client.log [Sat, 14 Apr 2012 15:01:39 +0900] INFO: Daemonizing.. [Sat, 14 Apr 2012 15:01:39 +0900] INFO: Forked, in 1215. Priveleges: 0 0 [Sat, 14 Apr 2012 15:01:52 +0900] INFO: *** Chef 0.10.8 *** [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Client key /etc/chef/client.pem is not present - registering [Sat, 14 Apr 2012 15:01:52 +0900] INFO: HTTP Request Returned 404 Not Found: Cannot load node chef-node [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Run List is [] [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Run List expands to [] [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Starting Chef Run for chef-node [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Running start handlers [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Start handlers complete. [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Loading cookbooks [] [Sat, 14 Apr 2012 15:01:52 +0900] WARN: Node chef-node has an empty run list. [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Chef Run complete in 0.109309 seconds [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Running report handlers [Sat, 14 Apr 2012 15:01:52 +0900] INFO: Report handlers complete
これでchef-nodeホストのchef-clientプロセスはchef-serverホストに定期的に問い合わせを行えるようになりました。現時点ではrecipeが登録されていないため、何も行いません。
chef-serverホストの準備
次にchef-serverホストに、遠隔ホストから操作するためのユーザを作成します。ここで遠隔ホストはchef-workstationホスト、操作ユーザはworkerとします。 まず、現在Chef Serverに登録されているユーザを確認します。
admin@chef-server:~$ knife client list admin cf chef-node chef-server chef-validator chef-webui admin@chef-server:~$
workerユーザを作成します。-aオプションで管理ユーザとして作成し、-fオプションで秘密鍵のファイル名を指定します。
admin@chef-server:~$ knife client create worker -a -f worker.pem Created client[worker] admin@chef-server:~$
workerユーザが作成できたことを確認します。
admin@chef-server:~$ knife client list admin cf chef-node chef-server chef-validator chef-webui worker admin@chef-server:~$
chef-workstationホストの準備
chef-workstationホストにもchef-nodeホストと同様に、ChefのClientをインストールします。
root@chef-workstation:~# aptitude install chef The following NEW packages will be installed: chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a} :
chef-serverホストの/home/admin/.chef/validation.pemと/home/admin/worker.pemをchef-workstationホストの/home/worker/.chef/ディレクトリにコピーします。
worker@chef-workstation:~$ mkdir .chef worker@chef-workstation:~$ chmod 700 .chef worker@chef-workstation:~$ cat > .chef/worker.pem : (chef-serverホストの/home/admin/worker.pemをコピーします) : worker@chef-workstation:~$ cat > .chef/validation.pem : (chef-serverホストの/home/admin/.chef/validation.pemをコピーします) : worker@chef-workstation:~$ chmod 600 .chef/*.pem worker@chef-workstation:~$
knife コマンドで設定を行います。Chef Server URLと秘密鍵のパス以外はエンターキーを押すだけです。
worker@chef-workstation:~$ knife configure WARNING: No knife configuration file found Where should I put the config file? [~/.chef/knife.rb] Please enter the chef server URL: [http://chef-workstation:4000]
http://192.168.24.210:4000
Please enter an existing username or clientname for the API: [worker] Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef/validation.pem]
/home/worker/.chef/validation.pem
Please enter the path to a chef repository (or leave blank): ***** You must place your client key in: /home/worker/.chef/worker.pem Before running commands with Knife! ***** You must place your validation key in: /home/worker/.chef/validation.pem Before generating instance data with Knife! ***** Configuration file written to /home/worker/.chef/knife.rb worker@chef-workstation:~$
chef-workstationホストからchef-serverホストにあるChef Serverの情報が取得できるか確認します。
worker@chef-workstation:~$ knife client list admin cf chef-node chef-server chef-validator chef-webui worker worker@chef-workstation:~$ worker@chef-workstation:~$ knife status 22 minutes ago, chef-node, chef-node, 192.168.24.211, ubuntu 11.10. 2 minutes ago, chef-server, chef-server, 192.168.24.210, ubuntu 11.10. worker@chef-workstation:~$
このように、chef-serverホストにいちいちログインせずともChef環境の状況を確認できるようになりました。
chef-workstationホストからChef環境の操作
chef-workstationホスト上でcookbookを作成します。
worker@chef-workstation:~$ knife cookbook create sample3 -o . ** Creating cookbook sample3 ** Creating README for cookbook: sample3 ** Creating metadata for cookbook: sample3 worker@chef-workstation:~$ ls -l 合計 4 drwxrwxr-x 10 worker worker 4096 2012-04-14 15:27 sample3 worker@chef-workstation:~$
/tmpにファイルを書き出すrecipeを作成します。
worker@chef-workstation:~$ vi sample3/recipes/default.rb # # Cookbook Name:: sample3 # Recipe:: default # template '/tmp/chef-test3' do source 'chef-test3.erb' mode 0644 end worker@chef-workstation:~$ worker@chef-workstation:~$ vi sample3/templates/default/chef-test3.erb Welcome to Chef! (3) CPU :<%= node[:cpu][:"0"][:model_name] %> Memory:<%= node[:memory][:total] %> OS :<%= node[:platform] %> <%= node[:platform_version] %> worker@chef-workstation:~$
chef-workstationホストからchef-serverホストにcookbookを登録します。
worker@chef-workstation:~$ knife cookbook upload sample3 -o . Uploading sample3 [0.0.1] upload complete worker@chef-workstation:~$
cookbookが登録できたことを確認します。
worker@chef-workstation:~$ knife cookbook list sample 0.0.1 sample3 0.0.1 worker@chef-workstation:~$ knife recipe list sample: 0.0.1: default sample3: 0.0.1: default worker@chef-workstation:~$
chef-workstationホストから、chef-nodeホストにrecipeを追加するようにchef-serverホストを操作します。
worker@chef-workstation:~$ knife node show chef-node Node Name: chef-node Environment: _default FQDN: chef-node IP: 192.168.24.211 Run List: Roles: Recipes: Platform: ubuntu 11.10 worker@chef-workstation:~$ worker@chef-workstation:~$ knife node run_list add chef-node 'recipe[sample3]' run_list: recipe[sample3] worker@chef-workstation:~$ worker@chef-workstation:~$ knife node show chef-node Node Name: chef-node Environment: _default FQDN: chef-node IP: 192.168.24.211 Run List: recipe[sample3] Roles: Recipes: Platform: ubuntu 11.10 worker@chef-workstation:~$
登録しただけではrecipeは実行されません。chef-nodeホスト上のchef-clientプロセスがchef-serverホストに問い合わせを行う必要があります。今はそれを待たずに、chef-nodeホストにログインし、手動でchef-clientコマンドを実行してみます。
nodeuser@chef-node:~$ ls -l /tmp/ 合計 0 nodeuser@chef-node:~$ nodeuser@chef-node:~$ sudo /usr/bin/chef-client [sudo] password for nodeuser: [Sat, 14 Apr 2012 15:34:53 +0900] INFO: *** Chef 0.10.8 *** [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Run List is [recipe[sample3]] [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Run List expands to [sample3] [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Starting Chef Run for chef-node [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Running start handlers [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Start handlers complete. [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Loading cookbooks [sample3] [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Storing updated cookbooks/sample3/recipes/default.rb in the cache. [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Storing updated cookbooks/sample3/README.md in the cache. [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Storing updated cookbooks/sample3/metadata.rb in the cache. [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Processing template[/tmp/chef-test3] action create (sample3::default line 6) [Sat, 14 Apr 2012 15:34:53 +0900] INFO: template[/tmp/chef-test3] mode changed to 644 [Sat, 14 Apr 2012 15:34:53 +0900] INFO: template[/tmp/chef-test3] updated content [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Chef Run complete in 0.163047 seconds [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Running report handlers [Sat, 14 Apr 2012 15:34:53 +0900] INFO: Report handlers complete nodeuser@chef-node:~$
recipeが実行され、ファイルが作成されたことを確認します。
nodeuser@chef-node:~$ ls -l /tmp/ 合計 4 -rw-r--r-- 1 root root 95 2012-04-14 15:34 chef-test3 nodeuser@chef-node:~$ nodeuser@chef-node:~$ cat /tmp/chef-test3 Welcome to Chef! (3) CPU :QEMU Virtual CPU version 1.0 Memory:1022172kB OS :ubuntu 11.10 nodeuser@chef-node:~$
次は、chef-clientプロセスによる定期問い合わせでrecipeが実行されるかどうか、ファイルを削除して待ってみます。
root@chef-node:~# rm /tmp/chef-test3 root@chef-node:~#
およそ30分後に recipe が実行されました。
[Sat, 14 Apr 2012 15:31:53 +0900] INFO: Report handlers complete [Sat, 14 Apr 2012 16:02:12 +0900] INFO: *** Chef 0.10.8 *** [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Run List is [recipe[sample3]] [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Run List expands to [sample3] [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Starting Chef Run for chef-node [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Running start handlers [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Start handlers complete. [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Loading cookbooks [sample3] [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Processing template[/tmp/chef-test3] action create (sample3::default line 6) [Sat, 14 Apr 2012 16:02:12 +0900] INFO: template[/tmp/chef-test3] mode changed to 644 [Sat, 14 Apr 2012 16:02:12 +0900] INFO: template[/tmp/chef-test3] updated content [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Chef Run complete in 0.120727 seconds [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Running report handlers [Sat, 14 Apr 2012 16:02:12 +0900] INFO: Report handlers complete
root@chef-node:~# ls -l /tmp 合計 4 -rw-r--r-- 1 root root 95 2012-04-14 16:02 chef-test3 root@chef-node:~# root@chef-node:~# cat /tmp/chef-test3 Welcome to Chef! (3) CPU :QEMU Virtual CPU version 1.0 Memory:1022172kB OS :ubuntu 11.10 root@chef-node:~#