Chef-Zero勉強記録 その0 用語の整理
はじめに
先日、新たに練習用Railsアプリを作りました。本番環境へのデプロイにCapistranoを使おうとしました。失敗しました。
どのあたりでエラーが出ているのかもわからず、というか、そもそも設定ファイルの構成もよくわかっておらず、色々なWebサイトやブログを見よう見まねで作っていたので、さもありなんという有様でした。
ちゃんとドキュメント読んでいちから理解しなければ。というわけで、まずはクリーンな環境を用意して試行錯誤することにしました。
そしてクリーンな環境を作るにあたり、まずはchefのお勉強から始めることにしました。回り道してる感もありますが、いずれ触りたいと思っていた技術でもあるので一石二鳥です。
長くなりそうですが、chef環境の構築段階から、やったこと・知ったことを書き留めていきます。
目標
- 単純な2台のVM間でchefを使った環境構築をできるようになる
- クックブック(?)とかレシピ(?)とかを書けるようになる
- ・・・まずはその辺りの用語も理解する
- Chef-ZeroとKnife-Zeroを扱えるようになります。なりたいです。
今回やること
- 基本的な用語の理解
まずはその0ということで、実際に手を動かすのは次回以降とします。
ただし後述のとおり、あまり理解できていない点が多々あります。
本当は今回の内容も含めて「その1」にするつもりだったのですが、用語の勉強部分が煩雑なうえに精度が低かったので分割した次第です。
今回は読まなくていい回です。
用語のお勉強
結局全然理解できていないのですが、備忘のためにまとめます。
(偶然この記事を読まれた方は、あまり参考にしないほうがいいと思います)
Chef Server? Chef Solo?
なにやらChefにも色々と種類があり、よくわかりませんでした。
こちらの記事を読んで、ざっくりと理解したのでざっくりとまとめます。
Chefの仲間たち
- Chef Solo:環境設定するサーバーにインストールされ、単体で動作可能
- 廃止予定(後述のChef-Zeroに統合)
- Chef Server:各サーバーの構成情報を一括管理するサーバーにインストールされる
- 一括管理される側のサーバー(クライアント)が存在する
- Chef-Zero:環境設定するサーバーにインストールされ、単体で動作可能
・・・これだとChef SoloとChef-Zeroってどう違うの?って感じですね。
詳しく調べていないのですが、先の記事によれば、Chef Soloは
Chef-ServerなしでノードにCookbookを適用します。Chef Serverとの互換性はなく別のプログラムとして存在しています。
なのに対して、Chef-Zeroは
Chef ServerなしでローカルサーバーにCookbookを適用します。Chef Serverの仕組みを使ってChef Clientがスタンドアロンで動作しています。
なので、内部的なプログラムとしては別物のようです。 *1
また、正確にはChef SoloがChef-Zeroに移行するというのは正確ではないという話もあり、Chef-ZeroではなくChef-ClientローカルモードというChef Serverの一要素に移行すると捉えるのが適当っぽいです。
https://vdr.jp/d/20150428.html
このあたりの話は、軽い気持ちでググるほどこんがらがって理解できなくなってきたので、もっと構成要素が簡単だった時代からの経緯を調べ直す必要がありそうです。
ただひとまずはChef-Zeroを動かせるようになるのが第一目標ということで、より広く深く知るのは、実践を交えながらにしていこうと思います。
Knifeの仲間たち
Chefとごっちゃになる概念としてKnifeがあります。
Knifeは、Chef SoloやChef-ZeroのようなスタンドアロンのChefに対して、Cookbook(構成情報)の適用をリモートの開発環境から行うものらしいです。
Chefの開発元が作っているわけではなく、ユーザーによって生み出された拡張ツールみたい。
Knifeには、
- Knife-Solo:Chef Solo用のKnife
- Knife-Zero:Chef-Zero用のKnife
があります。わかりやすい。
こちらは違いが明確(たぶんもっと色々違いはある)で、
- Knife-Solo:Cookbook開発環境からCookbook自体を転送し、実行させる
- Knife-Zero:Cookbook開発環境からCookbookは転送せずに変更のみを指示できる
このあたり、Chef-ZeroはChef Serverですね。
また、リモートでCookbookを適用されるマシンのことをNodeと呼ぶそうです。
前置きが長くなりましたが、次回からはようやく環境の準備に入っていきます。