Program LOG

勉強した内容をまとめ中。。。間違ってたら教えて。。。

windows+CygwinでChef - 1.Chefのキホンのキと導入編-

さて、前回の記事で、rbenvをwindowsに入れましたので、
前々から言っていたChef(kife-solo)についての解説と、Windows7を作業用マシンとして
セットアップしていきたいと思います。

長くなりそうなので、目次を作成しました!
windows+CygwinでChef - 目次 - Program LOG

そもそもChefって何だ?

調べてみると、「インフラフレームワーク」とか「構成管理ツール」と言われています。
通常サーバーを構築する場合、OSのセットアップからネットワーク設定や、ミドルウエアのインストール、
各種設定やチューニングを行います。
またその際、設定手順書も同時に作成していき、複数台構築を行う事になると思います。
ChefはRubyで書かれた設定書(プログラム)に応じて、自動的に設定編集を行ってくれるツールです。

リポジトリ(キッチン)、クックブック、レシピ

簡単に説明すると、以下のようになります。
まずRubyの文法で書かれたサーバーの設定ファイルは「Recipe(レシピ)」と呼びます。
レシピを取りまとめているのを「Cookbook(クックブック)」と呼びます。
クックブックには、設定ファイルを管理するための、「Template(テンプレート)」や、
環境情報を取得して値を変更する事が出来る変数を定義する「Attribute(アトリビュート)」なども含まれています。
クックブック群やChefの実行なファイル群の事を「Repository(リポジトリ)」と呼ばれます。
また、Chef(シェフ)ネーミングになぞって「キッチン」とも呼ばれているようです。

Chefによるサーバー管理構成について

Chefの構成には、大きく分けて2種類の構成があります。
1台のサーバーでCookbookの作成や管理を行い、実行までを完結する方法のスタンドアロン構成と
Cookbookをサーバーで集中管理して、クライアントはサーバーからCookbookをダウンロード実行する
クライアント/サーバー構成です。
通常、クライアント/サーバー構成の場合には、Chefサーバーを構築し、
「Node」と呼ばれているクライアントにはChefクライアントをインストールする必要がある。
また、サーバーでレシピの作成も出来るが、別のマシンで行う事も可能。
また、その場合のマシンを「Workstation(ワークステーション)」と呼ぶ。
「knife-solo(ナイフソロ)」というツールを使えば、Chefサーバー無しで、複数台を管理する事も出来る。

以上、色んなサイトと本得た情報をまとめてみましたw
ふーんって程度しか分からんねw
シンプルに考えると、仮想サーバーとかで、chef-soloを使ってレシピを作っていって、
そのクックブックを本番サーバーにchefをインストールした後に実行すると、
後は勝手にやってくれるって事ですね。
作業マシンから自動実行するっていうknife-soloをwindowsに入れたいと思います。

knife-soloって何だ?

先ほども説明したとおり、スタンドアロン構成であれば、Chefサーバーが不要だけど、
設定対象のそれぞれのサーバーにChefクライアントとクックブックを配置して管理しなければなりません。
この作業を自動化するツールがknife-soloというツールです。
knife-soloは、作業マシンで作成したCookbookなどの設定ファイルを、
対象マシンにコピーし、その後、chef-soloコマンドを実行する、という一連の作業を自動実行してくれるツールです。
設定ファイルのコピーにはrsyncが、chef-soloコマンドの実行にはsshが利用されます。
Windowsで実現するには、コマンドプロンプトには両方とも入っていませんが、Cygwinなどを使えば、
実現する事が出来ると思います。

それでは早速WindowsへのインストールとVagrantを使って仮想マシンを作成し、Windows7から
knife-soloを実行してみたいと思います。

WindowsCygwin)でインストール

早速Cygwinでインストールしていきたいと思います。
Cygwinって何だ?とかって人は過去に記事を書いたので、確認してみてください。
WindowsでUNIX - Cygwin導入 - Program LOG
ちなみに、前回の記事でrbenvでrubyをインストールしている前提で書いていきますのでご注意を。。。w

まずは、gemを使ってChefのインストールから行います。

$ gem install chef --no-ri --no-rdoc
DL is deprecated, please use Fiddle
Fetching: mixlib-config-2.1.0.gem (100%)
Successfully installed mixlib-config-2.1.0
Fetching: mixlib-cli-1.5.0.gem (100%)
Successfully installed mixlib-cli-1.5.0
・・・中略
Fetching: chef-11.12.4.gem (100%)
Successfully installed chef-11.12.4
25 gems installed

$ chef-solo --version
DL is deprecated, please use Fiddle
Chef: 11.12.4

