dshimizu/blog

アルファ版

さくらのVPSのCentOS 6.4環境でChef 11を使ってみる [Server / Workstation / Node構築]

はじめに

最近注目され始めているChefをようやく自分でも触り始めているところですが、一旦Chef Server/Clientの構築周りについて整理します。ここでは2台のマシンを用いて、1台のマシンにChefのServer環境とWorkstation環境を、もう1台のマシンにChefのNode環境を構築する手順をまとめています。NodeへのRecipeの実行する手順などは記載しません。

AWSなどのクラウドサービスや仮想化ソフトの機能の充実で、OS丸ごと(インスタンス)のコピーを作成することも容易となっているなかで、構築自動化やサーバ構成情報の管理にどれだけのメリットがあるのかは規模や環境によるのかもしれませんが、個人的にどんなものか興味があったので、いろいろ調べてみたり触ってみたりしています。 最初は慣れない用語がいろいろ出てきたり、ドキュメントの内容も多かったりと取っ付きにくかったので、自分の理解を整理する意味も込めてメモ程度に記載しています。

chefとは

ChefはRubyで記述されたシステム構成管理/構築自動化ツールです。Opscode社によって開発されていますが、オープンソースとして公開されています。

実際にどういうことができるか極簡単に記載すると、サーバ等の各種設定ファイルをChefサーバへ保存しておき(サーバ設定ファイルの一元管理)、その設定ファイルをサーバに配布して反映させる(環境構築/デプロイ自動化)ことができます。参照する手順書の誤り、手動で構築することでの設定漏れやミスといった問題も解消が望める、というのはよく言われています。

なお、類似のツールとしては、代表的なものはOSSのPappetがあり、よく比較対象となっていますが、Pappetを使ったことがないのでどういう違いがあるのかはよくわかりません。

Chefの種類

最近ではChefというとオープンソース版のものを指すことが多いように思いますが、Opscode社によりサービスも提供されています。

オープンソース

自分でChefの環境を構築して使用するタイプ。Server/Client構成のタイプと、Chef Soloという小機能ですが単体で利用できるタイプがあります。

ホスティングサービス

Opscode社が提供しているChefのホスティングサービス。 5ノードまで無料で使えるようです。

商用ライセンス

Opscode社が提供しているChefの商用製品。 国内ではクリエーションライン社が商用ライセンス販売、保守サポート、コンサルティングなどを行っているようです。

Chef 11の構成要素とツール群

Chefの構成やツールはたくさんあるためややこしく、自分の理解も完璧ではないと思いますがとりあえず分かっている内容を記載しておきます。

各構成要素/役割

基本的にはChef-ServerとChef-Clientによるサーバ/クライアント構成となります。

  • chef-server
  • 各設定ファイルを集約して管理する環境。通常1台のみです。
    Node等のデータの保存にはCouchDBが用いられていましたが、Chefのバージョン11からPostgreSQLに変更されたようです。検索エンジンにはSolrが利用されます。Chef Serverから受け取ったデータをPostgreSQLへ渡す際にはRabbitMQが利用されます。フロントはNignxです。
    各ClientとはJSON/RESTスタイルで通信されます。

  • chef-client
  • Chef Serverに接続して情報をやりとりするツールやホスト。

    • Node(chef-client)
    • Chefで管理するホスト。

    • workstation
    • Chef ServerやClient(Node)に対して指示を出す環境。knifeコマンドを利用されます。

ツール
Chefで利用されるツールも多々あります。
  • knife
  • Chefを管理するコマンドラインツール。NodeではないClientのひとつであり、Workstation環境で実行される。

    • knife-solo
    • knifeのプラグイン。chef-soloと組み合わせて使われます。他サーバへrecipeを配布し、chef-soloを実行して設定を反映させることができます。

  • ohai
  • 各Client(node)のシステム構成情報を取得するためのツール。出力はjson形式。

  • chef-solo
  • 上述の通り、サーバ無しでレシピを実行するツール。

Chef 11環境(Server/Workstation/Node)の構築

