fbpx

[和訳] Chef Metal 0.2 リリース #opschef_ja #getchef_ja

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本項は Chef Metal 0.2 Release (2014/3/4) の和訳です。

Chef Metal 0.2をご紹介します。Chef Metal は、Recipeでマシンを管理するChefと同じようにあなたのクラスターを管理するためのフレームワークです。
Chefのパワーを組み合わせてChef Metal の machine Resource を用いることで、簡単なクラスターから複雑なクラスターまですべてを共通のツールセットで記述、バージョニング、デプロイ、そして管理できるようになります。

Chef Metal をインストールするには gem install chef-metal と実行してください。 開発に参加したければ、こちらを確認してください。現時点でサポートしているプロバイダはLXCコンテナ、EC2、DigitalOcean、そしてVagrantです。
とにかく早く試してみたいなら、README内のQuick Start をご覧ください。

現在はアルファリリースです。こちらのドキュメントには、我々の計画や具体的な例を記載しています。何か問題があれば、こちらに報告してください。

想像してください

インフラをプロビジョニング、ブートストラッピングする際に、多数の神秘的な操作が含まれた使い切りのコマンドを正しい順番で覚えておく必要がないという状況を想像してください。

その代わり、次のようなディレクティブで多数のサーバを記述できるRecipeを書くという状況を想像してください。


machine 'server_of_doom' do
recipe 'apache2'
recipe 'my_server'
end

そして、次の行を加えてRecipeを実行することで、ec2にデプロイします。


with_fog_ec2_provisioner

これでec2にクラスタができました。異なるプロビジョナを用いることで、クラスタはさまざまなVM上に迅速に作成できます。

全部Chef

最重要点: Chef MetalはChefなので、Chefの恩恵と柔軟さのすべてを受けることができます。

収束性がある

Chef MetalはChefの一部なので収束性を持ちます。何か失敗があれば、再度実行すればよいのです。
もし新しいRecipeをクラスターの至るところで実行したり、新しいマシンを準備したりする必要がでてきたら、単にChef MetalのRecipeを変更して再度実行すればよいのです。
そうすると変更点だけが適用されるし、新しいマシンが準備されるのです。

コードである

Chefのアドバンテージの1つはRubyであることです。設定したい順番に記述できるし、さらにループを使うこともできます。こちらをご覧ください。


1.upto(10) do |i|
machine "hadoop#{i}" do
recipe "hadoop"
end
end

Chef Metalはオーケストレーションのシナリオを簡単化してくれます。
次のように、お互いが既に存在していなければ動作しない2つのサーバを定義する例を見てください。


# 「theserver」Recipeは2つのマシンで定義するまで動作しないので、
# まず1つ目のマシンはそのRecipeなしで定義します。
machine 'server_a' do
recipe 'base_recipes'
end

# 2つ目のマシンで'theserver'Recipeを定義します。
machine 'server_b' do
recipe 'base_recipes'
recipe 'theserver'
end

# これで1つ目のマシンに'theserver'Recipeを定義したら動作するようになるでしょう。
machine 'server_a' do
recipe 'theserver'
end

もちろん、クライアント・サーバの関係も簡単化してくれます。

強力である

デプロイメントという処理はマシンを設定するだけではありません。
あるマシンから他のマシンへ何かをコピーしたり、データベースからあるキーを得たりすることもあるかもしれません。
ブートストラッピング前に remote_file Resource を用いて必要なものを容易にダウンロードできたら素晴しいとは思いませんか?
Chef MetalはChefですから、クラスタを作成するために必要なResourceのすべてを扱うことができます。


remote_file 'mytarball.tgz' do
url 'https://myserver.com/mytarball.tgz'
end

# マシンを生成します。
machine 'x'

# tarballをアップロードします。
machine_file '/tmp/mytarball.tgz' do
machine 'x'
path 'mytarball.tgz'
action :upload
end

# マシンを動かしてみましょう。
machine 'x' do
recipe 'untarthatthing'
end

Cron可能である

これらのRecipeをとにかく実行するのなら、クラスタ内のあるマシンからChef Metalクラスタの定義を継続的に実行しようとは思いませんか?
クラスタを変更したいとき、Chef Metal Recipeをアップロードしてマシンで実行すれば、変更されます。
マシンがオフラインになったら自己修復するようにしてみましょう(これがべき等性です)!
CPUがとても高温になったとモニタが検知した際、サーバの数を増やすというオートスケーリングを考えてみましょう。


# ご注意:これはデモ用のひどいオートスケーリングのアルゴリズムなので、
# 実際に実行したいなら、もっと良いアルゴリズムでやりましょう。

# クラスター内のCPUが安定するという状況になるまで、クライアントの数を増やします。
average_cpu = get_average_cpu("tags:client")
if average_cpu > 0.9
num_clients++
end

# クライアントを宣言します。
1.upto(num_clients) do |i|
machine "client#{i}" do
recipe 'myclient'
tag 'client'
end
end

お問い合わせ

詳しくはhttps://github.com/opscode/chef-metalを参照してください。
chef-metalの開発に興味があれば、jkeiser@opscode.com まで連絡してください。

新規CTA