現在の最新版chef-11.12.4がインストールされました。
次に、knife-soloもインストールしたいと思います。
こちらもgemを使ってインストールします。

$ gem install knife-solo --no-ri --no-rdoc
DL is deprecated, please use Fiddle
Fetching: knife-solo-0.4.1.gem (100%)
Thanks for installing knife-solo!

If you run into any issues please let us know at:
  https://github.com/matschaffer/knife-solo/issues

If you are upgrading knife-solo please uninstall any old versions by
running `gem clean knife-solo` to avoid any errors.

See http://bit.ly/CHEF-3255 for more information on the knife bug
that causes this.
Successfully installed knife-solo-0.4.1
1 gem installed

$ gem list | grep knife-solo
DL is deprecated, please use Fiddle
knife-solo (0.4.1)

こちらも何もおきませんでしたw
また、先ほど説明しましたが、knife-soloには、rsyncsshが必要となります。
もしインストールしていない場合は、apt-cygでインストールしてください。
仮想マシンに関しては、Vagrantを使用して、最小構成のものをインストールします。
Vagrantに関しては下記の記事を確認してみてください。
Windows&Vagrantで自動仮想環境構築 - Program LOG
Windows&Vagrantで自動仮想環境構築 - ネットワーク設定とWEBサーバー導入編 - Program LOG

また、鍵認証できるように、Vagrantの起動後に以下のようにしています。

$ vagrant ssh-config --host chefssh >> ~/.ssh/config

Chefのリポジトリを作成しよう

先ほど解説したとおり、クックブックを作成するには、
リポジトリを作成しておかなければなりません。
以下のコマンドを実行してリポジトリを作成します。
今回は実験って事で、lessonsという名前にします。

$ knife solo init lessons
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...

コマンドを実行すると、カレントディレクトリに「lessons」というフォルダが作成されていると思います。
そこに今後レシピを作成していく事になります。

仮想マシンに環境を構築する

knife-soloを使って仮想マシンにChef環境をセットアップします。
Cygwinに「knife solo prepare SSH情報」としているすると、
Chefの実行に必要なツールやファイルが自動的にセットアップされます。

$ cd lessons
$ knife solo prepare chefssh
#もしくは下記のコマンドでも大丈夫です。
$ knife solo prepare root@192.168.33.21
Bootstrapping Chef...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15934  100 15934    0     0   2667      0  0:00:05  0:00:05 --:--:-- 45656
・・・中略

# vagrantディレクトリに移動
$ cd ../../vagrant/chef 
$ vagrant ssh
[vagrant@localhost ~]# chef-solo --version
Chef: 11.12.4

おーwこれにはちょっと感動w

初めてのクックブック

それでは早速クックブックを作成していきます。
まずは、先ほど作成された「lessons」に移動して、以下のコマンドを実行します。

$ knife cookbook create hello -o site-cookbooks/
** Creating cookbook hello
** Creating README for cookbook: hello
** Creating CHANGELOG for cookbook: hello
** Creating metadata for cookbook: hello

取り合えず、プログラマーの入門であるhello worldと表示するだけのshellを走らせるだけの
cookbookを作成します。
また、レポジトリ内にあるlessons/cookbooksとlessons/site-cookbooksの違いですが、
前者はダウンロードしてきたサードパーティのcookbooksを、後者には自分で作成したcookbooksを入れるという
お作法があるようです。

さて、クックブックを作成したので、次にNodeの設定を行います。
Nodeを確認すると、「chefssh.json」というファイルが存在しています。
そこに、以下のように編集すると、「hello」レシピをchefsshに対して実行するようになります。

{
  "run_list":[
     "recipe[hello]"
  ]
}

次に、hellow worldを表示させる為に、レシピを作成していきます。
クックブックを作成すると、自動的に色んなフォルダが作成されます。
その際、「/lessons/site-cookbooks/hello/recipes/default.rb」というファイルも作成され、
ここに実行内容を記述していくことになります。

#
# Cookbook Name:: hello
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
log "Hello world"

仮想サーバーへ実行してみよう!

2つのファイルを修正したら、以下のコマンドを実行して、hello worldと表示してくれれば成功です。

$ knife solo cook chefssh
Running Chef on chefssh...
Checking Chef version...
・・中略
Recipe: hello::default
  * log[Hello world] action write

おおー!表示されました!w
ちょっとテンションあがるw

って感じでレシピ作成して、Nodeに反映させていくっていう流れですね。
Vimのインストールや、Apacheのインストールなど、
色んなことを設定しておきたいって思いますね。
長くなってしまいそうなので、今回はこのへんで終わりにして、
次回以降、色んな設定をやっていきたいと思います。


使用環境