さくらのVPSのCentOS6.4環境へChef 11環境を構築しました。Chef 11ではRHEL系のRPMパッケージが公開されていますので、これを使うことで特に問題なくインストールできました。
なお、本環境ではサーバは2台で構成し、1台のサーバへChef Server、Workstationを構築し、もう1台のサーバへNodeの環境を構築します。

以下に構築時の手順を記載致します。

環境
Chef Server, Client(Workstation)環境
プラットフォーム さくらのVPS(1G SSDモデル)
OS CentOS 6.4 x86_64 (64bit)
ホスト名 hoge01(.sakura.ne.jp) (仮称)
Node環境
プラットフォーム さくらのVPS(512モデル)
OS CentOS 6.4 x86_64 (64bit)
ホスト名 hoge02(.sakura.ne.jp) (仮称)
Cher Serverの構築

以下の公式手順を参考に、Chef Server Ver.11のパッケージをインストールし、初期構築を行います。
ここでChef Serverとなる環境はhoge01.sakura.ne.jpとします。

パッケージの取得

Chef Ver.11からはRHEL系OS用にRPMパッケージが公開されているため、以下のページからRPMパッケージを取得できます。

ここでは最新バージョンのChef-Server 11.0.8を取得します。


# wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.8-1.el6.x86_64.rpm
インストール

取得したパッケージをインストールします。


# rpm -ihv chef-server-11.0.8-1.el6.x86_64.rpm
warning: chef-server-11.0.8-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing... ########################################### [100%]
1:chef-server ########################################### [100%]
Thank you for installing Chef Server!

The next step in the install process is to run:

sudo chef-server-ctl reconfigure
Chef Serverの初期セットアップ

インストール時のメッセージにchef-server-ctl reconfigure(rootであればsudo不要)を実行する旨のメッセージが出ますので、コマンドを実行してChef-Serverの初期セットアップを行います。

NginxやPostgreSQLなど、Chef-Serverで利用されるアプリケーションも同時にインストールされるため、それらのデフォルトポート番号を使用しているプロセスがある場合、あらかじめ停止しておく必要があります。でなければ、初期セットアップを正常に行えなかったり、WEB管理画面が参照できないなどの事象が発生します。


# chef-server-ctl reconfigure
Starting Chef Client, version 11.4.0
Compiling Cookbooks...
Recipe: chef-server::default


Chef Client finished, 91 resources updated
chef-server Reconfigured!
API動作テスト

確認のため、APIのテストを実行してみます。


# chef-server-ctl test
Configuring logging...
Creating platform...
Starting Pedant Run: 2013-04-25 00:32:40 UTC
setting up rspec config for #
Configuring RSpec for Open-Source Tests
_______ _______ _______ _______ _______ ______ _______
| || || || || || | | |
| _ || _ || _____|| || _ || _ || ___|
| | | || |_| || |_____ | || | | || | | || |___
| |_| || ___||_____ || _|| |_| || |_| || ___|
| || | _____| || |_ | || || |___
|_______||___| |_______||_______||_______||______| |_______|

_______ _______ ______ _______ __ _ _______
| || || | | _ || | | || |
| _ || ___|| _ || |_| || |_| ||_ _|
| |_| || |___ | | | || || | | |
| ___|| ___|| |_| || || _ | | |
| | | |___ | || _ || | | | | |
|___| |_______||______| |__| |__||_| |__| |___|

"Accuracy Over Tact"

=== Testing Environment ===
Config File: /var/opt/chef-server/chef-pedant/etc/pedant_config.rb
HTTP Traffic Log File: /var/log/chef-server/chef-pedant/http-traffic.log

Running tests from the following directories:

・・・
・・・

Deleting client pedant_admin_client ...
Deleting client pedant_client ...
Pedant did not create the user admin, and will not delete it
Deleting user pedant_non_admin_user ...
Deleting user knifey ...

Finished in 39.37 seconds
70 examples, 0 failures
※プロセスの確認

