如何在 Chef 中组织属性以支持环境中多个隔离的、几乎相同的服务器集群?
我的组织(我想很多组织也都类似)有多个暂存实例。不同的暂存实例需要使用不同的数据库连接和主机名以及诸如此类的小东西,但除此之外,它们是相同的。在一个暂存实例 = 1 个服务器的世界中,您可以轻松地将暂存特定属性放入名为 staging 的 Chef 环境中,并且可以在节点本身上定义实例特定属性。
但是当每个暂存实例都不止一台服务器时会发生什么?假设我们在不同的节点上有几个不同的服务,它们相互通信并形成一个应用程序的实例。
我无法为每个实例创建一个环境,因为一个节点只能位于一个环境中,而且我不想复制它们之间的所有共享属性。同样,我也不想在每个节点上复制所有实例/集群特定的属性。
我是否应该为每个实例创建一个角色,该角色仅具有实例/集群特定配置?我是否应该为每个实例创建一个说明书?
我一直在浏览博客文章和其他内容,但没有发现任何解决这个问题的内容。
答案1
这里没有对错之分。使用不同的角色(您可以分配多个)可能是更简单的选择之一。
如果您想在临时环境中测试新的食谱版本,然后再将其投入生产,环境食谱模式将为您提供实现这一目标的方法。
但是由于 chef 只是代码,您几乎可以用代码做任何事情,例如,您还可以使用主机名定义环境(不是按照 chef 的术语),然后 chef 读出并使用为这个环境指定的属性集(在 chef 中,您可以在环境、角色、食谱中指定这些集合……)。