よくChef-Serverはめんどくさい、最初はSoloからといいますが
きちんとしたやり方がわかるので、必要そうであればServerを入れてみるのも良いと思います。
Chef-Server | レシピの管理、attributeの管理、ノードの管理 |
Chef-Client | レシピの実行、ステータスの送信 |
WarkStation | レシピの作成、ランリストの作成 |
今回、Cehf-ServerとWarkStationは同じ環境上に作成します。
Chef-Server、ClientともにCentOS6.5で構築しました。
Chef-Serverのインストール
OpscodeのサイトからRPMパッケージをダウンロード
Chef-Serverのインストール
Chef-Server用のユーザーを作成
デフォルトだと下記ユーザーが作成されます。
uid=495(chef_server) gid=490(chef_server) 所属グループ=490(chef_server)uid=494(opscode-pgsql) gid=489(opscode-pgsql) 所属グループ=489(opscode-pgsql)Chef-Severはインストールされる際に必要なパッケージは自動的にセットアップされます
WEBサーバとしてNginx、DBとしてPostgreSQL等、必要なものがソースインストールされます。
また、インストールされる際、ホスト名がFQDNとして登録されます
こちらは後程変更します。
ダウンロードしたRPMをインストール
# rpm -ivh chef-server-11.0.10-1.el6.x86_64.rpm 警告: chef-server-11.0.10-1.el6.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY 準備中... ########################################### [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-ctl reconfigure ~省略 Chef Client finished, 154 resources updated chef-server Reconfigured!無事インストールが完了すれば、Chef-Serverは起動しているので
ブラウザから確認できます。
http://localhost/
デフォルトパスワードは画面の右側に表示されていて
初回ログイン時にパスワードの変更を求められます。
初期状態ではURLがホスト名になっていて不便なのでサイトドメイン名、またはIPに変更します。
Chef-Serverの設定ファイルを修正
# vi /var/opt/chef-server/chef-pedant/etc/pedant_config.rb chef_server "https://192.168.1.10"
# vi /var/opt/chef-server/erchef/etc/app.config {s3_url, "https://192.168.1.10"},
# vi /etc/chef-server/chef-server-running.json "vip": "192.168.1.10", "url": "https://192.168.1.10", "api_fqdn": "192.168.1.10", "web_ui_fqdn": "192.168.1.10", "server_name": "192.168.1.10", "url": "https://192.168.1.10",Nginxの設定ファイルを修正
# vi /var/opt/chef-server/nginx/etc/nginx.conf server_name 192.168.1.10; rewrite ^(.*) https://192.168.1.10:443$1 permanent;設定の反映
# chef-server-ctl restart ok: run: bookshelf: (pid 6725) 0s ok: run: chef-expander: (pid 6742) 0s ok: run: chef-server-webui: (pid 6746) 0s ok: run: chef-solr: (pid 6755) 0s ok: run: erchef: (pid 6778) 0s ok: run: nginx: (pid 6783) 1s ok: run: postgresql: (pid 6824) 0s ok: run: rabbitmq: (pid 6839) 1s以上でインストールは完了です。
PostgeSQLのカスタマイズ
デフォルト設定でも十分問題なく動きますが
運用を考えて少し修正します。
PostgreSQLの設定
Chef-Server用にパッケージがカスタマイズされていますが、ログ周り等少し修正
ログ周り
ログ周り
# vi /var/opt/chef-server/postgresql/data/postgresql.conf wal_level = archive fsync = on checkpoint_segments = 10 wal_sync_method = fsync log_destination = 'stderr' logging_collector = on log_directory = '/var/log/chef-server/postgresql' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_file_mode = 0600 log_truncate_on_rotation = off log_rotation_age = 1d log_rotation_size = 0 client_min_messages = warning log_min_duration_statement = 300ms log_line_prefix = '[%t] %d %r [%p]: [%l-1] %e' log_lock_waits = on log_statement = 'mod'pg_basebackupができるよう、アーカイブモードにしています
また、ログの出力先を明示的に指定。日単位でローテートさせます。
デフォルトでは下記に出力されChef-Serverで管理されていますが
/var/log/chef-server/curentログファイルを指定した場合、Chef-Serverからは見れなくなります
# chef-server-ctl postgresql tailバキューム設定
デフォルトのまま、オートバキュームですが、今後ノードやWarkStationが増える事も考え
cronでバキュームを定期実行するようにします
# vi /var/opt/chef-server/postgresql/data/postgresql.conf autovacuum = offChef-ServerはOpscodeのパッケージを使用しているので
当然というか、PostgreSQLは海外用にコンパイルされています
日本環境に設定
# vi /var/opt/chef-server/postgresql/data/postgresql.conf log_timezone = 'Japan' timezone = 'Japan'設定の反映
# chef-server-ctl restart postgresql # chef-server-ctl status postgresql
接続権限の設定
バックアップや、バキューム処理を行えるよう、ユーザー権限を追加する。
データベースや、ユーザー情報の確認
# su - opscode-pgsql $ psql -U opscode_chef # \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges --------------+---------------+-----------+---------+-------+------------------------------------- opscode_chef | opscode-pgsql | UTF8 | C | C | | | | | | | | | | | | | | | | postgres | opscode-pgsql | SQL_ASCII | C | C | template0 | opscode-pgsql | SQL_ASCII | C | C | | | | | | template1 | opscode-pgsql | SQL_ASCII | C | C | | | | | | (4 rows)
=# select * from pg_shadow; usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig -----------------+----------+-------------+----------+-----------+---------+-------------------------------------+----------+----------- opscode-pgsql | 10 | t | t | t | t | | | opscode_chef | 16549 | f | t | t | f | | | opscode_chef_ro | 16550 | f | t | t | f | | | (3 rows)マスターユーザーopscode-pgsqlがいるので、そのユーザーを運用で利用する。 baseバックアップ用にrepricationスキーマにアクセス権限を追加
# pg_hba.conf local replication 192.168.1.0/24 trust他のユーザー権限もALLで許可になっているので、アクセス許可IPや、アクセス可能DBを制限する。 設定の反映
# chef-server-ctl restart postgresql # chef-server-ctl status postgresql
Nginxのカスタマイズ
ログローテート設定
アクセスログ自体は不要かもしれませんが、ローテートするよう設定
ログローテートにはcronologを利用します。
# wget http://cronolog.org/download/cronolog-1.6.2.tar.gzNginxの起動スクリプトにcronologと連携する設定を追加
# vi /opt/chef-server/service/nginx/run ### cronolog set LOG_BIN="/usr/local/sbin/cronolog" LOG_DIR="/var/log/chef-server/nginx" PIP_DIR="$LOG_DIR" ACCESS_PIPE_FILE="$LOG_DIR/access.pipe" ERROR_PIPE_FILE="$LOG_DIR/error.pipe" SSL_ACCESS_PIPE_FILE="$LOG_DIR/ssl_access.pipe" SSL_ERROR_PIPE_FILE="$LOG_DIR/ssl_error.pipe" if [ ! -p $ACCESS_PIPE_FILE ]; then mkfifo $ACCESS_PIPE_FILE else rm -f $ACCESS_PIPE_FILE mkfifo $ACCESS_PIPE_FILE fi /bin/bash -c "cat $ACCESS_PIPE_FILE | $LOG_BIN $LOG_DIR/%Y%m/chef-server_access.%Y%m%d.log &" if [ ! -p $SSL_ACCESS_PIPE_FILE ]; then mkfifo $SSL_ACCESS_PIPE_FILE else rm -f $SSL_ACCESS_PIPE_FILE mkfifo $SSL_ACCESS_PIPE_FILE fi /bin/bash -c "cat $SSL_ACCESS_PIPE_FILE | $LOG_BIN $LOG_DIR/%Y%m/chef-server_ssl_access.%Y%m%d.log &" if [ ! -p $ERROR_PIPE_FILE ]; then mkfifo $ERROR_PIPE_FILE else rm -f $ERROR_PIPE_FILE mkfifo $ERROR_PIPE_FILE fi /bin/bash -c "cat $ERROR_PIPE_FILE | $LOG_BIN $LOG_DIR/%Y%m/chef-server_error.%Y%m%d.log &" if [ ! -p $SSL_ERROR_PIPE_FILE ]; then mkfifo $SSL_ERROR_PIPE_FILE else rm -f $SSL_ERROR_PIPE_FILE mkfifo $SSL_ERROR_PIPE_FILE fi /bin/bash -c "cat $SSL_ERROR_PIPE_FILE | $LOG_BIN $LOG_DIR/%Y%m/chef-server_ssl_error.%Y%m%d.log &"Nginxコンフィグファイルのログ出力先をFIFOファイルに変更
リライトログは不要なのでコメントアウトします
# vi /var/opt/chef-server/nginx/etc/nginx.conf #error_log /var/log/chef-server/nginx/error.log; error_log /var/log/chef-server/nginx/error.pipe; ~省略 #access_log /var/log/chef-server/nginx/rewrite-port-80.log;
# vi /var/opt/chef-server/nginx/etc/chef_http_lb.conf #access_log /var/log/chef-server/nginx/access.log opscode; access_log /var/log/chef-server/nginx/access.pipe opscode;
# vi /var/opt/chef-server/nginx/etc/chef_https_lb.conf #access_log /var/log/chef-server/nginx/access.log opscode; access_log /var/log/chef-server/nginx/ssl_access.pipe opscode;設定の反映
# /opt/chef-server/bin/chef-server-ctl restart nginx指定のログディレクトリにFIFOファイルが作成され
アクセスした際にログがきちんと作成されていることを確認。
Nginx自体は、Proxyしているだけのようなので、Apacheに移行すること自体は可能そうですね。
WarkStation環境のセットアップ
少し長いですが、Server環境の準備ができたので
レシピやランリストを作成する作業環境を準備します。
WarkStationはServer上に作成しました。
Chefのインストール
Chefをインストールします
Chef-Server上で作業を行う場合、必要なツールはServerと一緒に入りますが
別環境に建てる場合と同じよう、インストールしました。
Opscodeのサイトからダウンロード
インストールコマンドがあるので、それを実行
# 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 14101 100 14101 0 0 9929 0 0:00:01 0:00:01 --:--:-- 12103 Downloading Chef for el... downloading https://www.opscode.com/chef/metadata?v=&prerelease=false&p=el&pv=6&m=x86_64 to file /tmp/install.sh.5024/metadata.txt trying wget... url https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.8.2-1.el6.x86_64.rpm md5 10f3d0da82efa973fe91cc24a6a74549 sha256 044558f38d25bbf75dbd5790ccce892a38e5e9f2a091ed55367ab914fbd1cfed downloaded metadata file looks valid... downloading https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.8.2-1.el6.x86_64.rpm to file /tmp/install.sh.5024/chef-.x86_64.rpm trying wget... Checksum compare with sha256sum succeeded. Installing Chef installing with rpm... 警告: /tmp/install.sh.5024/chef-.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY 準備中... ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef!
WarkStation環境の設定
Chef-Serverと通信し、レシピを管理するユーザーを作成し
レシピを管理するディレクトリを作成します。
WarkStationユーザーのホームディレクトリ配下に、Serverとの通信用鍵を配置レシピを管理するディレクトリを作成します。
# useradd chef # mkdir /data/chef # mkdir /data/chef/.chefWarkStationユーザー(chef)のホームディレクトリは「/data/chef」です
# cp -a /etc/chef-server/admin.pem /data/chef/.chef/ # cp -a /etc/chef-server/chef-validator.pem /data/chef/.chef/ # chown chef: /data/chef -Rディレクトリにクックブックリポジトリを環境を作成しましょう
githubにOpscodeのテンプレートがあるので、それを利用します。
# su - chef $ git clone https://github.com/opscode/chef-repo.git Initialized empty Git repository in /data/chef/chef-repo/.git/ remote: Reusing existing pack: 223, done. remote: Total 223 (delta 0), reused 0 (delta 0) Receiving objects: 100% (223/223), 46.09 KiB, done. Resolving deltas: 100% (56/56), done.WarkSttionの作業環境ができたら、ServerにWarkStationを登録します。
# su - chef $ knife configure --initial WARNING: No knife configuration file found Where should I put the config file? [/data/chef/.chef/knife.rb] Please enter the chef server URL: [https://devsrv01:443] https://192.168.10.1 ←-- Chef-ServerのURLを入力 Please enter a name for the new user: [root] chef ←-- Chef-Serverへの接続ユーザー名を入力 Please enter the existing admin name: [admin] Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem] /data/chef/.chef/admin.pem ←-- 認証鍵のパスを指定 Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] /data/chef/.chef/chef-validator.pem ←-- 認証鍵のパスを指定 Please enter the path to a chef repository (or leave blank): /data/chef/chef-repo ←-- クックブックレポジトリの指定 Creating initial API user... Please enter a password for the new user: ←-- Chef-Serverへの接続ユーザーパスワードを入力 Created user[chef] Configuration file written to /data/chef/.chef/knife.rb以上でWarkStation環境のセットアップは完了です。
問題なく接続できる事を確認
$ knife client list chef-validator chef-webui疎通確認後、admin.pemは削除したほうがよいかもしれませんね。
Chef-Clientのセットアップ
作成したレシピをサーバに適用するために、クライアントを利用することで適用させる事ができます。
クライアントはデーモンモードで定期的にレシピを実行したり
「Ohai」という機能でサーバステータスをChef-Serverに送信したりします。
Chef-Clientのインストール
WarkStation同様、Chefをインストールします。
# curl -L https://www.opscode.com/chef/install.sh | bash
Chef-Client環境の設定
Chef-Serverとの接続ファイルを作成します
# mkdir /etc/chef # vi /etc/chef/client.rb logg_level :info log_location STDOUT chef_server_url 'https://192.168.1.10' node_name 'client01'Chef-Serverとの接続用に鍵ファイルをサーバーからコピー
# scp xxxxxx@192.169.1.10:/etc/chef-server/chef-validator.pem /etc/chef鍵ファイルをリネーム
# mv chef-validator.pem validation.pemあとはChef-Serverにクライアントとして登録すれば完了です。
Chef-Serverではクライアントと、ノードと別の情報で管理しているのですが
ノード=クライアントと同じような考えです。
Chef-Serverから見たとき、クライアントは接続情報を管理するもので
ノードはランリストと、クライアントを日もづけるものです。
ノードは事前に作成することも可能ですが
初期接続時に接続ファイルに書かれたノードでノードも自動的に作成されます。
では接続。
# chef-client Starting Chef Client, version 11.8.2 Creating a new client identity for devsrv02 using the validator key. resolving cookbooks for run list: [] Synchronizing Cookbooks: Compiling Cookbooks... [2014-01-07T19:11:59+09:00] WARN: Node devsrv02 has an empty run list. Converging 0 resources Chef Client finished, 0 resources updated事前にノードを作成し、レシピを登録していた場合、ここで実行されます。
初回接続後、vaildation.pemは削除しましょう。
以上で初期構成は完了です。
必要により、クライアントやWarkStationを登録しましょう
また、Chef-Clientにはデーモンでの利用もあるのですが(オプションでデーモンにできます)
まだ怖いので利用したことがないです。
さて、環境が整ったので、レシピの作成からServerへの連携を次でやってみますか
Stephen Nelson-smith
Oreilly & Associates Inc
売り上げランキング: 138,126
Oreilly & Associates Inc
売り上げランキング: 138,126
0 コメント:
コメントを投稿