knife-zeroの導入と簡単な使い方


knife-zeroのインストールと簡単な使い方。
AWSのEC2内のインスタンスが前提。

chefDKインストール

chefの構成要素を一通り含まれているchefDKをインストール。
chefDKをインストールすればchef-zeroを使用することが可能。
chefDKを公開しているサイトからrpmを取得してインストール。

wget https://packages.chef.io/stable/el/6/chefdk-0.12.0-1.el6.x86_64.rpm
rpm -Uvh chefdk-0.12.0-1.el6.x86_64.rpm

knife-zeroインストール

kinfe-zeroはchefDKに含まれていないのでchefコマンドでインストール。

chef gem install knife-zero --no-document

リポジトリ作成

リポジトリを作成したいディレクトリでコマンドを実行。

chef generate repo chef-repo

kinfe-zeroを使用するための設定

ローカルモードを有効とする設定ファイルを作成。

cd chef-repo
mkdir .chef
echo 'local_mode true' > .chef/knife.rb

リモートサーバに対してbootstrap実行

リモートサーバをノードに追加。
追加されたノードをnode listコマンドで確認可能。

knife zero bootstrap infra -x ec2-user --hint ec2 --sudo
knife node list

bootstrapが完了するとnodeディレクトリ以下にjsonファイルが生成される。
ノード追加時に-Nオプションをつけるとノード名を指定することが可能。

クックブックの作成

サーバを構築するためのクックブックを作成。

knife cookbook create {クックブック名}

完了するとcookbook以下にクックブック名のディレクトリが作成される。

レシピの作成

例としてnginxインストールのレシピを作成。
cookbook/recipes/default.rbのファイルを次のように修正する。

default.rb
package 'nginx' do
    action :install
end

ノードにクックブックを登録

レシピを実行するためにノードにクックブックを登録する。

knife node run_list add {ノード名} {クックブック名}

レシピの実行

レシピを実行する。

knife zero converge '{ノード名}' --attribute ec2.local_ipv4 -x ec2-user --sudo -i {鍵のパス}

正常終了するとリモート先のサーバにnginxがインストールされる。