ChefServerによるサーバー管理

手順通りにインストールしたのにうまくいかない。。

 

うまくはいくけど、手順長すぎ、あと何台構築しないといけないんだろうか。。

 

なんかバグが出た、このサーバだけ設定が古いせいか、ちゃんとアップデートしといてよ。。

 

サーバーの構築作業は何かとめんどくさいことが多いです。

今回はそういった問題を解決してくれる便利ツールChefを使ってみました。

構成

Chef Serverは以下の3種類で構成されています。

・Chef Server:レシピやクライアントを管理します

・Chef Client:レシピを使って構築します

・Workstation:レシピの登録やクライアントの追加をします

※レシピ:サーバを構築するための設定です

 

Chef Soloなどほかの構成はこちらがわかりやすかったです。

Chef Soloと Knife Soloでの ニコニコサーバー構築 (2) 〜導入編〜:dwango エンジニア ブロマガ:ドワンゴ研究開発チャンネル(ドワンゴグループのエンジニア) - ニコニコチャンネル:生活

下準備

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

$ vagrant box add chef/centos-6.5
$ vagrant up 

今回はすべて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/

鍵の権限を変更 

[192.168.1.142] $ sudo chown vagrant:vagrant ~/.chef/*.pem

knifeの初期化

[192.168.1.142] $ knife configure --initial
WARNING: No knife configuration file found
Where 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.140
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/admin.pem] ~/chef-repo/.chef/admin.pem
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem] ~/chef-repo/.chef/validation.pem
Please enter the path to a chef repository (or leave blank): ~/chef-repo
Creating 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

サーバで登録したレシピを確認

https://192.168.1.140/

ログイン

Username:admin

Password:p@ssw0rd1

 

無事apache_tutorialのレシピが登録されています。

f:id:katashiyo515:20140420190148j:plain

クライアント登録

サーバにクライアントを登録します。

[192.168.1.142] $ knife bootstrap 192.168.1.141 -x vagrant -P vagrant --sudo

無事登録されました。

f:id:katashiyo515:20140420190351j:plain

クライアントにレシピを登録する

WorkStationから実行します

[192.168.1.142] $ knife node run_list add 192.168.1.141 'recipe[apache_tutorial]'

 サーバの画面からでも可能です。

以下の画面でAvailable RecipesからRun Listにドラッグ&ドロップをするだけ。

f:id:katashiyo515:20140420190614j:plain

f:id:katashiyo515:20140420190558j:plain

追加できました。

f:id:katashiyo515:20140420190807j:plain

レシピを反映する

[192.168.1.142] knife ssh name:192.168.1.141 'sudo chef-client' -P vagrant

レシピが反映されたか確認

WEBからアクセスするとHello Worldと表示され、作ったレシピ通りに動いています。

f:id:katashiyo515:20140420190953j:plain

 

Chefいいね!

参考

入門 Chef Server #biglobetechtalk :かなり参考になりました

All about Chef ... — Chef Docs

Chef Soloと Knife Soloでの ニコニコサーバー構築 (2) 〜導入編〜:dwango エンジニア ブロマガ:ドワンゴ研究開発チャンネル(ドワンゴグループのエンジニア) - ニコニコチャンネル:生活

トラブルシューティング

$ 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

→バグらしいので旧バージョンをインストールする

https://tickets.opscode.com/browse/CHEF-5211

http://www.sharkpp.net/blog/2014/04/18/first-step-chef.html