# ps auxfwww
root 28688 0.0 0.0 4088 376 ? Ss 02:43 0:00 runsvdir -P /opt/chef-server/service log: ...........................................................................................................................................................................................................................................................................................................................................................................................................
root 28701 0.0 0.0 3936 320 ? Ss 02:43 0:00 \_ runsv rabbitmq
root 28702 0.0 0.0 4080 416 ? S 02:43 0:00 | \_ svlogd -tt /var/log/chef-server/rabbitmq
497 28339 9.2 12.5 1197868 128044 ? Ssl 09:58 14:27 | \_ /opt/chef-server/embedded/lib/erlang/erts-5.9.2/bin/beam.smp -W w -K true -A30 -P 1048576 -- -root /opt/chef-server/embedded/lib/erlang -progname erl -- -home /var/opt/chef-server/rabbitmq -- -noshell -noinput -sname rabbit@localhost -boot /var/opt/chef-server/rabbitmq/db/rabbit@localhost-plugins-expand/rabbit -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"127.0.0.1",5672}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/opt/chef-server/rabbitmq/log/rabbit@localhost.log"} -rabbit sasl_error_logger {file,"/var/opt/chef-server/rabbitmq/log/rabbit@localhost-sasl.log"} -os_mon start_cpu_sup true -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/opt/chef-server/rabbitmq/db/rabbit@localhost"
497 28446 0.0 0.0 4052 408 ? Ss 09:58 0:00 | \_ /opt/chef-server/embedded/lib/erlang/lib/os_mon-2.2.10/priv/bin/cpu_sup
497 28447 0.0 0.0 10796 512 ? Ss 09:58 0:00 | \_ inet_gethost 4
497 28448 0.0 0.0 12900 648 ? S 09:58 0:00 | \_ inet_gethost 4
root 29016 0.0 0.0 3936 320 ? Ss 02:43 0:00 \_ runsv postgresql
root 29017 0.0 0.0 4080 416 ? S 02:43 0:00 | \_ svlogd -tt /var/log/chef-server/postgresql
496 28328 0.0 2.2 305688 22480 ? Ss 09:58 0:00 | \_ /opt/chef-server/embedded/bin/postgres -D /var/opt/chef-server/postgresql/data
496 28330 0.0 0.1 305824 1332 ? Ss 09:58 0:00 | \_ postgres: checkpointer process
496 28331 0.0 0.2 305824 2920 ? Ss 09:58 0:00 | \_ postgres: writer process
496 28332 0.0 0.1 305824 1232 ? Ss 09:58 0:00 | \_ postgres: wal writer process
496 28333 0.0 0.2 306688 2456 ? Ss 09:58 0:00 | \_ postgres: autovacuum launcher process
496 28334 0.0 0.1 26420 1176 ? Ss 09:58 0:00 | \_ postgres: stats collector process
496 28373 0.0 0.7 309040 7280 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(49384) idle
496 28374 0.0 0.6 309064 6916 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(42658) idle
496 28375 0.0 0.6 309064 6884 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35318) idle
496 28376 0.0 0.6 309064 6888 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(51364) idle
496 28377 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(42970) idle
496 28378 0.0 0.6 309156 6888 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(36269) idle
496 28379 0.0 0.6 309156 6884 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(49813) idle
496 28380 0.0 0.6 309156 6876 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(52888) idle
496 28381 0.0 0.6 309156 6876 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(51499) idle
496 28382 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(58353) idle
496 28383 0.0 0.6 309156 6872 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(46938) idle
496 28385 0.0 0.6 309156 6884 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(42873) idle
496 28386 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35625) idle
496 28388 0.0 0.6 309156 6892 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(52568) idle
496 28389 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35742) idle
496 28390 0.0 0.6 309156 6880 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35117) idle
496 28391 0.0 0.6 309156 6880 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(34362) idle
496 28394 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(40086) idle
496 28422 0.0 0.6 309156 6868 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(48803) idle
496 28438 0.0 0.6 309156 6872 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(53051) idle
root 29105 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv chef-solr
root 29106 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/chef-solr
497 28273 0.0 7.1 1506812 72776 ? Ssl 09:58 0:08 | \_ java -Xmx249M -Xms249M -XX:NewSize=24M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dsolr.data.dir=/var/opt/chef-server/chef-solr/data -Dsolr.solr.home=/var/opt/chef-server/chef-solr/home -server -jar /var/opt/chef-server/chef-solr/jetty/start.jar
root 29157 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv chef-expander
root 29158 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/chef-expander
497 28239 0.0 2.6 176556 27416 ? Ssl 09:58 0:01 | \_ ruby /opt/chef-server/embedded/service/chef-expander/bin/chef-expander -n 2 -c /var/opt/chef-server/chef-expander/etc/expander.rb
497 28255 1.5 2.8 180668 28864 ? Sl 09:58 2:24 | \_ chef-expander worker #1 (vnodes 0-511)
497 28257 1.5 2.5 177864 26060 ? Sl 09:58 2:25 | \_ chef-expander worker #2 (vnodes 512-1023)
root 29184 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv bookshelf
root 29185 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/bookshelf
497 28218 0.0 4.4 255352 45208 ? Ssl 09:58 0:06 | \_ /opt/chef-server/embedded/service/bookshelf/erts-5.9.2/bin/beam.smp -- -root /opt/chef-server/embedded/service/bookshelf -progname bookshelf -- -home /var/opt/chef-server/bookshelf -- -noshell -boot /opt/chef-server/embedded/service/bookshelf/releases/0.2.1/bookshelf -embedded -config /opt/chef-server/embedded/service/bookshelf/etc/app.config -name bookshelf@127.0.0.1 -setcookie bookshelf -- runit
root 29242 0.0 0.0 3936 308 ? Ss 02:44 0:00 \_ runsv erchef
root 29243 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/erchef
497 28288 1.4 3.2 588004 33624 ? Ssl 09:58 2:13 | \_ /opt/chef-server/embedded/service/erchef/erts-5.9.2/bin/beam.smp -K true -A 5 -- -root /opt/chef-server/embedded/service/erchef -progname erchef -- -home /var/opt/chef-server/erchef -- -noshell -boot /opt/chef-server/embedded/service/erchef/releases/1.2.6/erchef -embedded -config /opt/chef-server/embedded/service/erchef/etc/app.config -name erchef@127.0.0.1 -setcookie erchef -smp enable -- runit
497 28371 0.0 0.0 10796 520 ? Ss 09:58 0:00 | \_ inet_gethost 4
497 28372 0.0 0.0 10796 436 ? S 09:58 0:00 | \_ inet_gethost 4
root 29359 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv chef-server-webui
root 29360 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/chef-server-webui
497 28243 0.0 2.1 87028 21608 ? Ssl 09:58 0:01 | \_ unicorn master -E chefserver -c /var/opt/chef-server/chef-server-webui/etc/unicorn.rb /opt/chef-server/embedded/service/chef-server-webui/config.ru
497 28267 0.0 5.3 144572 54136 ? Sl 09:58 0:04 | \_ unicorn worker[0] -E chefserver -c /var/opt/chef-server/chef-server-webui/etc/unicorn.rb /opt/chef-server/embedded/service/chef-server-webui/config.ru
497 28269 0.0 5.3 144608 54264 ? Sl 09:58 0:04 | \_ unicorn worker[1] -E chefserver -c /var/opt/chef-server/chef-server-webui/etc/unicorn.rb /opt/chef-server/embedded/service/chef-server-webui/config.ru
root 29538 0.0 0.0 3936 348 ? Ss 02:44 0:00 \_ runsv nginx
root 29539 0.0 0.0 4080 368 ? S 02:44 0:00 \_ svlogd -tt /var/log/chef-server/nginx
root 28318 0.0 0.3 78020 3456 ? Ss 09:58 0:00 \_ nginx: master process /opt/chef-server/embedded/sbin/nginx -c /var/opt/chef-server/nginx/etc/nginx.conf
497 28320 0.0 0.5 82032 5320 ? S 09:58 0:00 \_ nginx: worker process
497 28321 0.0 0.5 82032 5320 ? S 09:58 0:00 \_ nginx: worker process
497 28322 0.0 0.1 78192 1544 ? S 09:58 0:00 \_ nginx: cache manager process
497 28718 0.0 0.0 10828 420 ? S 02:43 0:00 /opt/chef-server/embedded/lib/erlang/erts-5.9.2/bin/epmd -daemon
WEB管理画面

