Chef メモ


これは不完全な記事で、メモとして書いたものです。

概要

Chef は Configuration Management Tool ってやつで、サーバーのセットアップとかを上手い具合にやってくれるという触れ込み。前から使ってみたかったやつ。

Chef とか使わないならシェルスクリプトで「これまるっと実行すればサーバーのセットアップできるよ」みたいな感じにすることが多いんだけど、これって「サーバーの設定を修正する度にシェルスクリプトを修正する必要がある」のと「一つのサーバーの設定を変更したら兄弟サーバーの設定も同じように変更する必要がある」のとがめんどくさいので、複数台運用とかしだすと破綻しちゃう。なので、「サーバーの設定を上手く管理してくれるインフラ」がほしい感じになる。

Chef についてのドキュメント類は https://learn.chef.io に揃っているので、最終的にはここを参照するのが良いと思う。けど灰色ですごい読みにくかった。文字も小さいし。

Chef の構造

Chef は基本的には「各ノード(実体は何かのサーバー)の構成情報を管理する Chef サーバー」と、「設定を管理・適用される側のノード(データベースとかアプリケーションサーバーとか)」に分かれていて、さらに Chef を取り扱う主体として Workstation ってのがいる。Workstation ってのは、普通は管理者が実際に使っているローカルマシンになる。

knife というコマンドがあって、基本的にはこれをインストールすることで Workstation になるみたい。ただ、knife には Chef Server の設定を入れておかないといけないので、ただコマンドがあれば使えるって感じではない。(試した時は WebUI 経由でダウンロードした zip ファイルを knife の設定を置くディレクトリに展開した)

通信周り

Chef Server はインストールすると自分で HTTP サーバーになって、勝手に HTTPS 通信を待ち受ける。しかも証明書を自作してくれる。Workstation や Chef Client(ノード)は、ssh 経由で証明書をダウンロードして、サーバーとの通信を暗号化しているらしい。(らしい、というのは細かく調べておらず、適当に試してみた結果をもとに推測しているため。本当かどうかはわからないので各自調べてね)

で、なんで HTTPS なのかっていうと、まあ、オプションではあるみたいなんだけど、WebUI があって、ブラウザ経由でいろいろ捜査できるため。無いならないでも良いんじゃないかな? 試してないのでわからない。

Ruby

Chef は中身に Ruby を使っているので、設定ファイルは普通、Ruby で書くことになる。

クックブック・レシピ

用語が使い分けられているけど、違いがよくわからない。大雑把にいえば「ノードに適用する設定を記述したやつ」って感じ。

ホスト名

Chef Server は Workstation や Chef Client(ノード)からの通信を受け付けるので、名前解決できたほうが良い。(というか、できないとダメっぽい書かれ方してた)

で、DNSレコード設定してもいいと思うけど、/etc/hosts に記述する方法も書かれていた。ホスト名をグローバルに使用することはないと思うので、こちらのほうが良いかもしれない。アクセス元は限られているわけだし。

Chef Server

CentOS 7 でインストールした。

  • Chef server の rpm をダウンロードしてインストール。
  • なんか初期化スクリプト走らせる。
  • WebUI 使う時はそれ用のツールも入れる。
  • ユーザーを作成する。
  • Organization を作成する。Webui 経由でもいい。Webui は HTTPS 使うので、firewall-cmd --zone=public --add-service=https --permanent; firewall-cmd --reload する。
  • 細かいことは https://docs.chef.io/install_server.html#standalone を見る。
  • rpm のダウンロードURLをコピーして curl しても 0 byte のレスポンスだったので、ローカルマシンに落として scp した。めんどかった。
  • Chef Server の Organization ごとに Start Kit ってのができて、WebUI 経由でこれを DL した。中には Organization とユーザーの秘密鍵が含まれている。この辺いろいろ謎。

Chef Client

  • https://docs.chef.io/install_bootstrap.html これみる。
  • knife bootstrap コマンドを Workstation 上で実行する。この時、knife コマンドは SSH の接続情報を受け付ける。 knife がノードにSSH接続して、Chef Server に対してノードの登録処理を行なう。Chef Client 上で Chef Server と通信するため、Chef Client が Chef Server の名前を解決できる必要がある。/etc/hosts に書いたりとかする。
  • knife が Chef Client 上にも必要なので、先にインストールする感じみたい。その辺りは https://docs.chef.io/install_omnibus.html を参照。
  • "Install via URL" と "Bootstrap" がドキュメント上で並列している見出しなのが謎。順序的には "Bootstrap" だけでもインストールできそうなので、もしかしたら Chef Client に knife をインストールする必要はない?

Workstation

MacOS X 向けのインストーラあるのでそれを使ったらいけた。