ChefServerによるサーバー管理
手順通りにインストールしたのにうまくいかない。。
うまくはいくけど、手順長すぎ、あと何台構築しないといけないんだろうか。。
なんかバグが出た、このサーバだけ設定が古いせいか、ちゃんとアップデートしといてよ。。
サーバーの構築作業は何かとめんどくさいことが多いです。
今回はそういった問題を解決してくれる便利ツールChefを使ってみました。
構成
Chef Serverは以下の3種類で構成されています。
・Chef Server:レシピやクライアントを管理します
・Chef Client:レシピを使って構築します
・Workstation:レシピの登録やクライアントの追加をします
※レシピ:サーバを構築するための設定です
Chef Soloなどほかの構成はこちらがわかりやすかったです。
下準備
VagrantでServer、Clinet、Workstationにするサーバを作ります。
※vimとscreenを入れているのは趣味です。Chefには使いません。
$ vim Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define :chefs do |dev|
dev.vm.box = "chef/centos-6.5"
dev.vm.network :public_network, ip: "192.168.1.140"
dev.vm.hostname = "192.168.1.140"
# provisioning
dev.vm.provision "shell" do |s|
s.inline = ""
s.inline += "sudo yum install screen -y;"
s.inline += "sudo yum install vim -y;"
end
end
config.vm.define :chefc do |dev|
dev.vm.box = "chef/centos-6.5"
dev.vm.network :public_network, ip: "192.168.1.141"
dev.vm.hostname = "192.168.1.141"
# provisioning
dev.vm.provision "shell" do |s|
s.inline = ""
s.inline += "sudo yum install screen -y;"
s.inline += "sudo yum install vim -y;"
end
end
config.vm.define :work do |dev|
dev.vm.box = "chef/centos-6.5"
dev.vm.network :public_network, ip: "192.168.1.142"
dev.vm.hostname = "192.168.1.142"
# provisioning
dev.vm.provision "shell" do |s|
s.inline = ""
s.inline += "sudo yum install screen -y;"
s.inline += "sudo yum install vim -y;"
end
end
end
今回はすべてCentOSで作っていますが、UbuntuなどほかのOSももちろん使えます。
・Chef Server:192.168.1.140:CentOS
・Chef Client:192.168.1.141:CentOS
・Workstation:192.168.1.142:CentOS
Chef Server(192.168.1.140)を構築
[192.168.1.140] $ wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.12-1.el6.x86_64.rpm
[192.168.1.140] $ sudo rpm -ivh chef-server-11.0.12-1.el6.x86_64.rpm
[192.168.1.140] $ sudo chef-server-ctl reconfigure
使っているOSに応じてインストール方法が違います。
こちらを参考に。Install Chef | Chef
Workstation(192.168.1.142)の構築
knifeをインストール。
最新バージョンだとエラーになるため、旧バージョンをインストールしました。
[192.168.1.142] $ wget https://www.opscode.com/chef/install.sh
[192.168.1.142] $ sudo bash install.sh -v 11.4.0
レポジトリ作成
[192.168.1.142] $ sudo yum install git
[192.168.1.142] $ git clone git://github.com/opscode/chef-repo.git
[192.168.1.142] $ mkdir -p ~/chef-repo/.chef
[192.168.1.142] $ cd chef-repo
[192.168.1.142] $ echo '.chef' >> .gitignore
Chef Server(192.168.1.140)から鍵を持ってくる
[192.168.1.140]$ sudo scp /etc/chef-server/chef-validator.pem vagrant@192.168.1.142:/home/vagrant/chef-repo/.chef/validation.pem
[192.168.1.140]$ sudo scp /etc/chef-server/admin.pem vagrant@192.168.1.142:/home/vagrant/chef-repo/.chef/
鍵の権限を変更
knifeの初期化
[192.168.1.142] $ knife configure --initialWARNING: No knife configuration file foundWhere should I put the config file? [/home/vagrant/.chef/knife.rb]Please enter the chef server URL: http://192.168.1.142:4000 https://192.168.1.140Please 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/admin.pem] ~/chef-repo/.chef/admin.pemPlease enter the validation clientname: [chef-validator]Please enter the location of the validation key: [/etc/chef/validation.pem] ~/chef-repo/.chef/validation.pemPlease enter the path to a chef repository (or leave blank): ~/chef-repoCreating initial API user...Please enter a password for the new user:Created user[vagrant]Configuration file written to /home/vagrant/.chef/knife.rb
レシピの作成
サンプルの手順通りアパッチのレシピを作ります
[192.168.1.142] $ knife cookbook create apache_tutorial
apacheのパッケージを入れる設定
[192.168.1.142] $ vim ~/chef-repo/cookbooks/apache_tutorial/recipes/default.rb
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
end
cookbook_file "/var/www/html/index.html" do
source "index.html"
mode "0644"
end
Hello Worldを表示するhtmlファイルを作る
[192.168.1.142] $ vim ~/chef-repo/cookbooks/apache_tutorial/files/default/index.html<html>
<body>
<h1>Hello, world!</h1>
</body>
</html>
knifeでサーバにレシピを登録する
[192.168.1.142] $ knife cookbook upload apache_tutorial
サーバで登録したレシピを確認
ログイン
Username:admin
Password:p@ssw0rd1
無事apache_tutorialのレシピが登録されています。
クライアント登録
サーバにクライアントを登録します。
[192.168.1.142] $ knife bootstrap 192.168.1.141 -x vagrant -P vagrant --sudo
無事登録されました。
クライアントにレシピを登録する
WorkStationから実行します
[192.168.1.142] $ knife node run_list add 192.168.1.141 'recipe[apache_tutorial]'
サーバの画面からでも可能です。
以下の画面でAvailable RecipesからRun Listにドラッグ&ドロップをするだけ。
追加できました。
レシピを反映する
[192.168.1.142] $ knife ssh name:192.168.1.141 'sudo chef-client' -P vagrant
レシピが反映されたか確認
WEBからアクセスするとHello Worldと表示され、作ったレシピ通りに動いています。
・
Chefいいね!
参考
入門 Chef Server #biglobetechtalk :かなり参考になりました
トラブルシューティング
$ sudo knife configure initial
WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb]
ERROR: Ohai::Exceptions::DependencyNotFound: Can not find a plugin for dependency os
→バグらしいので旧バージョンをインストールする