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インストール
$ 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対象は操作サーバです。
流れは
- 台所(kitchen:またはレポジトリと呼ばれる料理本を置く場所)作成
- 料理本(cookbook)作成
- レシピ(recipe)編集
- 料理(cook)!
全てknifeコマンドで実行する。
# カレントディレクトリにレポジトリ(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インストール
# 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