我知道Chef是基于pull的,因为它检测到配方中的任何更改并使用chef客户端来安装更改。 我们使用chef来调出EC2实例,但是每30分钟作为守护进程运行的chef-client会再次运行所有的配方,导致对某些服务进行不必要的更改。 我想知道有哪些选项可以改变这一点,并按需运行厨师 - 客户。
以下是我到目前为止所考虑的选项,
此外,我相信厨师 - 客户每周都会安排日志轮换,这将再次重启厨师 - 客户端。 关于如何避免这种基于拉动的行为的任何想法?
答案 0 :(得分: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 --once
来禁用chef-client守护程序。这样厨师将配置节点并将从cron中删除self。因此,将来它只能按需手动运行。
但是你的更大问题实际上是你的厨师 - 客户端运行会导致每次运行时对你的一些服务进行更改。你应该先解决它。
答案 1 :(得分:0)
我同意Draco关于解决潜在问题的说法,但是如果你想阻止厨师 - 客户每30分钟运行一次,你应该能够从你的运行列表中删除chef-client :: service食谱。请参阅chef-client README。
答案 2 :(得分:0)
如果您正在使用Chef databags构建配置文件,则需要对搜索结果进行排序,因为这些不将在不同的运行中以相同的顺序返回。如果您不对结果进行排序,那么您将拥有Apache服务,这些服务在没有明显原因的情况下经常重启。
确保您的厨师 - 客户端运行具有相同数据的幂等。不能强调这一点。