2013年6月13日木曜日

Chefを試してみた

最近巷で流行っているらしいChefを試してみました。

今回はどんなものかを確認するのが目的なので、サクッと前回作ったOpenVZをHyper-V環境上に構築しました。
全てHyper-V上で構築しなかったのは以下の理由からです。

  • 何回も再インストールする可能性がある
  • 再起動せずに動的にメモリを増減できる
  • 再起動が早い
  • OSのセットアップに時間をかけたくない&最少インストール環境でやりたい
  • Linuxしか動かさない
検証環境はこんな感じ。

ググルと、Chef-Soloというクライアントとサーバを同一マシン上に構築する例が非常に多い。
1台くらいなら手動設定しても大した手間ではない気がするが・・・
(そもそも、chefでググルと"シェフ"が出てくるのでw)
あと、日本語のまとまった情報は皆無。
最近Verが11になってインストールもガラッと変わってしまったようで、あまり役に立たない。
結局は公式の英語ドキュメント頼りなのだが、この手の(?)OSSには珍しくドキュメントの量が多いので、読むのもしんどい。

まずは、用語の説明から。
これを最初に押さえておかないと、ドキュメントを読むとき混乱する。
(ええ、随分嵌りましたとも)

ここもしっかり押さえておくといい。

構成要素はこの図が分かりやすかった。

まずはchefサーバの構築から。
これは、噂によるとdebian系じゃないとものすごく大変らしいので、素直に従っておく。
なお、最初メモリを512MBにしたが、スワップしまくりなので、最低1GByteくらいあるといい。

OS:Ubuntu Server(12.10 x86-64)
最少セットアップを行い、アップデートまで済ませておく。
apt-get update
apt-get upgrade
apt-get dist-upgrade
とかとか。
勿論固定IPを割り当てておく。
あと、nslookupとか使えなかったら地味に不便だったので入れておいた。
apt-get install dnsutils
DNSに登録し、ホスト名で引けるようにしておくか、hostsなど何らかの方法で名前解決をできるようにしておくこと。(重要)

1:http://www.opscode.com/chef/install/
より最新版をDL
2:sudo dpkg -i  chef-server_11.0.8-1.ubuntu.12.04_amd64.deb
でインストール(ファイル名は適宜変更のこと)
3:sudo chef-server-ctl reconfigure
で設定を走らせる。
4:chef-server-ctl test
でテストを実行する。
#<Errno::ECONNRESET: Connection reset by peer - SSL_connect>
なエラーが出たら、DNSに登録がないか、名前解決に失敗しているか、opensslが入っていない。

 70 examples, 0 failures
 という感じで出ればOK。
 0 examples, 0 failures
 とでると、失敗している。
https://サーバのホスト名/でアクセス。
右に書いているが、
                  ユーザadmin、パスワードp@ssw0rd1
でログイン。
パスワードを変更する。

サーバに関しては以上。分かってしまえばインストールは簡単。

次。WorkStation。
こいつの役割、複数持たせる必要性を理解していないのだが、Chefサーバを操作する管理コンソールのようなものと理解している。
(の割には、こいつ自体にレシピを作成してサーバにアップロードとかしているので多分違うと思う)

OS:debian6 (x86-64)
メモリは512でも問題なかった。
Ubuntuにしなかったのは、debian系ということで他を試してみたかっただけです。
WindowsやMacでも動くらしい・・・

例によって最少インストール。
アップデート、固定IP、名前解決回りは済ませておく。
地味に構築は悩んだので、一発で動かせるようにした。
sudo apt-get -y install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential wget ssl-cert curl
cd /tmp
curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
tar zxf rubygems-1.8.10.tgz
cd rubygems-1.8.10
sudo ruby setup.rb --no-format-executable
cd
sudo gem install chef --no-ri --no-rdoc
sudo apt-get -y install git-core
git clone git://github.com/opscode/chef-repo.git
mkdir -p ~/chef-repo/.chef


chefサーバの/etc/chef-server/chef-validator.pemを
~/chef-repo/.chef/validation.pemに配置する。
chefサーバの/etc/chef-server/admin.pemを
~/chef-repo/.chef/admin.pemに配置する。

knife configure -i
で設定。
ところどころ、デフォルトのパスが違うので注意。
create new userはchefでのユーザ名になる。(OSとは関係ない)

root@debian:~# knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb] /root/chef-repo/.chef/knife.rb
Overwrite /root/chef-repo/.chef/knife.rb? (Y/N) y
Please enter the chef server URL: [http://debian.localdomain:4000] https://chefサーバのホスト名/
Please enter a name for the new user: [root] akira
Please enter the existing admin name: [admin] admin
Please enter the location of the existing admin's private key: [/etc/chef/admin.pem] /root/chef-repo/.chef/admin.pem
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem] /root/chef-repo/.chef/chef-validator.pem
Please enter the path to a chef repository (or leave blank): /root/chef-repo/
Creating initial API user...
Please enter a password for the new user: 
Created user[akira]
Configuration file written to /root/chef-repo/.chef/knife.rb

/root/chef-repo/内でknife client listと実行すると、クライアントのリストが出てくればOK


最後にクライアント。
設定するのに一番慣れているCentを使った。
OS:CentOS5(x86)

例によって最少インストール。
ネットワークの設定、アップデートなど諸々。

chefクライアントのインストール

curl -L https://www.opscode.com/chef/install.sh | bash
 echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile && source ~/.bash_profile

設定
/etc/chef/client.rbというファイルを作成。
本当はコマンドで作成できるらしいんだけど、うまく動かなかった。
中身は以下の通り。
log_level        :info
log_location     STDOUT
chef_server_url  'https://chefサーバ/'
validation_client_name 'chef-validator'
chefサーバの/etc/chef-server/chef-validator.pemを
クライアントの/etc/chef/validation.pemに配置する。
クライアントを起動してみる。
chef-client

 サーバの管理画面のNodesのタブにクライアントが表示されればOK

では早速動かしてみる。
以下の手順はWorkStationサーバで動かす。

まずはテストクックブックを作成し、テストレシピを作ってみる。
knife cookbook create test
vi ~/chef-repo/cookbooks/test/recipes/default.rb
中身はこんな感じにしてみた。
やっていることは、/var/www/html/hello.txtを監視し、
無いもしくは内容が異なっていたら、テンプレートであるhello.txt.erbの内容で
パーミッション0644で作成せよ。
template "/var/www/html/hello.txt" do
 source "hello.txt.erb"
 mode 0644
end

テンプレートの中身を作成。拡張子はerbでないといけないようです。

vi ~/chef-repo/cookbooks/test/templates/default/hello.txt.erb
HELLO WORLD!


作成したクックブックをchefサーバにアップロードします。

knife cookbook upload test
消すとき
knife cookbook delete test

shefサーバのWeb画面でクライアントに対し、作成したレシピを適用。
クライアント側でchef-clientを実行すると、ファイルが変更されます。


トラブルシューティング

クライアント設定で、chef-clientを実行すると、
Error Resolving Cookbooks for Run List:
というエラーになる。

原因:
/etc/chef/client.rbのサーバのアドレスがhttpになっている。
>httpsにする




0 件のコメント:

コメントを投稿