ようへいの日々精進XP

よかろうもん

knife-xenserver で XenServer を三枚におろす一部始終(リターンズ)(3)

概要

  • 以前に試した knife-xensever を改めて試してみる
  • 前回は XenServer の調子が悪くて断念してしまったこともあり、改めて、knife-xenserver と chef を利用したサーバーの構築を行なってみたい

前回、前々回まで

  • knife-xenserver を利用して VM の作成したりテンプレートの一覧取得等を行った
  • 同様に knife-xenserver を利用して VM の削除を行った
  • knife-xenserver が XenServer とどのような通信をしているのかをちょっとだけ調べた
  • node の初期設定(bootstrap)の挙動を確認した

今回

  • XenServer で VM を構築後、Chef Server(Hosted Chef)を利用して VM に対して cookbook を適用してみる

登場人物

役割 名前 別名
Chef Server Hosted Chef
Chef Client XenServer 上の VM node
Workstation X1Carbon

Chef Server としては Hosted Chef を利用する。また、すでに Hosted Chef からは knife.rbvalidation.pemaccount.pem はダウンロードされている状態でいつでも Hosted Chef が使える状態にしておくこと。尚、Client ととなるのはもちろん XenServer 上に構築する VM となる。


cookbook を用意する

テスト用の cookbook を用意してみる。この作業は Workstation 上にて行う。

knife cookbook create

knife cookbook create hoge_cookbook -o ./

template リソースを使ったごく簡単な cookbook で...

template "/tmp/config.conf" do
  source "config.conf.erb"
end

knife cookbook upload

Hosted Chef にアップロードする。

knife cookbook upload hoge_cookbook -o ./
Uploading hoge_cookbook  [0.1.1]
Uploaded 1 cookbook.

metadata.rbversion を任意でしているとバージョン番号(上記では 0.1.1)を指定することが出来る。

knife cookbook list

一応、Hosted Chef に登録済みの cookbook 一覧を取得してみる。

knife cookbook list
apache-enable    0.1.0
apache2          1.6.0
apache2-take     0.1.0
chef-client      2.2.2
cron             1.2.2
fluentd_apache   0.1.0
hoge_cookbook    0.1.1

ちゃんと登録されている。


XenServer で VM を構築後、Chef Server(Hosted Chef)を利用して VM に対して cookbook を適用してみる

knife xenserver vm create のおさらい

VM を構築後、VM に対して cookbook を適用する際に必要なオプション。

オプション 役割
--vm-template ${UUID} テンプレートの UUID を指定する
--vm-name ${VM_NAME} VM の名前を指定する
--vm-networks ${NETWORK} VM のネットワークを指定する
--vm-networks VM のネットワークを指定する
-r 適用する run-list やレシピを指定する "recipe[${recipe}]" で指定し、複数ある場合にはカンマで区切る
-d distro を指定する chef-full/centos5-gems/ubuntu12.04-gems 等を指定可能

実行してみる

長かったけどやっと knife xenserver vm create を実行してみる。

knife xenserver vm create --vm-template 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1 --vm-name chef-test2 --vm-networks 'Pool-wide network associated with eth0' -r "recipe[hoge_cookbook]" d chef-full

VM が構築された後で bootstrap が実行された後...

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-test2 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 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-980-88xi5r  2013-05-26 10:33:34.612251948 +0900
xxx.xx.xx.xx         +++ /tmp/chef-rendered-template20130526-980-w9ecix 2013-05-26 10:33:34.611252008 +0900
xxx.xx.xx.xx         @@ -0,0 +1 @@
xxx.xx.xx.xx         +hoge
xxx.xx.xx.xx 
xxx.xx.xx.xx Chef Client finished, 1 resources updated

Name: chef-test2
IP Address: xxx.xx.xx.xx
Environment: _default
Run List: recipe[hoge_cookbook]
Done!

Hosted Chef にアクセスして cookbook をダウンロードして node に cookbook が適用された。念の為、node 上でも確認してみる。

ssh node
[root@vm01 ~]# cd /tmp/
[root@vm01 tmp]# ls
config.conf  yum.log
[root@vm01 tmp]# cat config.conf 
hoge
[root@vm01 ~]#

一応、/tmp/ 以下に config.conf ファイルが作成されている。


まとめ

  • 三回にわたって knife プラグインの一つである knife-xenserver を使ってみた
  • 基本的には他のクラウドプラグイン(knife-ec2 等)と同様に利用することが出来ると思われる
  • Chef Server ではなく chef-solo を使うことが出来ないか調べたが、今のところ出来なさそう...
  • 実運用を考慮すると Chef Server は自前で Opscode の Chef Server を立てるか、軽量簡易な Chef Server の chef-zero を検討する
  • ということで次回は chef-zero を Chef Server に見立つつ、もう少し複雑な cookbook を適用してみる