Chef Serverを構築した時の手順をまとめました。
Chef Serverの導入について、日本語の資料で書かれてるものがほとんどなかったので、導入手順をまとめておきます。
もし、「Chef Server構築したい!!」って方がいましたら、参考までにどうぞ。
Chef Server構築
実行環境
- Mac OSX:Chef Workstationを導入する
- CentOS(仮想環境):Chef Serverを導入する
- CentOS(仮想環境):Chef Clientを導入する
VirtualBoxインストール
今回はCentOSの仮想環境を作るためにVagrantを利用するのですが、その前準備としてVirtualBoxをインストールします。
- VirtualBoxのダウンロードサイトからVirtualBox ** OS X hosts 「x86/amd64」をクリックして、dmgファイルをダウンロード
- ダウンロードしたdmgファイルを開き、VirtualBoxをインストール
私の環境はMacなのでdmgファイルをダウンロードしてますが、利用してる環境(WindowsとかLinux)によってダウンロードするファイルを選んでください。
Vagrantインストール
- VagrantのダウンロードサイトからMac OS X用のインストーラをダウンロード
- ダウンロードしたdmgファイルを開きVagrantをインストール
Vagrantバージョン確認
Vagrantインストールできてるかどうかは、下記コマンドで確認できます。
$ vagrant -v
Vagrant 1.7.4
こんな感じでバージョンが確認できればインストール成功です。
Vagrantfileを作成する
VagrantでChef ServerとChef Clientの仮想環境を構築するための設定ファイルを作成します。
まず、Vagrantで仮想環境を構築するフォルダを作成します。
$ mkdir /path/to/vagrant
次に、Chef-ServerとChef 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 Workstationのhostsファイルを変更します。
# 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 nodeとclient 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 Workstationにchef-clientのIPアドレスとドメインを追加します。
# 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
こんな感じで繋がってるのが確認できれば成功です。
あとはChefのCookbookとかRecipeの設定を頑張ってChef Clientを作成していく必要があります。
Chef Clientの情報はブラウザ(https://chef-server/)からも確認できます。
コメント