5

我了解 Chef 是基于拉取的,因为它检测到食谱中的任何更改并使用 Chef 客户端安装更改。我们使用 chef 来启动 EC2 实例,但 chef-client 作为守护程序每 30 分钟运行一次,并再次运行所有食谱,从而对某些服务造成不必要的更改。我想知道有哪些选项可以改变这一点并按需运行厨师客户端。

以下是我到目前为止想到的选项,

  1. 将 chef-client 食谱上的间隔时间更改为非常高的时间,以便守护程序不会经常运行。
  2. 部署 EC2 实例后,杀死 chef daemon ssh 甚至可能是 chef-recipe。

另外我相信厨师客户端每周安排一次日志轮换,这将再次重新启动厨师客户端。关于如何避免这种基于拉的行为的任何想法?

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。这样,厨师将配置节点并将 self 从 cron 中删除。因此,将来它将仅按需手动运行。

但是您更大的问题实际上是您的主厨客户端运行会导致每次运行都会更改您的某些服务。你应该先解决它。

于 2013-02-16T10:11:31.850 回答
0

我同意 Draco 关于解决潜在问题的说法,但如果你想阻止 chef-client 每 30 分钟运行一次,你应该能够从你的运行列表中删除 chef-client::service 配方。请参阅chef-client README

于 2013-02-25T19:50:46.253 回答
0

如果您正在从 Chef 数据包构建配置文件,您将需要对搜索结果进行排序,因为这些结果在不同的运行中不会以相同的顺序返回。如果您不对结果进行排序,您的 Apache 服务将无缘无故地频繁重启。

确保您的 chef-client 运行对于相同的数据是幂等的。不能强调这一点。

于 2016-06-25T19:52:15.767 回答