fbpx

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:~#

Author

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

Daisuke Higuchiの記事一覧

新規CTA