Chef

提供: FreeBSD入門
移動: 案内検索
スポンサーリンク

Chef とは、インフラストラクチャの管理をコードによって行う、自動化するためのプラットフォームです。Chefは、FreeBSDだけでなく、UbuntuやCentOSなどLinuxやOS Xでも利用できるクロスプラットフォームのインフラストラクチャをコードで管理するためのツールです。レシピの書き方は、各OSで共通です。

読み方

Chef
しぇふ

概要

Chef は、レシピを Ruby で記述することができます。たくさんの同じノードをコードで管理できます。 以下にレシピの例を示します。

package "git" do
	action :install
end

OSによって、パッケージ管理システムが異なり、インストールコマンドも異なります。FreeBSDならpkgコマンド、CentOSならyum、ubuntuならaptなど、各OSごとに方言があります。Chefのレシピでは、上記のようにpackageリソースという形で抽象化し、OSごとの方言(コマンド違い)を吸収してくれます。そのため、同じレシピを OSをまたいで利用できます。

Chef入門

Chefの動作イメージ

Chefには、以下の2種類の動作形態があります。

  • Chef Server/Chef Client(chef-client)
  • Chef Solo

Chef Server / Chef Client は、クライアント・サーバモデルです。 Chef Solo は、スタンドアロンのモデルです。

Chef Server / Chef Client

クライアント・サーバモデルでは、 Chef Server は、構成情報の管理を行い、Web UI, Chef Server API を提供します。 Chefの設定対象の各ノードでは、chef-client が動作します。chef-clientは、Chef Server に問い合わせを行い、インストールなどの作業を実行します。chef-clientは、ユーザがコマンドで起動する方法と cron などで自動で実行することができます。クックブックの登録は、knifeコマンドを通じで行います。

Chef Solo

Chef Solo は、スタンドアロンで動作するため、Chef Server が不要です。小規模な環境で利用します。

Chefがサポートする環境

Chef Clientは、様々な環境で動作します。

  • FreeBSD
  • Ubuntu
  • Red Hat
  • OS X
  • etc ...

Chef の特徴

  • 設定を Ruby で記述します。
  • 記述した順番に処理が実行されます。

Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully

chef-solo を起動すると、即効で瞬殺されました。

% chef-solo -o test
[2013-12-07T18:31:57+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef
run process exited unsuccessfully (exit code 1)

意味がこれだとわからないため、デバッグモードでchef-soloを起動しました。

% chef-solo -o test -l debug
[2013-12-07T18:33:21+09:00] INFO: Forking chef instance to converge...
[2013-12-07T18:33:21+09:00] DEBUG: Fork successful. Waiting for new chef pid: 38689
[2013-12-07T18:33:21+09:00] DEBUG: Forked instance now converging
[2013-12-07T18:33:21+09:00] DEBUG: Creating directory /var/chef
[2013-12-07T18:33:21+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef
run process exited unsuccessfully (exit code 1)

/var/chef に一般ユーザー権限で書き込もうとして、朽ち果てています。 /var/chef/cache/ にキャッシュファイルが作りたかったようです。 sudoをつけて実行すれば、書き込めます。

% sudo chef-solo -o test -l debug

git

git clone git://github.com/opscode/chef-repo.git
% cd ./chef-repo/
% rake new_cookbook COOKBOOK=test
***WARN: rake new_cookbook is deprecated.
Please use 'knife cookbook create COOKBOOK' command.***
** Creating cookbook test
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/attributes
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/recipes
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/definitions
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/libraries
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/resources
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/providers
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/files/default
mkdir -p /home/usre/chef/test/chef-repo/cookbooks/test/templates/default
** Creating README for cookbook: test
** Creating metadata for cookbook: test

エラー

下記のエラーがでた場合は、 /etc/chef/solo.rb に ssl_verify_mode :verify_peer を書き足します。

[2015-05-29T23:52:43+09:00] WARN:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SSL validation of HTTPS requests is disabled. HTTPS connections are still
encrypted, but chef is not able to detect forged replies or man in the middle
attacks.
 
To fix this issue add an entry like this to your configuration file:
 
```
  # Verify all HTTPS connections (recommended)
  ssl_verify_mode :verify_peer
 
  # OR, Verify only connections to chef-server
  verify_api_cert true
```
 
To check your SSL configuration, or troubleshoot errors, you can use the
`knife ssl check` command like so:
 
```
  knife ssl check -c /etc/chef/solo.rb
```
 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
Starting Chef Client, version 11.14.6
Compiling Cookbooks...
Converging 0 resources
 
Running handlers:
Running handlers complete
Chef Client finished, 0/0 resources updated in 3.947692374 seconds

関連項目




スポンサーリンク