Chefは構成管理を行うツールで、Rubyのライブラリで構成されています。
本記事では、Chef-client(Chefクライアント)に着目して概要を説明したいと思います。
Chef-client とは?
以下の図のように、サーバクライアント構成を採用する場合は、
1つのChef-Server(Chefサーバ)に対して複数のChef-clientが紐づきます。
Chef-clientとは一言で言えば、Chef-Serverが管理しているすべてのノード(≒サーバ)で実行されるエージェントです。ノードにインストールすることで使えます。
Chef clientの動き
Chef-clientが実行されると、サーバの状態をあるべき姿にするべく、色々な機構が走ります。
Chef Client Overview — Chef Docs より図を抜粋
これらを簡単に解説します。
1. 構成データを取得
Chef-clientは設定ファイルとしてノードに配置されているclient.rbファイルからプロセス構成データを取得し、Ohaiを用いてノード構成情報を取得します。
2. Chef-serverとの接続/認証
Chef-serverとChef-clientは公開鍵暗号にて認証を行います。
# head /etc/chef/client.pem -----BEGIN RSA PRIVATE KEY----- ....
3. Cookbookを同期
Cookbook*1とはreceipeやrpm、その他必要なファイルをまとめた情報群です。ちなみに、receipeとはChef独自のDSLで記述されたRubyファイルで、以下のような内容が記載されています。
file "/tmp/sample" do owner "user01" group "group01" mode "0644" action :create end
Chef-clientは、必要となるCookbookのうち、前回の同期時から差分が発生しているものをChef-serverからダウンロードします。
4. ノードを収束
Chef-clientは、収集された情報に基づき必要なアクションを実行します。
5. 次回の実行を待つ
Chef-clientは常時実行しているわけではないです。例えば1日に1回など、実行を要求するまでは待機します。
以上、Chefの簡単な動き方についてイメージを掴むための入門記事でした。
*1:Cookbook内のRecipeおよびNodeで利用する属性値を定義するAttributeの管理なども行いますが、細かいので割愛します