サーバー構築自動化ツール Chef 最新版のインストール方法

サーバー構築自動化ツール Chef 最新版のインストール方法メモ。


maptail
画像はchef公式ページより引用


2013年2月頃にリリースされたバージョン11とそれ以前のバージョンとでは、インストール方法にかなりの違いがあるのでご注意ください。


以前のバージョンよりは簡単にインストールできるようになったみたいですが、それでもそれなりに面倒な手順が必要です…。



用語解説


独特の用語がかなり多く、知っていないと混乱するので、最初に用語を説明します。


chef

サーバー構築自動化ツール。同じ構成のサーバーを複数台用意するときに使う。設定ファイルを書き換えるだけで複数台のサーバーの構成を同時に変更することができる。


chef server

サーバー構成の設定ファイルを管理するもの。各chef clientからアクセスされるもの。


chef client

chef serverにアクセスするもの。chef clientの例として、管理ツールのknife、管理用のWeb UI、構成を管理されている各サーバー(にインストールされているchef client)、がある。


knife

chefに関する作業の大半を行うためのコマンド。代表的な使い方としては、client作成、user作成、設定ファイル作成、などがある。最初にknifeのための設定を行わないと使えない。


workstation

chef公式ドキュメントにはでてくるけど自分で作業するときには全く使わない用語。knifeの設定を終えていて、chefリポジトリと同期(synchronize)していて、単体のchef serverとして動くコンピューターのこと。


chef repository

cookbook、role等のデータが保存される場所。通常はworkstation上、つまりchef server上に保存される。


node

chefで構成を管理されているサーバー。各nodeにインストールされたchef clientが、chef serverから設定ファイルを取得し、自分自身(node)にその設定を適用する。


knife configure -i

knifeを使うための初期設定を行うためのコマンド。knife.rbを作成する。


knife configure client [tmp directory]

各client用の設定ファイルを作成するコマンド。指定したディレクトリに、client.rb、validation.pemを作成する。この2つのファイルを使って、各nodeの設定を行う。


cookbook

chefで行いたい設定の手順を記述したもの。環境に依存しないものを書く。環境に依存するものはroleやnodeのattributesに書く。


recipe

設定を記述したrubyスクリプト。1つのcookbookは複数のrecipeを持つことができる。


role

サーバーの役割を記述したもの。どのrecipeを使うのかを書く。各サーバーはrole経由でrecipeを持つが、roleを介さないでrecipeを持つこともできる。


attributes

設定したい値のこと。cookbook、recipeには環境依存の値を持たせず、環境依存の値は全てattributesに書いておく。attributesはrubyのhashそのもの。recipe自体やrecipe経由のtemplateから使われる。

attributesはrecipe、role、nodeに書ける。recipeに書いたattributesがそのrecipeのデフォルト値になって、それをroleやnodeのattributesで上書きする、という使い方。


templates

まだよく分かっていません。


参考リンク

Chefを最速で使いこなすためのいくつかのポイント

Chef公式ドキュメント(英語)



chef serverのインストールと初期設定


Red Hat Enterprise Linux6、x86_64構成でのrpmは下記の通りです。自分のサーバー構成に合ったrpmはchef公式パッケージダウンロードページから選んでください。


$ wget https://opscode-omnitruck-release.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.6-1.el6.x86_64.rpm
$ rpm -ivh chef-server-11.0.6-1.el6.x86_64.rpm
$ chef-server-ctl reconfigure

ここからはchef clientのコマンド類のインストールです。clientという名前ですがchef serverでも必要です。knifeコマンド等がインストールされます。


$ curl -L https://www.opscode.com/chef/install.sh | bash

ここからはknifeの初期設定です。knifeの初期設定を行うことで、client、user、nodeが追加できるようになります。


$ cp /etc/chef-server/admin.pem /etc/chef/
$ cp /etc/chef-server/chef-validator.pem /etc/chef/validation.pem

$ knife configure -i
Where should I put the config file? [/root/.chef/knife.rb]
Please enter the chef server URL: [http://ip-10-150-169-25.ap-northeast-1.compute.internal:4000] https://server.domain:443
Please enter a name for the new user: [root]
Please enter the existing admin name: [admin]
Please enter the location of the existing admin's private key: [/etc/chef/admin.pem]
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem]
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Please enter a password for the new user:

