はじめに
本ブログでは、これまでChef-Soloや、knife-soloを使ったプロビジョニング方法について解説しています。今回は、プロビジョニングの王道とも言えるクライアント・サーバー間のプロビジョニングについて、前後編の2回に分けて解説します。前編では、Chefサーバーの構築方法を解説します。
構築に使用するマシン環境は、下記のとおりです。
ソフトウエア | バージョン |
---|---|
OS | Windows 7 Ultimate 32bit |
Cygwin | Setup Version 2.831 |
Vagrant | 1.2.7 |
Chefの仕組み
構築に入る前に、Chefの仕組みを簡単に説明します。
Chefによるプロビジョニングでは、3つのプレーヤーがおり、それぞれの機能は下記に示すとおりです。
役割 | 機能 |
---|---|
Chefサーバー | Chefクライアントの構成情報を一元管理する。 |
Chefクライアント | Chefサーバーの構成情報を取得して、実行する。 |
WorkStation | chefリポジトリを保持し、Cookbookの管理を行い、Chefサーバーに構成情報のアップロードを行う。 Chefクライアントに対して、プロビジョニングを指示(bootstrap)する。 |
WorkStationとChefクライアント間はSSH通信を行い、それ以外は全てSSL通信になります。
Chefサーバーの構築
それぞれの役割が分ったところで、Chefサーバーを構築します。
以下の手順で構築します。
1.サーバーVMの起動
Base VMを指定して、ChefサーバーVMを起動します。
今回は、本ブログで以前作成したCentOS-6.4-x86_64-minimal.boxを使用しています。
VMの初期設定
$ mkdir -p ~/mybox/vagrant/chef-server-centos64-x86_64 && cd ~/mybox/vagrant/chef-server-centos64-x86_64 $ vagrant box add chef-server-centos64-x86_64 /export/vagrant/CentOS-6.4-x86_64-minimal.box $ vagrant init chef-server-centos64-x86_64
punio@PAPA ~ $ mkdir -p ~/mybox/vagrant/chef-server-centos64-x86_64 && cd ~/mybox/vagrant/chef-server-centos64-x86_64 punio@PAPA ~/mybox/vagrant/chef-server-centos64-x86_64 $ vagrant box add chef-server-centos64-x86_64 /export/vagrant/CentOS-6.4-x86_64-minimal.box Downloading or copying the box... Extracting box...ate: 407M/s, Estimated time remaining: --:--:--) Successfully added box 'chef-server-centos64-x86_64' with provider 'virtualbox'! punio@PAPA ~/mybox/vagrant/chef-server-centos64-x86_64 $ vagrant init chef-server-centos64-x86_64 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. punio@PAPA ~/mybox/vagrant/chef-server-centos64-x86_64 $ mkdir -p ~/mybox/vagrant/chef-server-conf punio@PAPA ~/mybox/vagrant/chef-server-centos64-x86_64 $ vi Vagrantfile punio@PAPA ~/mybox/vagrant/chef-server-centos64-x86_64
共有フォルダの作成
Chefクライアントの認証鍵やサーバー設定情報に共有フォルダ経由を介してアクセスするため、共有元のフォルダを作成します。
$ mkdir -p ~/mybox/vagrant/chef-server-conf
Vagrantfileの編集
サーバーVMにブリッジネットワークを追加し、ホストマシン上のフォルダを、サーバーVMの/configフォルダにマウントします。
Vagrant::Config.run do |config| config.vm.network :bridged config.vm.share_folder "config", "/config", "~/mybox/vagrant/chef-server-conf" end
VMの起動
$ vagrant up
punio@PAPA ~/mybox/vagrant/chef-server-centos64-x86_64 $ vagrant up Bringing machine 'default' up with 'virtualbox' provider... [default] Importing base box 'chef-server-centos64-x86_64'... [default] Matching MAC address for NAT networking... [default] Setting the name of the VM... [default] Clearing any previously set forwarded ports... [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Preparing network interfaces based on configuration... [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] VM booted and ready for use! [default] Configuring and enabling network interfaces... [default] Mounting shared folders... [default] -- /config [default] -- /vagrant
2.サーバーVMの設定
Chefサーバー、クライアント間ではSSL通信によってパケットの送受信を行っています。JAXAのイプシロンロケットほどシビアでは無いのですが、クラサバ間でパケットの送受信時間にズレが生じてしまうと、正常に動作しません。このため、NTPサーバーを導入し、時刻同期を行います。
ntp.confに指定するNTPサーバーには、ntp.nict.jpおよび、ntp.jst.mfeed.ad.jpを指定します。
NTPサーバーの導入
$ sudo yum -y install ntp $ sudo ntpdate ntp.jst.mfeed.ad.jp $ sudo vi /etc/ntp.conf $ sudo /etc/init.d/ntpd start $ sudo chkconfig ntpd on
また、Chefサーバー、クライアントではFQDNによるアクセスが必須とされており、名前解決が出来なければいけませんので、FQDNおよび、/etc/hostsへの登録を行います。
FQDNの登録
$ sudo hostname chef-server.vagrantup.com $ sudo vi /etc/sysconfig/network
hostsの登録
$ echo -e "`ifconfig eth1 | grep 'inet addr' | awk '{print $2}' | sed 's/addr://'` `hostname` `hostname -s`" | sudo tee -a /etc/hosts
3.chef-serverのインストール
opscodeにアクセスし、パッケージのダウンロードURLを確認してchef-serverをインストールします。
rpmのインストール
$ curl -Lo chef-server-11.0.8-1.el6.x86_64.rpm https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.8-1.el6.x86_64.rpm $ sudo rpm -ivh chef-server-11.0.8-1.el6.x86_64.rpm $ rm -f chef-server-11.0.8-1.el6.x86_64.rpm
[vagrant@centos64-x86_64 ~]$ curl -Lo chef-server-11.0.8-1.el6.x86_64.rpm https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.8-1.el6.x86_64.rpm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 170M 100 170M 0 0 2356k 0 0:01:14 0:01:14 --:--:-- 4464k [vagrant@centos64-x86_64 ~]$
chef-serverの再構成
$ sudo chef-server-ctl reconfigure
Recipe: chef-server::erchef * service[erchef] action restart - restart service service[erchef] Chef Client finished, 268 resources updated chef-server Reconfigured!
chef-serverの動作確認
$ sudo chef-server-ctl test
[vagrant@centos64-x86_64 ~]$ sudo chef-server-ctl test Configuring logging... Creating platform... Starting Pedant Run: 2013-11-28 04:49:38 UTC setting up rspec config for # Configuring RSpec for Open-Source Tests _______ _______ _______ _______ _______ ______ _______ | || || || || || | | | | _ || _ || _____|| || _ || _ || ___| | | | || |_| || |_____ | || | | || | | || |___ | |_| || ___||_____ || _|| |_| || |_| || ___| | || | _____| || |_ | || || |___ |_______||___| |_______||_______||_______||______| |_______| _______ _______ ______ _______ __ _ _______ | || || | | _ || | | || | | _ || ___|| _ || |_| || |_| ||_ _| | |_| || |___ | | | || || | | | | ___|| ___|| |_| || || _ | | | | | | |___ | || _ || | | | | | |___| |_______||______| |__| |__||_| |__| |___| "Accuracy Over Tact" === Testing Environment ===
Chef Server Web UIへのアクセス
ブラウザで、https://192.168.0.161/にアクセスすると、Chef Server Web UIにアクセスできます。
デフォルトの認証情報は、下記のとおりです。
Username | admin |
Password | /etc/chef-server/chef-server-running.jsonファイル中の web_ui_admin_default_passwordを参照して下さい。 |
WorkStationの設定
WorkStationは、自らがChefクライアントとなりCookbookのインストールや、ChefサーバーへCookbookのアップロードなどを行う管理端末です。今回は、ChefサーバーをWorkStationとして利用します。
以下の手順で構築します。
1.chef-clientのインストール
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
[vagrant@chef-server ~]$ curl -L https://www.opscode.com/chef/install.sh | sudo bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 101 6790 101 6790 0 0 5273 0 0:00:01 0:00:01 --:--:-- 21624 Downloading Chef for el... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 27.7M 100 27.7M 0 0 2913k 0 0:00:09 0:00:09 --:--:-- 4984k Installing Chef warning: /tmp/tmp.oDkQnAcy/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY Preparing... ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef! [vagrant@chef-server ~]$
2.認証鍵の設定
Chefサーバー管理者および、クライアント認証鍵を設定します。
$ sudo cp /etc/chef-server/admin.pem /etc/chef/ $ sudo cp /etc/chef-server/chef-validator.pem /etc/chef/validation.pem
[vagrant@chef-server ~]$ sudo cp /etc/chef-server/admin.pem /etc/chef/ [vagrant@chef-server ~]$ sudo cp /etc/chef-server/chef-validator.pem /etc/chef/validation.pem [vagrant@chef-server ~]$
3.knife設定
$ sudo knife configure -i
ウィザード形式で設定を行いますので、下記の項目以外はデフォルトで設定します。
name for the new user | root |
[vagrant@chef-server ~]$ sudo 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: [https://chef-server.vagrantup.com:443] Please enter a name for the new user: [vagrant] root Please enter the existing admin name: [admin] Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem] Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef-server/chef-validator.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[root] Configuration file written to /root/.chef/knife.rb [vagrant@chef-server ~]$
4.ユーザーアカウントの確認
Chefサーバーにアクセスできるクライアントおよび、管理者権限を持つユーザーアカウントを表示します。
$ sudo knife client list $ sudo knife user list
[vagrant@chef-server ~]$ sudo knife client list chef-validator chef-webui [vagrant@chef-server ~]$ sudo knife user list admin root [vagrant@chef-server ~]$
これまでの作業で、rootユーザーをChefサーバー管理者として登録できましたので、
vagrantユーザーを管理者登録します。
5.認証鍵の設定
$ mkdir ~/.chef $ sudo cp /etc/chef-server/admin.pem /home/vagrant/.chef $ sudo cp /etc/chef-server/chef-validator.pem /home/vagrant/.chef $ sudo chown -R vagrant:vagrant /home/vagrant/.chef $ chmod 0600 ~/.chef/*.pem
[vagrant@chef-server ~]$ mkdir ~/.chef [vagrant@chef-server ~]$ sudo cp /etc/chef-server/admin.pem /home/vagrant/.chef [vagrant@chef-server ~]$ sudo cp /etc/chef-server/chef-validator.pem /home/vagrant/.chef [vagrant@chef-server ~]$ sudo chown -R vagrant:vagrant /home/vagrant/.chef [vagrant@chef-server ~]$ chmod 0600 ~/.chef/*.pem [vagrant@chef-server ~]$
6.WorkStation認証鍵の設定
WorkStationからChefクライアントに、SSH接続する際に使用します。
パスフレーズを設定しないRSA認証鍵を作成します。
$ ssh-keygen -t rsa -N "" -f ~/.ssh/workstation_rsa_key
作成したRSA公開鍵を共有フォルダ/configにコピーします。
$ cp -p ~/.ssh/workstation_rsa_key.pub /config/ $ chmod 0444 /config/workstation_rsa_key.pub
[vagrant@chef-server ~]$ ssh-keygen -t rsa -N "" -f ~/.ssh/workstation_rsa_key Generating public/private rsa key pair. Your identification has been saved in /home/vagrant/.ssh/workstation_rsa_key. Your public key has been saved in /home/vagrant/.ssh/workstation_rsa_key.pub. The key fingerprint is: e1:92:70:d2:4a:55:4f:b7:b0:03:6c:86:7b:1b:3d:a5 vagrant@chef-server.vagrantup.com The key's randomart image is: +--[ RSA 2048]----+ | .+o o . | | o. ++ +.. | | + o+..+o. | | . =.oo.E. | | . o.So . | | .. | | | | | | | +-----------------+ [vagrant@chef-server ~]$ cp -p ~/.ssh/workstation_rsa_key.pub /config/ [vagrant@chef-server ~]$ chmod 0444 /config/workstation_rsa_key.pub [vagrant@chef-server ~]$
RSA公開鍵は、公開可能な鍵ですので今回は、共有フォルダにコピーしてChefクライアントからアクセスしやすいようにしていますが、セキュリティをより強固にするためには、共有フォルダにコピーしないでscpコマンドで毎回コピーする必要があります。
7.knife設定
$ knife configure -i
ウィザード形式で設定を行いますので、下記の項目以外はデフォルトで設定します。
private key | /home/vagrant/.chef/admin.pem |
validation key | /home/vagrant/.chef/chef-validator.pem |
[vagrant@chef-server ~]$ knife configure -i WARNING: No knife configuration file found Where should I put the config file? [/home/vagrant/.chef/knife.rb] Please enter the chef server URL: [https://chef-server.vagrantup.com:443] Please enter a name for the new user: [vagrant] Please enter the existing admin name: [admin] Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem] /home/vagrant/.chef/admin.pem Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] /home/vagrant/.chef/chef-validator.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[vagrant] Configuration file written to /home/vagrant/.chef/knife.rb [vagrant@chef-server ~]$ chmod 0400 ~/.chef/*.pem [vagrant@chef-server ~]$ chmod 0600 ~/.chef/*.rb [vagrant@chef-server ~]$
8.ユーザーアカウントの確認
Chefサーバー管理者としてvagrantが追加されます。
$ knife client list $ knife user list
[vagrant@chef-server ~]$ knife client list chef-validator chef-webui [vagrant@chef-server ~]$ knife user list admin root vagrant [vagrant@chef-server ~]$
9.ノード設定ファイルの作成
ノード設定ファイルは、Chefクライアントにインストールする設定ファイルとなりますので、今回は共有フォルダ/configに作成しています。RSA公開鍵同様にセキュリティを強固にするには、/configフォルダ以外を指定して設定ファイルを作成し、Chefクライアントにscpコマンドで毎回コピーする必要があります。
$ knife configure client /config $ chmod 0400 /config/validation.pem.pem /config/client.rb
[vagrant@chef-server ~]$ knife configure client /config Creating client configuration Writing client.rb Writing validation.pem [vagrant@chef-server ~]$ chmod 0400 /config/*.pem /config/*.rb [vagrant@chef-server ~]$
10.PATH設定
knifeコマンドを実行できるように、PATHを設定します。
$ echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bashrc $ source ~/.bashrc
[vagrant@chef-server ~]$ echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bashrc [vagrant@chef-server ~]$ source ~/.bashrc [vagrant@chef-server ~]$
まとめ
ここまで、Vagrantを使ってChefサーバーを構築する方法を解説しました。後編では、Chefクライアントを構築とプロビジョニング方法を解説します。
本ブログは、Git / Subversion のクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
開発の効率化をしたい!もっと便利なツールを使いたい!そんなお悩みをtracpathで解決!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments