Help us understand the problem. What is going on with this article?

Chefを使ってより効率的にサーバを管理しよう。まずは用語から

More than 3 years have passed since last update.

関連記事

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実践入門
park-jh
プルスタックエンジニアになれるまで頑張ろう。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away