2013/04/26

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

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

0 Comments:

コメントを投稿