基本的にはEnterを押していくだけなんですが、server URLだけは正しい値を入力してください。httpsでポート番号は443な点に注意です。サンプル値は4000になってますが、4000なのは以前のバージョンです。


ここまで成功していると、下記のコマンドが使えるようになっています。下記のコマンドがエラーなく実行できていれば、chef serverのインストールは成功です。


$ knife user list
$ knife client list

参考リンク

chef server 11インストール手順

Chef公式ドキュメント(英語)



chef clientのインストールと初期設定


この手順は、chef serverを使うために必須ではありません。何らかの理由でchef clientを単体でインストールするとき用の手順です。


chef clientをインストールしたいサーバーで下記のコマンドを実行してください。


$ curl -L https://www.opscode.com/chef/install.sh | bash

clientに設置する秘密鍵を作成するために、chef serverをインストールしたサーバーで下記コマンドを実行してください。


$ knife client create [new client name]

# 標準出力に表示された秘密鍵は下記のファイル名で保存してください。
# 場所はどこでもOKです。
[new client name].pem

作成した[new client name].pem、chef server上の/etc/chef-server/admin.pem、/etc/chef-server/chef-validator.pemを、chef clientをインストールするサーバーに下記のパスで保存してください。


~/.chef/[new client name].pem
/etc/chef/admin.pem
/etc/chef/validation.pem # このファイルだけファイル名を変えます

chef clientをインストールするパソコンで下記のコマンドを実行してください。


chef serverにchef clientをインストールしたときと同じ内容ですが、~/.chef/[new client name].pemが自動的に読み込まれて、chef serverへchef clientを登録することになります。


$ knife configure -i
Where should I put the config file? [/root/.chef/knife.rb]
Please enter the chef server URL: [http://ip-10-150-169-25.ap-northeast-1.compute.internal:4000] https://server.domain:443
Please enter a name for the new user: [root]
Please enter the existing admin name: [admin]
Please enter the location of the existing admin's private key: [/etc/chef/admin.pem]
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem]
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Please enter a password for the new user:

chef clientのインストールを確認するために、chef client、chef serverで下記のコマンドを実行してください。


chef client上で実行するコマンド

# 下記のようなエラーがでれば成功です。追加したclientは管理権限のないclientなので、認証は成功するけど一覧の表示はできない、というエラーになります。
$ knife client list
ERROR: You authenticated successfully to https://server.domain:443 as [new client name] but you are not authorized for this action

chef server上で実行するコマンド

# chef server上ではエラーなく一覧が表示されます。一覧に含まれていればchef clientの追加成功です。
$ knife client list


chef serverが管理するnodeを追加する


nodeとして追加したいサーバーで下記のコマンドを実行してください。


$ curl -L https://www.opscode.com/chef/install.sh | bash

nodeに設置するclient.rbを作成するために、chef serverをインストールしたサーバーで下記コマンドを実行してください。


$ knife configure client [設定ファイルを一時的に保存するディレクトリ]

# 指定したディレクトリに下記ファイルが作成されます
client.rb
validation.pem

作成された2つのファイルを、nodeとして管理したいサーバーに下記のパスで設置してください。


/etc/chef/client.rb
/etc/chef/validation.pem

このnode上で、下記のコマンドを実行してください。エラーがでなければOKです。


$ chef-client

最後に、chef server上で、下記のコマンドを実行してください。追加したnodeが一覧に表示されれば、nodeの追加完了です。


$ knife node list

nodeの追加をする一番簡単な方法は本来下記のコマンドなのですが、EC2上のEnterprise LinuxではPrivate IPを使ってしまう問題で正しく追加できませんでした。


$ knife bootstrap [FQDN] -x [user name] -i [ログインに必要な秘密鍵] --sudo -N [node name]

参考リンク

Chef ServerにClient/Nodeを登録

[chef] clientとnodeの関係



cookbookの作成


疲れたのでまた今度。



まとめ


自前のサーバーを数十台以上持っているならchefを使うことで楽になるかもですが、EC2サーバーで同じ事をするなら、インスタンスのスナップショットをコピーしてサーバーを増やす方がはるかに簡単だと思いました…。


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール