5

Chef は、レシピの変更を検出し、chef クライアントを使用して変更をインストールするという意味でプル ベースであることを理解しています。シェフを使用して EC2 インスタンスを起動しますが、シェフ クライアントは 30 分ごとにデーモンとして実行され、すべてのレシピを再度実行するため、一部のサービスに不要な変更が生じます。これを変更して、シェフクライアントをオンデマンドで実行するためのオプションを知りたいです。

以下は、私がこれまでに考えたオプションです。

  1. デーモンが頻繁に実行されないように、chef-client クックブックの間隔時間を非常に長い時間に変更します。
  2. EC2 インスタンスがデプロイされた後、chef デーモン ssh またはもしかしたらchef-recipe を強制終了します。

また、chef-client は週単位でログ ローテーションがスケジュールされていると思います。これにより、chef-client が再び再起動されます。このプルベースの動作を回避する方法についてのアイデアはありますか?

4

3 に答える 3

10

初めに:

シェフのレシピは、シェフが何回実行されても、ノードを 1 と同じ構成に設定する必要があります。また、自分でサービスを再起動しないでください。この動作は、構成ファイルが変更された場合、構成ファイルによって通知される必要があります。例えば:

service 'apache2' do
  action [:enable, :start]
end

template '/etc/apache2/httpd.conf' do
  action :create
  [...]
  notifies, :restart, 'service[apache2]' #this notification will launch, only if the file has changed
end

を実行して、chef-client デーモンを無効にすることもできますchef-client --once。このようにして、chef はノードをプロビジョニングし、cron から self を削除します。したがって、将来的にはオンデマンドで手動でのみ実行されます。

しかし、より大きな問題は、実際には、シェフクライアントの実行により、実行のたびに一部のサービスが変更されることです。最初に解決する必要があります。

于 2013-02-16T10:11:31.850 に答える
0

Chef データバッグから構成ファイルを作成している場合、検索結果は異なる実行では同じ順序で返されないため、検索結果をソートする必要があります。結果をソートしないと、明確な理由もなく頻繁に再起動する Apache サービスが発生します。

シェフクライアントの実行が同じデータでべき等であることを確認してください。これを十分に強調することはできません。

于 2016-06-25T19:52:15.767 に答える
0

根本的な問題の修正について Draco が言ったことには同意しますが、chef-client の実行を 30 分ごとに停止したい場合は、実行リストからchef-client::service レシピを削除するだけでよいはずです。シェフクライアントの README を参照してください。

于 2013-02-25T19:50:46.253 に答える