追記(2013.05.27)
認証周りについて、@urasoko さんより下記のように教えて頂きました。
認証の話は補足が必要でしたね。キーチェックはされないんですが、.pem ファイルは必要なんです。repo にダミーファイルが公開されてます。Server との通信で varidation-key が必要なのは README にもなくてハマります。 #opschef_ja
— Hiroyuki Urasokoさん (@urasoko) 2013年5月26日
.pem ファイル自体は必要なものの中身のチェックはされないようです。
@inokara あと "node の管理自体がそれほど複雑に行わない場合には chef-zero でも十分実用的だと思われる" なんですが、 chef-zero 落ちたらぜーんぶ消えちゃうんで危険かとw(僕も同じ事思ったんですww)永続性と冗長性を実装しないと運用は無理ぽ><
— Hiroyuki Urasokoさん (@urasoko) 2013年5月27日
現場での運用を考慮すると永続的な node 情報や cookbook 情報の保持等が懸念材料となるので、結局のところ Opscode の Chef Server になってしまうのかなと思ってしまったりしてます。
概要
環境
役割 | 名前 | 環境 |
---|---|---|
Chef Server | chef-zero | Debian 7 / apt-get にて ruby と ruby-dev をインストール |
Chef Client | XenServer 上の VM | CentOS 6.4 |
Workstation | X1Carbon | Debian 7 |
構築
必要なパッケージのインストール
apt get install ruby ruby-dev libssl-dev
gem にてインストール
gem install chef-zero --no-ri --no-rdoc
Building native extensions. This could take a while... Fetching: mixlib-log-1.6.0.gem (100%) Fetching: hashie-2.0.5.gem (100%) Fetching: moneta-0.6.0.gem (100%) Fetching: chef-zero-1.0.1.gem (100%) Successfully installed puma-2.0.1 Successfully installed mixlib-log-1.6.0 Successfully installed hashie-2.0.5 Successfully installed moneta-0.6.0 Successfully installed chef-zero-1.0.1 5 gems installed
インストール出来た。
ヘルプを確認してみる。
root@debian:~# chef-zero -h Usage: chef-zero [ARGS] -H, --host HOST Host to bind to (default: 127.0.0.1) -p, --port PORT Port to listen on --[no-]generate-keys Whether to generate actual keys or fake it (faster). Default: false. -l, --log-level LEVEL Set the output log level -h, --help Show this message --version Show version
デフォルトはローカルホストのみのアクセスを受け付けるとのことなので全てのホストからアクセスを受けつけるように -H
オプションで 0.0.0.0
を指定して chef-zero を起動する。
chef-zero -H 0.0.0.0
>> Starting Chef Zero (v1.0.1)... >> Puma (v2.0.1) is listening at http://0.0.0.0:8889 >> Press CTRL+C to stop
Web サーバー(puma)が 8889 番で Listen して起動する。ちなみに puma は EngineYard 製の ruby で書かれた Web サーバーで puma の名のごとく動作が速いのが売りらしく、公式サイトでは消費メモリが他の Web サーバー(Unicorn 等)より少ないのも特徴らしい。
初期設定
knife.rb の chef_server_url
に chef-zero の IP アドレスとポートを指定する。
chef_server_url "http://xxx.xxx.xxx.xxx:8889"
chef-zero は @urasoko さんがこちらで書かれている通り、認証が不要とのことで、client_key
や validation_key
等を無効化してみて試した。
まず client_key
を無効化してみると...
knife client list
ERROR: Your private key could not be loaded from /etc/chef/client.pem Check your configuration file and ensure that your private key is readable
こんな感じでエラーとなるので client_key
は chef-zero サーバーにアクセスする為には必須のようだ。また、実際に VM を構築する段階で validation_key
の設定を行なっていない場合には下記のようなエラーが出てしまう...。
Connecting to XenServer host xxx.xxx.xxx.xxx... Creating VM chef-test-zero... Using template hoge [uuid: 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1]... VM Name: chef-test-zero VM Memory: 512 MB Waiting server... Server IPs: xxx.xxx.xxx.xxx,xxxx::xxxx:xxxx:xxxx:xxxx Waiting for sshd... Trying to SSH to xxx.xxx.xxx.xxx... done Bootstrapping Chef on xxx.xxx.xxx.xxx ERROR: Errno::ENOENT: No such file or directory - /etc/chef/validation.pem
となるので、実際に chef-zero を介して chef を利用する場合には client_key
と validation_key
の項目としての設定は必須であるが、中身に関して特にチェックされていないように思われる。なぜなら、client_key
と validation_key
に指定されたファイルは Hosted Chef からダウンロードされたものなので、前述の通り、認証は不要と言えると思う。
動作確認の為 knife client list
を実行してみる。
knife client list
chef-validator chef-webui
上記の通り正常に結果が返ってくる。
cookbook をアップロードしてみる
以前に Hosted Chef に登録した hoge_cookbook を少し弄って登録してみる。
vim hoge_cookbook/templates/default/config.conf.erb
chef-zero で設定されたことが判るように...
welcome to chef-zero
そして chef-zero にアップロードする。
cd ${chef-repo} knife cookbook upload hoge_cookbook -o ./
アップロード出来たようだ。
Uploading hoge_cookbook [0.1.2] Uploaded 1 cookbook.
念の為、登録されている cookbook を確認してみる。
knife cookbook list
アップロードされている。
hoge_cookbook 0.1.2
Hosted Chef と表示のされ方が同じだー。
knife-xenserver との連携
早速、実行してみる
満を持して knife xenserver を実行してみる。
knife xenserver vm create --vm-template 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1 --vm-name chef-test-zero --vm-networks 'Pool-wide network associated with eth0' -r "recipe[hoge_cookbook]" -d chef-full
さらっと bootstrap が終わって chef-zero サーバーから cookbook が同期される。
xxx.xx.xx.xx Thank you for installing Chef! xxx.xx.xx.xx Starting Chef Client, version 11.4.4 xxx.xx.xx.xx Creating a new client identity for chef-test-zero using the validator key. xxx.xx.xx.xx resolving cookbooks for run list: ["hoge_cookbook"] xxx.xx.xx.xx Synchronizing Cookbooks: xxx.xx.xx.xx - hoge_cookbook xxx.xx.xx.xx Compiling Cookbooks... xxx.xx.xx.xx Converging 1 resources xxx.xx.xx.xx xxx.xx.xx.xx Recipe: hoge_cookbook::default xxx.xx.xx.xx * template[/tmp/config.conf] action create xxx.xx.xx.xx xxx.xx.xx.xx - create template[/tmp/config.conf] xxx.xx.xx.xx --- /tmp/chef-tempfile20130526-984-o5lrqf 2013-05-26 14:48:24.721241712 +0900 xxx.xx.xx.xx +++ /tmp/chef-rendered-template20130526-984-1nk1y24 2013-05-26 14:48:24.720241712 +0900 xxx.xx.xx.xx @@ -0,0 +1 @@ xxx.xx.xx.xx +welcome to chef-zero xxx.xx.xx.xx xxx.xx.xx.xx Chef Client finished, 1 resources updated Name: chef-test-zero IP Address: xxx.xx.xx.xx Environment: _default Run List: recipe[hoge_cookbook] Done!
念の為、対象の node にアクセスして確認してみる。
ssh node
[root@vm01 ~]# cd /tmp/ [root@vm01 tmp]# ls config.conf yum.log [root@vm01 tmp]# cat config.conf welcome to chef-zero
/tmp/ 以下に config.conf ファイルが作成されていて、welcome to chef-zero
が確認出来た!
まとめ(追記:2013.05.27)
- chef-zero は Hosted Chef や既存の Chef Server よりも簡単に扱えるところが良い
- 結果として、今回のような knife プラグイン等のテストに気軽に使えるところも良い
また、node の管理自体がそれほど複雑に行わない場合には chef-zero でも十分実用的だと思われる。ちゃんと運用していくには node 管理や冗長化等を検討する必要がある- とすると、やっぱりテスト用途等に限定されてしまいそうである...