初期セットアップが完了した段階で、WEB管理画面が参照できます。さくらのVPSは普通に外部からアクセス可能な環境ですが、管理画面のログインユーザID/パスワードのデフォルトは画面左に表示されているため、ログイン後に速やかに変更します。

adminユーザパスワード変更

初期ログイン後、パスワード変更画面が表示されますので、新規パスワードを入力して保存します。この際、秘密鍵を再度生成(Regenerate Private Key にチェック)します。

次の画面で秘密鍵(Private Key)の内容が表示されますので、コピーして、/etc/chef-server/admin.pemをその内容に変更します。

念のため、ログアウト前に別のブラウザを立ち上げるなどして新しいパスワードでログインを確認します。ログインできれば完了です。

Workstationの構築

公式手順を参考に、Chef Serverを操作するためのClietn環境(Workstation)を構築します。
ここでWorkstationとなる環境はChef Serverと同じhoge01.sakura.ne.jpとします。

Chefクライアントインストールスクリプト/パッケージの取得

以下のページからインストールスクリプト、あるいはRPMパッケージを取得できます。

Chefクライアントのインストール

インストールスクリプトを実行します。


# curl -L https://www.opscode.com/chef/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
101 6471 101 6471 0 0 6595 0 --:--:-- --:--:-- --:--:-- 36767
Downloading Chef for el...
Installing Chef
warning: /tmp/tmp.DG3OQCP9/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing... ########################################### [100%]
1:chef ########################################### [100%]
Thank you for installing Chef!
証明書ファイルのコピー

