2012年11月9日金曜日

Chef-Serverの設定

最近はPuppetよりもChefが流行りみたいなので「乗るしかない このビッグウェーブに」と思い色々検証を兼ねて入れてみましたメモです。
というより、Chef-Soroから入れている情報が多くてちょっと構成を把握しにくかったのでマニュアルインストールすることにしました。
でもgemで入れるだけで簡単に入るので特に作業はありませんが。

先に言ってしまったのですがChefはサーバ・クライアントモデルのChef-serverとChef-clientからなるモデルとServerなしでスタンドアロンで動作するChef-Soroがあります。

ちなみにこの章ではサーバ・クライアントの構築とWebUIが動くまでですのでレシピの管理とか運用系はまた後で書くのですぐにこのブラウザを閉じてください。

検証環境


OS:CentOS release 6.3
NIC:2
ネットワーク:eth0 10.0.2.0/24, eth1 192.168.56.0/24

Chef-Server環境



引用:Opscode

CouchDB (0.9.1-0.10+)
Java
Ruby
RabbitMQ
Rubygems
上記のミドルウェアはyumで入れます。

その前にEpelのリポジトリを追加しておきましょう。
#wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
#rpm -ivh epel-release-6-7.noarch.rpm


以下が必須パッケージです
#yum install couch*
#yum install java
#yum install ruby
#yum install ruby-devel
#yum install rabbitmq-server
#yum install gecode-devel
#yum install gecode

Rubyは1.9でも動くことを確認しましたが1.8.7で動かしました。
#wget http://rubyforge.org/frs/download.php/76073/rubygems-1.8.24.tgz
#tar -zxvf rubygems-1.8.24.tgz
#cd rubygems-1.8.24
#ruby setup.rb

これでChef-Serverを構築する環境が整いました。

ではGemから入れていきます。結構時間がかかります。
#gem install --no-rdoc --no-ri chef-server chef-server-api chef-server chef-solr chef-server-webui

インストールが問題なく終わったらミドルウェアの初期化しています。

RabbitMQ


# rabbitmqctl add_vhost /chef
Creating vhost "/chef" ...
...done.
# rabbitmqctl add_user chef testing
Creating user "chef" ...
...done.
# rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
Setting permissions for user "chef" in vhost "/chef" ...
...done.

CouchDB


かうちでぃーびぃーと読むみたいです。
初めて触りましたがMongoDBによく似ていてテーブルレスでNoSQLなDBです。
# /etc/init.d/couchdb start

Solr


# chef-solr-installer

Chef-Serverの設定


# mkdir /etc/chef/
# vi /etc/chef/server.rb

パスワードなどは適宜変更してください。
cookbook_pathはRecipeを配置するためのパスになります。
GithubからCloneしてきたりすることも想定されているので複数指定できます。
/etc/chef/server.rb
log_level          :info
log_location       STDOUT
ssl_verify_mode    :verify_none
chef_server_url    "http://localhost:4000"

signing_ca_path    "/var/chef/ca"
couchdb_database   'chef'

cookbook_path      [ "/var/chef/cookbooks", "/var/chef/site-cookbooks" ]

file_cache_path    "/var/chef/cache"
node_path          "/var/chef/nodes"
openid_store_path  "/var/chef/openid/store"
openid_cstore_path "/var/chef/openid/cstore"
search_index_path  "/var/chef/search_index"
role_path          "/var/chef/roles"

validation_client_name "chef-validator"
validation_key         "/etc/chef/validation.pem"
client_key             "/etc/chef/client.pem"
web_ui_client_name     "chef-webui"
web_ui_key             "/etc/chef/webui.pem"

web_ui_admin_user_name "admin"
web_ui_admin_default_password "1234567890"

supportdir = "/srv/chef/support"
solr_jetty_path File.join(supportdir, "solr", "jetty")
solr_data_path  File.join(supportdir, "solr", "data")
solr_home_path  File.join(supportdir, "solr", "home")
solr_heap_size  "256M"

umask 0022

Mixlib::Log::Formatter.show_time = false

ここまで準備できるともうChefが起動できるので起動してみましょう。
以下のコマンドで実行できますが、単体で動くか確認するためのnohupと&を省いて実行してみてください。
nohup chef-expander -n1 &
nohup chef-solr &
nohup chef-server -N -e production &
nohup chef-server-webui -p 4040 -e production &

証明書の設定


サーバとクライアント間は証明書を通じて認証を行います。
運用後にknife configure -iを実行すると証明書が変更され全クライアントと通信できなくなるので注意してください。
# 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://localhost:4000]
Please enter a clientname for the new client: [root]
Please enter the existing admin clientname: [chef-webui]
Please enter the location of the existing admin client's private key: [/etc/chef/webui.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...
Created client[root]
Configuration file written to /root/.chef/knife.rb

ここからClient側のお話
Client側はシンプルです。
RubyなどはServer側と同じバージョンですので省略します。
Severと同様の手順でGemもインストールしてください。
#yum install ruby
#yum install ruby-devel

Chef-Client


Clientインストール後初期設定をします。
# gem install --no-ri --no-rdoc chef 
# mkdir -p /etc/chef
# cd /etc/chef
# knife configure client ./

/etc/chef/client.rb
log_level        :info
log_location     STDOUT
chef_server_url  'http://chef-server.com:4000'
validation_client_name 'chef-validator'

/etc/chef/validation.pem
Server側にある'/etc/chef/validation.pem'の中身をコピーしてください

コピーするとサーバ側と認証し自身のクライアントキーが動的に登録されます。
#chef-client




ドハマリしたお話


”The file /etc/chef/validation.pem does not contain a correctly formatted private key.”

このエラーはほとんどの場合みかける場合がないと思います。
これは先程サーバ側からvalidation.pemをコピーしたと思いますがこのキーとサーバ側でフォーマットが違うよってエラーなんですが、そんな馬鹿な‥って思ってずっと悩み続けました。

SPCで転送すればいいものの僕はCygwinからコピーして貼りつけたのですが、ここで改行コードがWindowsの改行コードになってしまったんですねー。本当に馬鹿だった。
cat -eで改行コードが見えるのでこのエラーが出たときは確認してみるといいかもしれません。

0 件のコメント:

コメントを投稿