(O+P)ut

(O+P)ut

(O+P)ut = OutPut

【入門】Chef-clientについて

f:id:mtiit:20181010134340p:plain
Chefは構成管理を行うツールで、Rubyのライブラリで構成されています。
本記事では、Chef-client(Chefクライアント)に着目して概要を説明したいと思います。

Chef-client とは?

以下の図のように、サーバクライアント構成を採用する場合は、
1つのChef-Server(Chefサーバ)に対して複数のChef-clientが紐づきます。
f:id:mtiit:20181011135728p:plain
Chef-clientとは一言で言えば、Chef-Serverが管理しているすべてのノード(≒サーバ)で実行されるエージェントです。ノードにインストールすることで使えます。

Chef clientの動き

Chef-clientが実行されると、サーバの状態をあるべき姿にするべく、色々な機構が走ります。
f:id:mtiit:20181011160628p:plain
Chef Client Overview — Chef Docs より図を抜粋

これらを簡単に解説します。

1. 構成データを取得

Chef-clientは設定ファイルとしてノードに配置されているclient.rbファイルからプロセス構成データを取得し、Ohaiを用いてノード構成情報を取得します。

2. Chef-serverとの接続/認証

Chef-serverChef-client公開鍵暗号にて認証を行います。

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の管理なども行いますが、細かいので割愛します