関連記事
- Chefを使ってより効率的にサーバを管理しよう。まずは用語から
- Berkshelfを使って外部クックブックをノードに適用する。
- クックブックを作成してノードに適用する。- その1
- クックブックを作成してノードに適用する。- その2
- ChefでCentOS 6.7 + rbenv + ruby 2.3.0の環境を構築する。
- ChefでCentOS 6.7 + Vim 7.4 + luaを設置する。
- ChefでVimプラグインマネージャーNeoBundleを設置する。
- Chefのレシピをデバッグしてみよう。
- ChefでCentOS 6.7 + nginxを設置する。- 外部クックブック
- ChefでCentOS 6.7 + nginxを設置する。- カスタムクックブック
- ChefでCentOS 6.7 + nodejs + npmを設置する。
- ChefでVimプラグインマネージャーvim-plugを設置する。
- ohaiのカスタムプラグインを作ってみよう。
- Chef SoloからChef Zeroへ
- Chefでnginx + php(php-fpm) + mariadb + wordpressを設置する。
Chefとは
- サーバの状態を扱うフレームワーク
- サーバ自身が保持しているサーバ状態をコードという外部表現で管理する。
- Chefでサーバプロビジョニングを行う場合はSSHを通じて直接設定を書き換えるのは禁止する。
Chefの構成
Chef Server / Chef Client
- サーバ・クライアント構成でChefを利用する。
- 設定を中央サーバから各ノード(管理対象サーバ、クライアント)に配布し、適用していくことでプロビジョニングを実行する。
- ローカル端末(クックブック)+ サーバ(Chef Server) + ノード(Chef Client)
- 各ノードからChef Serverに対して変更がないかを確認し、変更があれば適用する。
Chef Solo
Chefのスタンドアロン版で、Chefのパッケージに含まれている。
- スタンドアロンでChefを利用する。
- ローカル端末(クックブック)+ ノード(chef-soloが設置されている)
- knife-soloを使いローカル端末上のクックブックをリモートで各ノードに転送してchef-soloのコマンドを実行する。
Chef Zero(Chef Client Local Mode)
- Chef ClientをLocal Modeに運用することによってChef Soloと同様の機能を提供する。
- メモリ上で高速で動くChef Serverを作り、サーバ・クライアント構成と同じオペレーションが行われる。
- サーバ・クライアント構成に移行するとき便利
- 近頃はChef Soloの代わりに使っているようだが、ここではChef Soloを使う。
knife
- Chefのための一連のコマンドツール群
- リモートでChef ServerやChef Soloを操作する。
- クライアント・サーバ構成の場合はknifeを、Chef Solo構成の場合はknife-soloを使う。
knife-solo
- Chef Soloに特化したknifeのサブコマンドを提供する。
- knife-soloをインストールすると依存関係のあるChefも同時にインストールされる。
- 手元で作ったクックブックをリモートのサーバに転送してchef-soloコマンドを実行するといった一連の作業が自動化できる。
クックブック
- サーバ構築の手順書が書かれた定義ファイル
- knifeを使ってクックブックを生成する。
Berkshelf
- クックブックの依存関係を管理する。
- コミュニティから公開されたクックブックをbundlerのように管理することができる。
設置
環境
- ホスト:OS X El Capitan
- ゲスト:vagrant上のCentOS 6.7
ローカル端末
-
ここではホストが各ノード(ゲスト)を管理する。
-
knife-soloはgemで提供されるため、rubyが必要だ。
-
MACはrubyがデフォルトで設置されているが、rbenv環境のrubyを使うことを推奨する。
-
この場合も二つの選択肢がある。
-
グローバルのgem環境に設置する場合は、他のプロジェクトでもchefコマンドの利用ができる。
-
ローカル(プロジェクトの直下)のgem環境に設置する場合は、該当プロジェクトだけchefコマンドの利用ができる。
-
ここではグローバルのgem環境はできるだけ綺麗に管理したいので、ローカルのgem環境にknife-soloを設置する。
-
人の好みによる問題で別にグローバルのgem環境に設置しても問題はない。
-
rbenvとvagrantのboxがすでに用意されていることを前提とする。
-
用意されていない場合は下記の記事を参考にしていただきたい。
-
knife-soloなどのgemをbundlerで管理する。
% cd chef
% bundle init
- 生成されたGemfileを開き下記のようにgemを追加する。
% vi Gemfile
... snip ...
gem 'knife-solo'
gem 'berkshelf'
- vendor/bundle以下にgemを設置する。
% bundle install --path vendor/bundle --jobs=4 --binstubs
- 設置したgem一覧を確認する。
% bundle exec gem list
- knife-soloでリポジトリを生成する。
% knife solo init .
# リポジトリのディレクトリ構造
% tree . -L 1
.
├── Berksfile
├── Gemfile
├── Gemfile.lock
├── Vagrantfile
├── bin
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
├── site-cookbooks
└── vendor
- .gitignoreを下記のように修正する。
% vi .gitignore
/cookbooks/
/.bundle/
/bin/
/vendor/bundle/
Gemfile.lock
Vagrantfile
- gitリポジトリを生成する。
git init
git add .
git commit -m "Create knife-solo's repository"
# githubのほうにchefというリポジトリを生成した場合
git remote add origin git@github.com:devtopia/chef.git
git push -u origin master
ノード(vagrant上のCentOS 6.7)
- knife-soloでノードにChef Soloをインストールする。
# 仮想サーバの状態を確認
% vagrant status
Current machine states:
default running (virtualbox)
# 仮想サーバのホストがdevの場合
% bin/knife solo bootstrap dev
- 処理結果
% bin/knife solo bootstrap dev
Bootstrapping Chef...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 20022 100 20022 0 0 3451 0 0:00:05 0:00:05 --:--:-- 79452
Getting information for chef stable 12.7.2 for el...
downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=12.7.2&p=el&pv=6&m=x86_64
to file /tmp/install.sh.3056/metadata.txt
trying wget...
url https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-12.7.2-1.el6.x86_64.rpm
md5 8c3ba2e797fc852fc557b0e7157556cc
sha256 6af0eb1c7706fc6a36f74ae9f590135e37e6206f2fe7d5a1760c1e2da1b36068
version 12.7.2downloaded metadata file looks valid...
downloading https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-12.7.2-1.el6.x86_64.rpm
to file /tmp/install.sh.3056/chef-12.7.2-1.el6.x86_64.rpm
trying wget...
Comparing checksum with sha256sum...
Installing chef 12.7.2
installing with rpm...
警告: /tmp/install.sh.3056/chef-12.7.2-1.el6.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
準備中... ########################################### [100%]
1:chef ########################################### [100%]
Thank you for installing Chef!
Generating node config 'nodes/dev.json'...
Running Chef on dev...
Installing Berkshelf cookbooks to 'cookbooks'...
Resolving cookbook dependencies...
Uploading the kitchen...
WARNING: Local cookbook_path '/Users/devnote/Documents/study/chef/cookbooks' does not exist
Generating solo config...
Running Chef: sudo chef-solo -c ~/chef-solo/solo.rb -j ~/chef-solo/dna.json
Starting Chef Client, version 12.7.2
Compiling Cookbooks...
Converging 0 resources
Running handlers:
Running handlers complete
Chef Client finished, 0/0 resources updated in 01 seconds
参考
- チーム開発実践入門
- Chef実践入門