Chef Server
を構築した時の手順をまとめました。
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/ )からも確認できます。
コメント