2018年版 chef-solo&knife-soloでサーバ構成管理入門

TL; DR

Ansibleを使おう(´・_・`)

やること

chef-solo&knife-soloでcentosサーバにhttpdを用意して起動し、welcomeページを見るまでやります。

参考資料

参考書

chef実践入門

前提知識

ものすごくざっくり書きますが悪しからず…

chefとは?

  • https://www.chef.io/
  • Ansibleみたいなサーバー環境構築・構成管理ツール。
  • プロビジョニングを実行するエージェント(chef-server)と、プロビジョニングされるマシン(chef-client)に別れます。
  • 個人で使うには手に余りすぎるし学習コスト高くて最近は敬遠されがち。

chef-soloとは?

  • https://docs.chef.io/chef_solo.html
  • エージェントが無くてもプロビジョニングしたい!というアナタの夢を叶えるツール。
  • とはいえ、プロビジョニングしたい対象マシンにインスコしてsshで入り、対象マシン上で実行する必要があってまだめんどくさい。

knife-soloとは?

  • お手元のPCからでもchef-soloを実行したい!というアナタの夢を叶えるツール。
  • 入手方法はかんたん、gem install knife-solo するだけ。

knife-soloを使ってみよう

Dev Kitのインストール

 $ chef -v
 # Chef Development Kit Version: 2.4.17
 # chef-client version: 13.6.4
 # delivery version: master (73ebb72a6c42b3d2ff5370c476be800fee7e5427)
 # berks version: 6.3.1
 # kitchen version: 1.19.2
 # inspec version: 1.45.13
  • ※昔はchefが無くてもchef-soloだけでknife-soloを実行できたぽいが、今はchefが無いとcookbookを作れないっぽいです。

ディレクトリの準備

  # knife-testというリポジトリにします
  mkdir knife-test && cd knife-test

  # gemfile ほしい
  bundle init

  # gemfileに "knife-solo" たす
  echo 'gem "knife-solo"' >> Gemfile

  # ./vendor/bundle以下にインストールして./binに実行ラッパーを置く
  bundle install --path vendor/bundle --binstubs

  # かくにん
  bin/knife -v
  # Chef: 13.8.0

これでお手元からknife soloが実行できるようになります。

VMの準備

  • VagrantやDockerなどでプロビジョニング対象マシンを用意しましょう。
  • 自分は knife-test というホスト名のcentos7 Vagrant boxを使います。

knife-soloを使ってVMにchef-soloをインストールさせる

 # cookbookのひな型を作る
 bin/knife solo init

 # knife-testにchef-soloをインスコ
 bin/knife solo prepare knife-test

chefでcookbookを作る

  • chefコマンドでcookbookを作ります。
  • cookbookはAnsibleでいうplaybookで、あるひとまとまりのサーバ状態を定義できます。
 # chefで"test-book"というcookbookを作る
 cd site-cookbooks
 chef generate cookbook test-book
 cd ..

入れたいソフトウェアを書く

  • httpdを入れて起動させるコードを書きます。
  • chefのDSLを調べたりしながら…
  • こんな感じでcookbookにサーバの状態定義をしていくことを「レシピを書く」と言ったりします
site-cookbooks/test-book/recipes/default.rb
 package "httpd" do
   action :install
 end

 service "httpd" do
   action [ :enable, :start ]
 end

レシピを加える

  • 自分でrun_listにレシピを書き加えます。
nodes/knife-test.json
 {
   "run_list": [
     "recipe[test-book]"
   ],
   "automatic": {
     "ipaddress": "knife-test"
   }
 }

knife-soloでchef-soloを実行させる

  • やっと実行まできました。
  • 実行してVMにapacheをインストール&起動させましょう
sh
 # 実行
 bin/knife solo cook knife-test

 # (中略)
 # Converging 2 resources
 # Recipe: test-book::default
 # * yum_package[httpd] action install
 #   - install version 2.4.6-67.el7.centos.6 of package httpd
 # * service[httpd] action enable
 #   - enable service service[httpd]
 # * service[httpd] action start
 #   - start service service[httpd]

確認(welcomeページを見る)

  • ブラウザからVMに割り当てたIPにアクセスしてみます

apacheが動いていることが確認できました。

おわりに

chef-soloはコマンドでひな形を作ってくれるのでどんなプロダクトでも構成が同じようになる(はず)という利点もありますが、小さなサーバ構成でも大きめのひな形が必要だったり、変数がどこで宣言されているのかわかりづらかったり、気軽に始めづらかったり……と微妙に使いづらいところがあります。

さらに、chef-soloではなくchefを使うのはプロビジョニングを行うエージェントとなるサーバが必要で大掛かりになってしまうことや、chef-solo&knife-soloでできることはAnsibleで(たぶんだいたい)できてしまうので、最近はAnsibleの方が人気なのが頷けるなぁと思いました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.