【问题标题】:Chef daemon running every 30 minutesChef 守护进程每 30 分钟运行一次
【发布时间】:2020-11-10 05:40:56
【问题描述】:

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

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

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

此外,我相信 chef-client 每周安排一次日志轮换,这将再次重新启动 chef-client。 关于如何避免这种基于拉的行为的任何想法?

【问题讨论】:

  • 该节点的空 run_list。让 chef-client 每 30 分钟运行一次,并且“按需” $knife node your_node 编辑和更新 run_list。

标签: chef-infra


【解决方案1】:

首先:

无论厨师运行多少次,您的厨师食谱都应将您的节点设置为 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 --once 来禁用 chef-client 守护进程。这样,厨师将配置节点并将 self 从 cron 中删除。因此,将来它将仅按需手动运行。

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

【讨论】:

  • 谢谢德拉科。你就是那个更大的问题是什么,需要解决。但在解决之前,我们需要禁用 EC2 实例上的客户端。使用 --once 选项将需要更改配方中的所有模板?
  • 我的意思是上一条评论中的食谱。
  • 它不需要对食谱进行任何更改。只需登录到您的 EC2 节点并运行 sudo chef-client --once。或sudo service chef-client stop。或者创建一个停止服务的配方:service 'chef-client' { action [:stop, :disable] }。有很多可能性。
  • 我不明白--once 选项。 chef-client 使用--daemonize 选项进行守护,但对我来说将它与--once 结合起来与删除它们相同。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    确保您的 chef-client 运行对于相同的数据是幂等的。怎么强调都不过分。

    【讨论】:

      最近更新 更多