[ Chef Server ] Chef Server を構築する

Chef Server を構築した時の手順をまとめました。
Chef Server の導入について、日本語の資料で書かれてるものがほとんどなかったので、導入手順をまとめておきます。
もし、「 Chef Server を構築したい!!」って方がいましたら、参考までにどうぞ。

Chef Server 構築

今回、 Chef Server の環境を構築するために利用した実行環境は以下の通りです。

実行環境

  • Mac OSX : Chef Workstationを導入する
  • CentOS (仮想環境) : Chef Server を導入する
  • CentOS (仮想環境) : Chef Client を導入する

VirtualBox インストール

今回は CentOS の仮想環境を作るために Vagrant を利用するのですが、その前準備として VirtualBox をインストールします。

  1. VirtualBoxダウンロードサイト から VirtualBox OS X hosts 「x86/amd64」 をクリックして、 dmg ファイルをダウンロード
  2. ダウンロードした dmg ファイルを開き、 VirtualBox をインストール

私の環境は Mac なので dmg ファイルをダウンロードしてますが、利用してる環境( Windows とか Linux )によってダウンロードするファイルを選んでください。

Vagrant インストール

  1. Vagrantダウンロードサイト から Mac OS X用 のインストーラをダウンロード
  2. ダウンロードした dmg ファイル を開き Vagrant をインストール

Vagrantバージョン確認

Vagrant インストールできてるかどうかは、下記コマンドで確認できます。

$ vagrant -v
Vagrant 1.7.4

こんな感じでバージョンが確認できればインストール成功です。

Vagrantfileを作成する

VagrantChef ServerChef Client の仮想環境を構築するための設定ファイルを作成します。
まず、 Vagrant で仮想環境を構築するフォルダを作成します。

$ mkdir /path/to/vagrant

次に、 Chef-ServerChef Client を構築するためのフォルダを作成します。

$ cd /path/to/vagrant
$ mkdir /path/to/vagrant/chef

Vagrant を使うために初期化処理を実行します。

$ vagrant init

Vagrant を初期化すると、先ほど作成した chef フォルダ に「 Vagrantfile 」が作成されるので、そのファイルを編集するんですが、その前に Vagrant のプラグイン をあらかじめインストールしておきます。

$ vagrant plugin install vagrant-vbguest
$ vagrant plugin install vagrant-omnibus

Vagrantfile を編集します。

$ vim Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

# chef-serverの設定情報
$script = <<EOF
  # yumアップデート
  sudo yum update -y
  # yumパッケージのインストール
  sudo yum install wget ntp openssl-devel
  # 日付と時刻をNTPサーバと同期
  sudo ntpdate ntp.nict.jp
  # Chef Serverのリポジトリダウンロード
  (cd /tmp && wget https://web-dl.packagecloud.io/chef/stable/packages/el/5/chef-server-core-12.0.1-1.x86_64.rpm)
  # Chef Serverパッケージインストール
  sudo rpm -Uvh /tmp/chef-server-core-12.0.1-1.x86_64.rpm
EOF

# chef-clientの設定情報
$client_script = <<EOF
  # yumアップデート
  sudo yum update -y
  # yumパッケージのインストール
  sudo yum install wget ntp openssl-devel
  # 日付と時刻をNTPサーバと同期
  sudo ntpdate ntp.nict.jp
  # Chef Clientインストール
  curl -L https://www.chef.io/chef/install.sh | sudo bash
  # hostsファイルにchef-serverのIPとドメインを追加
  sudo bash -c "echo '192.168.33.12 chef-server' >> /etc/hosts"
EOF

# 設定した情報で仮想環境を作成する
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vbguest.auto_update = false
  config.omnibus.chef_version = :latest

  # chef-server作成
  config.vm.define :chef_server do |host|
    host.vm.box = 'centos64'
    host.vm.box_url = 'https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box'
    host.vm.hostname = 'chef-server'
    host.vm.network :private_network, ip: '192.168.33.12'
    host.vm.provision :shell, :inline => $script
  end

  # chef-client作成
  config.vm.define :chef_client do |host|
    host.vm.box = 'centos65'
    host.vm.box_url = 'https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box'
    host.vm.hostname = 'chef-client'
    host.vm.network :private_network, ip: '192.168.33.13'
    host.vm.provision :shell, :inline => $client_script
  end
end

Chef Server 作成

Vagrant を使って Chef Server を作成します。

# chef_serverセットアップ
$ vagrant up chef_server

# chef_serverにログイン
$ vagrant ssh chef_server

# Chef Serverセットアップ
$ sudo chef-server-ctl reconfigure

# Web UIインストール
$ sudo chef-server-ctl install opscode-manage
$ sudo opscode-manage-ctl reconfigure
$ sudo chef-server-ctl reconfigure

# testを実行
$ sudo chef-server-ctl test

Chef Workstationhosts ファイルを変更します。

# vim /etc/hosts

192.168.33.12 chef-server

Chef Server の作成が完了したら https://chef-server/signup にアクセスできるようになります。

Chef Server へアクセスするユーザを作成する

下記コマンドを実行して Chef Server へアクセス可能なユーザを作成します。

# chef_serverにアクセス
vagrant ssh chef_server

# ユーザ登録
$ sudo chef-server-ctl user-create admin firstname lastname your@mail.address password --filename admin.pem

# organization登録
# 鍵はORGANIZATION-validator.pemとなる
$ sudo chef-server-ctl org-create chef "Chef" --association admin --filename chef-validator.pem

# 鍵ができていることを確認
$ ls
admin.pem chef-validator.pem install.sh

Chef Workstation の knife.rb 設定

knife.rb への設定の前に下記コマンドを実行して Gemfile を作成します。

$ vim /path/to/vagrant/chef/Gemfile

# Gemfile
source 'https://rubygems.org'

gem 'chef'
gem 'knife-solo'

knife.rb の設定を行います。

$ bundle exec knife configure
# 順番に設定していく
WARNING: No knife configuration file found
Where should I put the config file? [/Users/.chef/knife.rb] ~/.chef/knife.rb
Please enter the chef server URL: https://chef-server/organizations/chef/
Please enter an existing username or clientname for the API: [USER] admin
Please enter the validation clientname: [chef-validator] chef-validator
Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] ~/.chef/chef-validator.pem
Please enter the path to a chef repository (or leave blank):

