Chef infra Chef守护进程每30分钟运行一次

Chef infra Chef守护进程每30分钟运行一次,chef-infra,Chef Infra,我知道Chef是基于pull的,因为它检测配方中的任何更改,并使用Chef客户端安装更改。 我们使用chef来启动EC2实例,但是chef客户端作为守护进程每30分钟运行一次,并再次运行所有的菜谱,从而对某些服务造成不必要的更改。 我想知道有哪些选项可以改变这一点,并按需运行chef客户端 以下是我到目前为止想到的一些选择 将chef client cookbook上的间隔时间更改为非常高的时间,以便守护进程不会经常运行 部署EC2实例后,杀死chef守护进程ssh,甚至可能杀死chef配方 另

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

以下是我到目前为止想到的一些选择

  • 将chef client cookbook上的间隔时间更改为非常高的时间,以便守护进程不会经常运行
  • 部署EC2实例后,杀死chef守护进程ssh,甚至可能杀死chef配方
  • 另外,我相信chef客户端每周都会安排日志轮换,这将再次重新启动chef客户端。 关于如何避免这种基于拉的行为有什么想法吗

    首先:

    无论chef运行多少次,您的chef recipes都应该在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守护程序。这样,chef将配置节点并从cron中删除self。因此,在未来,它将仅在需要时手动运行


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

    我同意Draco关于修复潜在问题的说法,但是如果您想阻止chef client每30分钟运行一次,您应该能够从运行列表中删除chef client::service recipe。请参阅。

    如果您是从Chef数据包构建配置文件,则需要对搜索结果进行排序,因为这些结果不会在不同的运行中以相同的顺序返回。如果不对结果进行排序,则会出现Apache服务,这些服务会在没有明显原因的情况下频繁重启


    确保您的chef客户端运行具有相同数据的幂等性。非常强调这一点。

    谢谢Draco。你知道更大的问题是什么,它需要解决。但在解决这个问题之前,我们需要在EC2实例上禁用客户端。使用--once选项需要更改配方中的所有模板?我在前面的评论中指的是烹饪书。它不需要更改烹饪书。只需登录到EC2节点并运行
    sudochef客户端--一次
    。或
    sudo服务厨师客户端站
    。或者创建停止服务的配方:
    服务“厨师客户端”{action[:stop,:disable]}
    。有很多可能性。我不理解
    --once
    选项。chef client使用
    --daemonize
    选项进行后台监控,但对我来说,将其与
    --once
    组合使用与删除两者相同。清空该节点的运行列表。让chef client每30分钟运行一次,不做任何事情,并“按需”编辑和更新运行列表。