ようへいの日々精進XP

よかろうもん

Chef Server を使ってみた一部始終(2)〜実際の運用について考えてみる〜

要件

  • とりあえず Chef Server は動くようになったけど、node やら client の関係については引き続き勉強するとして
  • 実際の現場でどのような流れで運用するか(出来るか)を考えてみる

OS セットアップ

  • 例えば XenServer で構築するなら knife xenserver create でテンプレートからホストをセットアップすることが出来る
  • kickstart とかでも何でも良いか OS 自体のインストール時間は 5 分〜 10 分以内で

初期設定

  • ここから chef の登場!
node の登録

Workstation から knife を使う場合

knife node create ${knode_fqdn} -e vim

node の FQDN が Chef Server から名前解決できる状況が必要(だと思われる)。また、この時点では Chef Server には実際の node との関連付けは行われていない。

node から knife configure を実行する場合

knife configure -i

を実行すると

WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb] 
Please enter the chef server URL: [http://debian.local:4000] https://${chefserver}
Please enter a name for the new user: [vagrant] admin
Please enter the existing admin name: [admin] 
Please enter the location of the existing admin's private key: [/etc/chef/admin.pem] 
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): 
Creating initial API user...
Please enter a password for the new user: 
ERROR: Your private key could not be loaded from /etc/chef/admin.pem
Check your configuration file and ensure that your private key is readable

幾つかの質問を Enter で答えると knife.rb が作成される。(root 権限で実行した場合に /root/.chef 以下に生成される。)ので、環境に応じて適宜修正する。以下、自分が行った修正点。

Please enter the chef server URL: [http://debian.local:4000] https://${chefserver}

Chef Server の URL を指定する。Chef 10 までは http://${chefserver}:4000 だったのでその名残りが残っているが、Chef 11 からは https://${chefserver} を設定する。

Please enter a name for the new user: [vagrant] admin

Chef Server の WebUI に設定されているユーザーを指定する。デフォルトで Chef Server に存在する admin ユーザーを指定する。

Please enter the location of the existing admin's private key: [/etc/chef/admin.pem] 

admin ユーザーの秘密鍵のパスを指定。秘密鍵自体は [Users] → [List] → [admin] ユーザーの [Edit] をクリックして、[Regenerate Private Key] にチェックをして生成した秘密鍵を利用した。

Please enter the location of the validation key: [/etc/chef/validation.pem] 

varidation.pem ファイルのパスを指定する。これは Chef Server の [Clients] → [chef-validator] の [Edit] をクリックして [Private Key] にチェックをして生成した秘密鍵を利用した。尚、上記はあくまでも knife から Chef Server にアクセスする為に必要な設定。(という認識。)なので Chef Server から node に対する認識は別途行った。

client.rb を設定する
/etc/chef/client.rb を作成する。

log_level        :info
log_location     STDOUT
chef_server_url  'https://${chefserver}'
validation_client_name 'chef-validator'

chef-client を実行する
chef-client を実行し、正常に Chef Server に接続出来ると client.pem が生成されている。

root@debian:/etc/chef# pwd
/etc/chef
root@debian:/etc/chef# ls -l
total 20
-rw------- 1 root root 1675 Apr 21 06:22 client.pem
-rw------- 1 root root 1679 Apr 21 02:35 client.pem.bk
-rw-r--r-- 1 root root  133 Apr 21 02:35 client.rb
-rw-r--r-- 1 root root 1112 Apr 21 06:24 hoge.txt
-rw-r--r-- 1 root root 1679 Apr 21 02:28 validation.pem
root@debian:/etc/chef# 

また、Chef Server の nodes にホスト((node)が登録されている。
f:id:inokara:20130421153517p:plain

尚、client.pem を置き換えて接続しようとすると...

[2013-04-21T06:24:34+00:00] INFO: HTTP Request Returned 409 Conflict: Client already exists

================================================================================
Chef encountered an error attempting to create the client "debian.local"
================================================================================


Authorization Error:
--------------------
Your validation client is not authorized to create the client for this node (HTTP 403).

こんなエラーが出てしまう。この場合には、Chef Server の nodes と clients に既に登録されているホスト名を削除すると回避出来る。

node に対する cookbook の適用

knife コマンドにて node と cookbook を関連付ける。

knife node run_list add ${node_fqdn} 'recipe[${cookbook}]'
node にて cookbook の適用

node にて chef-client コマンドを実行する。

sudo chef-client

chef-client 自体をデーモン化することで、定期的に Chef Server と通信を行い cookbook を適用させることも出来る。

引き続き検討事項(まとめ)

  • なんと言っても、node と client の関係を明らかにしたい。node を登録すると client まで登録されてしまうのが煩わしい。client のアカウントは一つで node を複数持つことが出来ないのか?
    • 実際の運用の場合には client:node = 1:n という運用のほうが管理が楽なような気がする...
  • Workstation から node をコントロールすることは出来ないのか?
    • chef-client のデーモン化?