LoginSignup
3
4

More than 5 years have passed since last update.

Chef入門(No.01 : インストール)

Last updated at Posted at 2015-01-10

Chefの導入メモです。
Chefを始めたい人の最初の一歩にでもなって頂ければ幸いです。
chef-soloからchef-clientのローカルモードへの移行が囁かれていますが…

環境構成

今回の構築環境は以下の通りです。

Chef:12.0.3
ホストOS:Windows 7 Professional SP1(64bit)
仮想化環境:VirtualBox 4.3.20
ゲストOS(WorkStation:操作用):CentOS 6.5
ゲストOS(RemoteNode:構築対象):CentOS 6.5

環境準備

各ゲストOSで以下の設定を行います。

前準備
# Chef用ユーザの作成

# SSH鍵認証の設定(Chefでの接続(SSH)をパスワード認証ではなく鍵認証で行う)
$ sudo vi /etc/ssh/sshd_config
# 以下をアンコメント
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys

# 操作対象ユーザでのパスワード無しsudo実行権限を付与
$ sudo visudo
# 以下を追加
<username>       ALL=(ALL)       NOPASSWD: ALL

# knifeが通信するSSH(22番ポート)でのアクセスを許可する
# iptablesの設定等の確認

操作側Chefインストール

操作する側のサーバにChefをインストールする。

Chefインストール
# Chefインストール
$ curl -L http://www.opscode.com/chef/install.sh | sudo bash
…
Thank you for installing Chef!
# Chefバージョン確認
$ chef-solo -v
Chef: 12.0.3
# rubyバージョン確認
$ /opt/chef/embedded/bin/ruby -v
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]
# gemバージョン確認
$ /opt/chef/embedded/bin/gem -v
2.4.1

# knife設定(任意で設定、デフォルト設定は空白)
$ knife configure
Where should I put the config file? [/home/infradmin/.chef/knife.rb] <空白>
Please enter the chef server URL: [https://hostname:443] <空白>
Please enter an existing username or clientname for the API: [username] <空白>
Please enter the validation clientname: [chef-validator] <空白>
Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] <空白>
Please enter the path to a chef repository (or leave blank): <空白>
…
Configuration file written to /home/infradmin/.chef/knife.rb

# knife-soloインストール
$ sudo /opt/chef/embedded/bin/gem install knife-solo --no-ri --no-rdoc
…
Successfully installed knife-solo-0.4.2
1 gem installed

Let's Cook!!

早速、料理(cook)しましょう。
ここでのcook対象は操作サーバです。

流れは
1. 台所(kitchen:またはレポジトリと呼ばれる料理本を置く場所)作成
2. 料理本(cookbook)作成
3. レシピ(recipe)編集
4. 料理(cook)!

全てknifeコマンドで実行する。

cook!!
# カレントディレクトリにレポジトリ(chef-repo)作成
$ knife solo init chef-repo

# ディレクトリ構成(.gitkeepは表示から外しています)
$ cd chef-repo
$ find . | grep -v .gitkeep
./cookbooks
./roles
./nodes
./site-cookbooks
./environments
./.gitignore
./.chef
./.chef/knife.rb
./data_bags

# 最初の料理本作成
# knife cookbook create <cookbook name> -o <directory>
# cookbooks : サードパーティ製cookbook置き場
# site-cookbooks : 自作cookbook置き場
# ※通常はdirectoryの指定にsite-cookbooksを指定する。
$ knife cookbook create hello -o site-cookbooks

# ディレクトリ構成(.gitkeepは表示から外しています)
$ find . | grep -v .gitkeep
./site-cookbooks
./site-cookbooks/hello
./site-cookbooks/hello/files
./site-cookbooks/hello/files/default
./site-cookbooks/hello/attributes
./site-cookbooks/hello/README.md
./site-cookbooks/hello/metadata.rb
./site-cookbooks/hello/recipes
./site-cookbooks/hello/recipes/default.rb
./site-cookbooks/hello/templates
./site-cookbooks/hello/templates/default
./site-cookbooks/hello/libraries
./site-cookbooks/hello/resources
./site-cookbooks/hello/CHANGELOG.md
./site-cookbooks/hello/providers
./site-cookbooks/hello/definitions

# デフォルトレシピを編集
$ vi site-cookbooks/hello/recipes/default.rb

#以下を入力
log "Hello, Chef!"

# Let's Cook!(まだ、空実行)
# knife solo cook [username@][servername | ip] -i <ssh secret key>
$ knife solo cook localhost -i ../id_rsa
Running Chef on localhost...
Checking Chef version...
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 12.0.3
Compiling Cookbooks...
Converging 0 resources

Running handlers:
Running handlers complete
Chef Client finished, 0/0 resources updated in 1.073342596 seconds

# レシピ適用ノード情報を編集
# ※対象ノードへのcookを一度でも実行するとノード情報ファイルが自動で作成される
$ vi nodes/localhost.json
# recipe~行を追加
{
  "run_list": [
    "recipe[hello]"
  ],
  "automatic": {
    "ipaddress": "localhost"
  }
}

# 再度料理する
$ knife solo cook localhost -i ../id_rsa
Running Chef on localhost...
Checking Chef version...
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 12.0.3
Compiling Cookbooks...
Converging 1 resources
Recipe: hello::default
  * log[Hello, Chef!] action write


Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 1.12555665 seconds

これで操作サーバのChefのセットアップは完了です。

構築対象へのChefインストール & Cook!!

次に構築対象のサーバにChefをインストール & Cookします。
操作は操作用サーバで実行します。

Chefインストール
# Chefインストール
# knife solo prepare [username@][servername | ip] -i <ssh secret key>
$ knife solo prepare remote_ip -i ../id_rsa
…
Thank you for installing Chef!
Generating node config 'nodes/remote_ip.json'...

# 空実行でCook
# knife solo cook [username@][servername | ip] -i <ssh secret key>
$ knife solo cook remote_ip -i ../id_rsa
…
Running handlers:
Running handlers complete
Chef Client finished, 0/0 resources updated in 2.349205415 seconds

# レシピ適用ノード情報を編集
# ※対象ノードへのcookを一度でも実行するとノード情報ファイルが自動で作成される
$ vi nodes/remote_ip.json
# recipe~行を追加
{
  "run_list": [
    "recipe[hello]"
  ],
  "automatic": {
    "ipaddress": "remote_ip"
  }
}

# 再度料理する
$ knife solo cook remote_ip -i ../id_rsa
Running Chef on remote_ip...
Checking Chef version...
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 12.0.3
Compiling Cookbooks...
Converging 1 resources
Recipe: hello::default
  * log[Hello, Chef!] action write

Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 0.898161507 seconds

これで構築対象のサーバへのChefインストール、Cookが出来ました。

基本的なインストールとCook操作については以上となります。
次の段階として
・Cookbookの追加、レシピの作成
・構築対象サーバの追加
を覚えていくことでレベルアップできると思います。

Let's Cook!!

参考:

◆ Chef Documents
http://docs.chef.io/
◆ chef-client
https://www.getchef.com/download-chef-client/
◆ knife solo
http://matschaffer.github.io/knife-solo/
◆ サーバー構築自動化ツール Chef 最新版のインストール方法
http://hivecolor.com/id/46

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4