2012年12月11日火曜日

ChefかPuppetで悩んだお話

前回の記事でChefは動くようになったと思います。
ChefとPuppetの違いはなんだろうと思い使いながら気づいた事をツラツラと書いておきます。

DSL


これらの構成管理ツールはPuppetだとマニフェストでChefだとレシピを統一された言語とフォーマットで記述し誰が見てもわかる状態であることがとても大切だと思っています。

やはり大きな違いは外部DSL(Puppet)か内部DSL(Chef)であることがあげられます。

この点に関しては大きな差は見られないといったところでしょうか。ChefもDSLチックに書くことができRubyを殆ど書かなくてもレシピを書き上げることができます。

前述したましたが構成管理は”統一された言語とフォーマット”であるべきだと思っているので各構成管理ツールの専用の文法のみで書き上げることが望ましいですが、さすがにfor eachぐらいは使わないと辛いのでどうしてもこのへんはRubyになります。ただそれぞれ関数化など包括する仕組みがあるので実際問題それほど煩わしい作業になることはありません。

結論でいうとDSLという面で言えばPuppetでもChefでも同じですよって話でした。

ミドルウェア


PuppetはPupept以外のミドルウェアが必要なくUnicornを使ったりもできますね。
それと比べてChefはメッセージキューやDBが必要になります。

特にDBはCouchDBでそんなもの運用したことないよって思いましたがネット上にゴロゴロと情報があったので運用面では問題になりそうではありませんでした。

インストール自体はyumやGemを利用すればよいので導入コストも殆ど同じでしょう。

Attributes


アトリビュート?で僕はChefを選びました。おそらくChefで一番ウリにしている部分だと思っています。
AttributesはOhaiを使ってクライアンの情報をサーバ側に伝え、サーバ側はそれを記録したものがAttributesです。
Attributesで取得できる情報はディスクのマッピング先、メモリサイズ、インストールされている言語、Uptime、OSの種類、ファイルシステム、ネットワーク、ハイパーバイザーの種類などもっと多くあり追加することも可能です。
これらの情報を動的に取得し、レシピ内ではnode[:os]やnode[:fqdn]と記述することで利用できます。

端的に申しますと、これらの情報はオンプレ環境やマルチクラウドなどに大いに役に立てる事ができます。
例えば、ネットワーク情報を元にG/Wを変更したりOS毎にレシピを分けることなくtemplateを簡単に切り分けることができるためサーバの環境の差を柔軟に吸収することができます。

バージョン管理


Chefは標準でバージョン管理の仕組みを持っています。
metadata.rbをversionを変えることでバージョンを指定できます。
このバージョンもAttributesと同様の使い方ができProduction環境では1.0の利用を強制してDevでは1.0以上のバージョンが利用できるなどオンラインでレシピを変更しても誤ってProductionに影響を与える事がありません。
このバージョン管理はロール単位で行え、バージョンの指定はクライアンごとに行えます。

databags


databagsはJSON形式であらゆるデータを保存し暗号化することができる機能です。
databagsにユーザIDやPasswordを一元管理し保存しレシピから利用できるためレシピ内にPasswordを記述し漏洩するリスクを軽減したり、変更するコストを下げることができます。


# Load the keys of the items in the 'admins' data bag
admins = data_bag('admins')

admins.each do |login|
# This causes a round-trip to the server for each admin in the data bag
admin = data_bag_item('admins', login)
home = "/home/#{login}"

# for each admin in the data bag, make a user resource
# to ensure they exist
user(login) do
uid admin['uid']
gid admin['gid']
shell admin['shell']
comment admin['comment']

home home
supports :manage_home => true
end

end

# Create an "admins" group on the system
# You might use this group in the /etc/sudoers file
# to provide sudo access to the admins
group "admins" do
gid 999
members admins
end


Tags


AWSのタグと同等の機能を持っておりkey valueの形式で記述事ができレシピ内で利用できます。
Attributesでは取得できないMETA情報を持たせるこに利用することが多いです。

まとめ


様々なレンタルサーバーでサーバを構築したりすることが多いので今回はChefを選びました。
キーさえあれば様々な情報をJSONで取り出すことができるので監視の自動がなども容易に行えます。
ハードウェア情報やクライアン情報を元に構築する必要がない場合はPuppetで十分だと思います。

0 件のコメント:

コメントを投稿