![具有外部配置依赖项的厨师食谱](https://linux22.com/image/699690/%E5%85%B7%E6%9C%89%E5%A4%96%E9%83%A8%E9%85%8D%E7%BD%AE%E4%BE%9D%E8%B5%96%E9%A1%B9%E7%9A%84%E5%8E%A8%E5%B8%88%E9%A3%9F%E8%B0%B1.png)
在我见过的所有 Chef 示例中,自动扩展工作都非常简单 - 您先配置数据库主机之类的东西,然后配置 Web 服务器。您可以根据需要创建任意数量的 Web 服务器 - 所有服务器都将使用相同的数据库主机(无需进行任何更改)。
但是,如果我的配方/节点配置手册需要更改其他后端节点的配置怎么办?我该如何使用 Chef 来实现?例如,我有现有的 BGP 路由反射器 (bird),我配置了新的 bird 边缘节点,并且作为依赖项,我必须生成新的 iBGP 对等配置并在 BGP 路由反射器节点上重新读取配置文件。
最佳做法是什么?我应该使用 chef-push-jobs 将更改推送到 BGP 路由反射器节点吗?
答案1
Chef 内部并没有专门的系统。从广义上讲,您所说的是“服务发现”,即一项服务想要查找网络上另一项服务的信息。Chef 通过 API 提供了一个简单的 SD 系统search()
,但也有专用的 SD 系统,如 Consul、Eureka 和 mDNS/Autoconf。
一旦您以可以访问的方式获得了服务数据,下一个问题就是如何处理通过网络传播的更新。Chef 本身通常使用守护进程模式服务,每 X 秒运行一次聚合。这意味着如果您将 X 设置为 60,则 119 秒后所有内容都会更新。如果您想要更快的速度,那么可以选择将通知从一个节点推送到另一个节点,或者使用中央编排系统推送原始更改,然后处理级联更新。Chef Push Jobs 理论上在这里是可用的,但我并不推荐它。对于快速配置和 SD 更新,Consul + Consul Templates 之类的东西可能是您想要的,或者只是让 Chef 的间隔运行来处理那些变化不频繁的事情。