上記の設定が完了すると knife.rb が下記のような設定になります。

# ~/.chef/knife.rb
log_level :info
log_location STDOUT
node_name 'admin'
client_key '/Users/koichi-ezato/.chef/admin.pem'
validation_client_name 'chef-validator'
validation_key '/Users/koichi-ezato/.chef/chef-validator.pem'
chef_server_url 'https://chef-server/organizations/chef/'
syntax_check_cache_path '/Users/koichi-ezato/.chef/syntax_check_cache'

Chef Workstation に Chef Server の鍵を転送する

下記コマンドで Chef Server に配置されている pem ファイルChef Workstation へ転送します。

$ scp -o stricthostkeychecking=no vagrant@192.168.33.12:/home/vagrant/admin.pem ~/.chef/admin.pem
Warning: Permanently added '192.168.33.12' (RSA) to the list of known hosts.
vagrant@192.168.33.12's password: vagrant

$ scp -o stricthostkeychecking=no vagrant@192.168.33.12:/home/vagrant/chef-validator.pem ~/.chef/chef-validator.pem
vagrant@192.168.33.12's password: vagrant
chef-validator.pem

# 証明書も取得
$ bundle exec knife ssl fetch -s https://chef-server/organizations/chef/

鍵と証明書が取得できたら ssl で通信ができるか確認します。

$ bundle exec knife ssl check

# 鍵と証明書が転送されていることを確認
ls ~/.chef
admin.pem       chef-validator.pem  knife.rb        trusted_certs

nodeとuserを確認する

client nodeclient user を確認します。

# client nodeの確認
$ bundle exec knife client list
chef-validator

# client userの確認
bundle exec knife user list
admin

Chef Clientを作成する

Vagrant を使って Chef Client を作成します。

# chef_clientセットアップ
$ vagrant up chef_client

# chef_clientにログイン
$ vagrant ssh chef_client

# hostsの設定
$ vi /etc/hosts

# /etc/hosts
# hostsに下記の記載がなければ追加する
192.168.33.12 chef-server

exit

Chef Workstation から Chef Server に node を登録

node を登録する前に Chef Workstationchef-clientIPアドレスドメイン を追加します。

# vim /etc/hosts

# /etc/hosts
192.168.33.13   chef-client

node を登録します。

bundle exec knife bootstrap chef-client -x vagrant -P vagrant --sudo

node を確認します。

$ bundle exec knife node list
chef-client

chef-client という node が確認できました。

Chef Clientの情報を取得してみる

これまでの設定で一通りの設定が完了したので、実際に使えるかどうか試してみます。
Chef Workstation ( Mac 端末)から Chef Client の情報を取得してみます。

$ bundle exec knife client show chef-client
admin:      false
chef_type:  client
name:       chef-client
public_key: -----BEGIN PUBLIC KEY-----
...
...
-----END PUBLIC KEY-----
validator:  false

こんな感じで繋がってるのが確認できれば成功です。

あとは ChefCookbook とか Recipe の設定を頑張って Chef Client を作成していく必要があります。
Chef Client の情報はブラウザ( https://chef-server/ )からも確認できます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です