今回はどんなものかを確認するのが目的なので、サクッと前回作ったOpenVZをHyper-V環境上に構築しました。
全てHyper-V上で構築しなかったのは以下の理由からです。
- 何回も再インストールする可能性がある
- 再起動せずに動的にメモリを増減できる
- 再起動が早い
- OSのセットアップに時間をかけたくない&最少インストール環境でやりたい
- Linuxしか動かさない
検証環境はこんな感じ。
ググルと、Chef-Soloというクライアントとサーバを同一マシン上に構築する例が非常に多い。
1台くらいなら手動設定しても大した手間ではない気がするが・・・
(そもそも、chefでググルと"シェフ"が出てくるのでw)
(そもそも、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サーバを操作する管理コンソールのようなものと理解している。
こいつの役割、複数持たせる必要性を理解していないのだが、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を実行すると、ファイルが変更されます。
トラブルシューティング
クライアント設定で、chef-clientを実行すると、
Error Resolving Cookbooks for Run List:
というエラーになる。
原因:
/etc/chef/client.rbのサーバのアドレスがhttpになっている。
>httpsにする
0 件のコメント:
コメントを投稿