Chef Severを用いたBoxのプロビジョニング(前篇)~Chefサーバーを構築する

Chef Severを用いたBoxのプロビジョニング(前篇)~Chefサーバーを構築する

はじめに

本プログでは、これまでChef-Soloや、knife-soloを使ったプロビジョニング方法について解説しています。今回は、プロビジョニングの王道とも言えるクライアント・サーバー間のプロビジョニングについて、前後編の2回に分けて解説します。前編では、Chefサーバーの構築方法を解説します。

構築に使用するマシン環境は、下記のとおりです。

ソフトウエアバージョン
OSWindows 7 Ultimate 32bit
CygwinSetup Version 2.831
Vagrant1.2.7

Chefの仕組み

構築に入る前に、Chefの仕組みを簡単に説明します。
Chefによるプロビジョニングでは、3つのプレーヤーがおり、それぞれの機能は下記に示すとおりです。

役割機能
ChefサーバーChefクライアントの構成情報を一元管理する。
ChefクライアントChefサーバーの構成情報を取得して、実行する。
WorkStationchefリポジトリを保持し、Cookbookの管理を行い、Chefサーバーに構成情報のアップロードを行う。
Chefクライアントに対して、プロビジョニングを指示(bootstrap)する。

WorkStationとChefクライアント間はSSH通信を行い、それ以外は全てSSL通信になります。

SSL通信SSH通信

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
    
    1018-04

    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
    
    1018-08 1018-09

    また、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
    
    1018-12
  3. chef-serverのインストール

    opscodeにアクセスし、パッケージのダウンロードURLを確認してchef-serverをインストールします。

    1018-13

    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にアクセスできます。

    デフォルトの認証情報は、下記のとおりです。

    Usernameadmin
    Password/etc/chef-server/chef-server-running.jsonファイル中の
    web_ui_admin_default_passwordを参照して下さい。
  4. 1018-21

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 ~]$ 
    
  5. これまでの作業で、rootユーザーをChefサーバー管理者として登録できましたので、
    vagrantユーザーを管理者登録します。

  6. 認証鍵の設定

    $ 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 ~]$ 
    
  7. 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コマンドで毎回コピーする必要があります。

  8. 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 ~]$
    
  9. ユーザーアカウントの確認

    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 ~]$
    
  10. ノード設定ファイルの作成

    ノード設定ファイルは、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 ~]$
    
  11. 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クライアントを構築とプロビジョニング方法を解説します。

Comments are closed.