Chef-Serverへアクセスするための秘密鍵(/etc/chef-server/admin.pem)をクライアントにコピー(ここでは同一ホストの/etc/chef/admin.pem)します。


# cp -p /etc/chef-server/admin.pem /etc/chef/admin.pem

新規Chef Client(Workstaion/Node)をChef Serverへ登録する際に必要な、Chef Server上のchef-validator.pem(/etc/chef-server/chef-validator.pem)という鍵ファイルをChef Client環境にコピー(ここでは同一ホストの/etc/chef/validator.pem)します。


# cp -p /etc/chef-server/chef-validator.pem /etc/chef/validation.pem

※chef-validatorは、Chef Serverへ新しいChef Client(Node/Workstation)を登録するための特別な専用クライアントです。
Chef ClientによるAPI実行時、Chef ServerはChef Client(Node/Workstation)の秘密鍵をチェックしますが、NodeやWorkstationが初めてchef-clientを実行しようとする際には認証できずChef ServerのAPIを実行できません。 秘密鍵が存在しない場合、そのChef Client(Node/Workstation)をChef Serverへ登録するためにchef-validatorのChef Clientの証明書を一時的に利用します。

Chefの新規ユーザ作成

knifeコマンドで、Chef Serverにオペレーションするためのユーザを作成します。ここで作成するユーザは、主にWorkstationからChef-Serverに対してknifeコマンドによるAPIを実行するためのユーザです。ファイル名や作成先ディレクトリはデフォルトのままで問題ありません。ServerのURL項目の修正とパスワードは入力します。


# knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb]
Please enter the chef server URL: http://hoge01.sakura.ne.jp:4000 https://hoge01.sakura.ne.jp # <-httpsへ変更
Please enter a name for the new user: [hogehoge]
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:
Created user[hogehoge]
Configuration file written to /root/.chef/knife.rb

rootのホームディレクトリ以下に作成したユーザの秘密鍵(/root/.chef/hogehoge.pem)が作成されます。今後はこの秘密鍵でChef Serverに認証することができます。


# ls /root/.chef/
hogehoge.pem knife.rb
登録した設定内容はknife.rbファイルで確認、修正できます。

# cat /root/.chef/knife.rb
log_level :info
log_location STDOUT
node_name 'hogehoge'
client_key '/root/.chef/hogehoge.pem'
validation_client_name 'chef-validator'
validation_key '/etc/chef/validation.pem'
chef_server_url 'https://hoge01.sakura.ne.jp'
syntax_check_cache_path '/root/.chef/syntax_check_cache'

作成したユーザでWEB管理画面へログインできるか確認し、ログインできれば問題ありません。

※登録ユーザ一覧の確認

# knife user list
admin
hogehoge
これでWorkstationの初期構築は完了です。
Nodeの構築

Chef Serverから設定ファイルを取得して構成を反映させるためのClietn環境(Node)を構築します。
Nodeとなるサーバはhoge02.sakura.ne.jpとなります。

Chef Serverでの事前作業

Chef Server(hoge01.sakura.ne.jp)上で以下のとおりknifeコマンドを実行して、Nodeを登録するために必要な設定ファイル(client.rb)と鍵ファイル(validation.pem)を生成します。
ファイルの生成先は任意で指定でき、ここでは/tmpとしています。


# knife configure client /tmp
Creating client configuration
Writing client.rb
Writing validation.pem

Nodeの登録

もう1台のサーバ(hoge02.sakura.ne.jp)をNodeとしてChef Serverへ登録するに当たって、hoge02.sakura.ne.jpへChef Clientのパッケージをインストールします。


# curl -L https://www.opscode.com/chef/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6510 100 6510 0 0 8146 0 --:--:-- --:--:-- --:--:-- 42272
Downloading Chef for el...
Installing Chef
warning: /tmp/tmp.RzL9HsIq/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing... ########################################### [100%]
1:chef ########################################### [100%]
Thank you for installing Chef!

Chef Server(hoge01.sakura.ne.jp)上で作成した設定ファイル(client.rb)と鍵ファイル(validation.pem)を、Nodeとなるサーバ(hoge02.sakura.ne.jp)の/etc/chef以下にscpやコピペするなどして設置します。


# mkdir /etc/chef

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

hoge02.sakura.ne.jp上でchef-clientコマンドを実行して、Chef Server(hoge01.sakura.ne.jp)へNodeとして登録します。


# chef-client
Starting Chef Client, version 11.4.4
[2013-05-13T23:01:12+09:00] INFO: *** Chef 11.4.4 ***
[2013-05-13T23:01:12+09:00] INFO: [inet6] no default interface, picking the first ipaddress
Creating a new client identity for hoge02.sakura.ne.jp using the validator key.
[2013-05-13T23:01:13+09:00] INFO: Client key /etc/chef/client.pem is not present - registering
[2013-05-13T23:01:16+09:00] INFO: Run List is []
[2013-05-13T23:01:16+09:00] INFO: Run List expands to []
[2013-05-13T23:01:17+09:00] INFO: Starting Chef Run for hoge02.sakura.ne.jp
[2013-05-13T23:01:17+09:00] INFO: Running start handlers
[2013-05-13T23:01:17+09:00] INFO: Start handlers complete.
resolving cookbooks for run list: []
[2013-05-13T23:01:17+09:00] INFO: Loading cookbooks []
Synchronizing Cookbooks:
Compiling Cookbooks...
[2013-05-13T23:01:17+09:00] WARN: Node hoge02.sakura.ne.jp has an empty run list.
Converging 0 resources
[2013-05-13T23:01:17+09:00] INFO: Chef Run complete in 0.311768246 seconds
[2013-05-13T23:01:17+09:00] INFO: Running report handlers
[2013-05-13T23:01:17+09:00] INFO: Report handlers complete
Chef Client finished, 0 resources updated

Workstationにて、登録されたNodeの確認

Workstation(hoge01.sakura.ne.jp)にてknife node listコマンドを実行することで、登録されているNodeを確認できます。


# knife node list
hoge02.sakura.ne.jp

管理画面上でも登録されているNodeを確認できます。

以上で、Nodeの初期構築は完了です。

おわりに

ここでは2台のさくらのVPSCentOS 6.4環境を利用して、Chef 11環境(Server/Workstation/Node)を構築してみました。
Chef 11では RHEL系のパッケージが準備されているため、インストール自体は比較的簡単にできると思います。とはいえサーバ2台程度の環境ならChef-Soloで十分かと思いますが・・・。
また、外部から自由にアクセス可能な環境なので、例えば管理画面など(ID/PASSが必要とは言え・・・)はセキュリティを考慮すると、別途iptablesなど何らかの設定を設けたほうが良いかも知れません。※Basic認証を設定するとChefのAPIも認証ではじかれてしまい、実行できなくなります。

環境が整ったので、次はCookbooksの作成、Recipeの実行などをやってみようと思ってます。