【问题标题】:Can I install two chef clients on a Linux server so that both two clients can manage the linux server?我可以在 Linux 服务器上安装两个 Chef 客户端,以便两个客户端都可以管理 linux 服务器吗?
【发布时间】:2023-11-20 11:50:01
【问题描述】:

我想在 linux 服务器上安装一个 chef 客户端,通过执行 shell 命令来管理服务器。虽然运行列表中的一个配方中有重新启动命令,但其余配方在服务器重新启动后不会继续执行。由于我还没有找到解决它的方法,我想知道我是否可以在 Linux 服务器上安装两个厨师客户端并执行不同的食谱,以便在服务器重启后其余的食谱可以继续执行。任何人都可以帮忙吗?谢谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow!不幸的是,这些问题是针对 Stack Oveflow 的 off-topic,因此应该在此处提问:SuperUser 或此处:Unix and Linux

标签: linux chef-infra


【解决方案1】:

将两个客户端放在一个设备上,或者将两个配置管理工具放在同一个盒子上通常是个坏主意。即使你能做到这一点,认知负荷也会因为确定何时更新而增加,这会让你容易犯错误。

正确的方法是在你的食谱中加入重启标志;在调用重新启动资源之前,您设置一个标志(可以是文件内容甚至存在、环境变量或任何数量的其他持久数据对象)以指示执行了重新启动。如果它是周期性的,您可以改为查看上次使用其atime 属性访问文件的时间。然后,您围绕需要重新启动的步骤执行逻辑,如果设置了标志 no-restart 标志,则防止重新启动,或者如果您设置了重新启动标志,则触发它,您可以选择。这样一来,您将有一个厨师收敛于一个跳过部分运行列表的重新启动,然后另一个跳过不必要的重新启动过程的运行。

另一个不错的选择是更多地关注您如何订购资源。如果重新启动在您的最后一个运行列表项中并以:delayed 时间通知,那么它将是最后一个运行资源,这意味着您的其余配方已经收敛。如果您每次都需要完全收敛,那么这是您应该接受的选择。

选项 1 是一个以 Ruby 为中心的解决方案,需要您从事开发工作。选项 2 是更纯粹的 Chef,其中添加了一些 Ruby,您可以在此处阅读文档中的通知资源:https://docs.chef.io/resource_common.html#notifications

有一个选项 3,您可以在厨师运行期间更改运行列表,您可以使用它来删除需要重新启动的食谱,但我认为您会从选项 1 或 2 中受益更多。

【讨论】:

    最近更新 更多