我已经不再是厨师的新手了,尽管不是专家。使用开源厨师,我设置了一个单一厨师服务器,这将包含我公司的所有食谱,旨在将我们的产品应用程序安装在虚拟机上运行基本操作系统,比如RHEL 5.10。我在版本控制中隔离了cookbook文件,但是当我在ONE Chef服务器中将它们汇集时,如何隔离它们呢?以下是我的挑战:
这是一个简单的工作流程,将我的ActiveMQ扩展到上面提到
我知道这可能是一个加载的帖子。有没有更好的论坛?有人能指出我的情景部分完成的链接吗?感谢。
答案 0 :(得分:3)
大规模运行厨师时,有三种方法可以隔离用户之间的配置。
我希望看到更多的讨论或来自大规模经营厨师的用户的出版物。我们中的一些人需要支持不使用厨师的开发团队,并且不能使用一个适合所有服务器设置的开发人员。
在实践中,我发现企业厨师"组织"在功能上与运行单独的服务器相同。您仍需要将烹饪书,角色,数据包分别加载到每个菜单中。
我认为这种方法易于理解,但维护起来很复杂。厨师服务器/组织的每个实例都需要自己的厨师仓库,访问密钥和Jenkins加载工作。
使用厨师环境更难理解。一旦正确理解,我认为它实施起来更简单。 Berkshelf是让一切成为可能的工具。
首先,不要被厨师文档误导。他们提供的环境示例具有全球性:
这给人的印象是所有生产应用程序都会共享同一套烹饪书。一旦应用程序的数量开始增加,您就会遇到相互冲突的运行时间的麻烦。 Berkshelf v2.0在这里真的很糟糕......经常加载不一致的食谱套装,完全没有警告: - (
所以.. Berkshelf v3.0拯救和Jamie Winsor的博客上发布的菜谱模式:
环境菜谱模式为每个应用程序实例提供了一个厨师环境。
" Berkshelf.lock"已提交并保存到Environment cookbook版本中,用于加载特定环境的cookbook依赖项。这种模式的一个例子是berkshelf-api安装。
我的灯泡然后我在haproxy cookbook
中找到了以下厨师搜索条件pool_members = search("node", "role:#{node['haproxy']['app_server_role']} AND chef_environment:#{node.chef_environment}") || []
负载平衡池的成员共享一个共同的角色和环境。所以......角色是特定于应用程序实例的,或者是环境!
答案 1 :(得分:1)
正如评论中所提到的,这通常通过使用库和包装器烹饪书来解决。您将拥有共享的activemq
食谱(可能来自社区站点或内部编写),它为ActiveMQ提供了核心配置步骤。对于每个环境,您将拥有一个食谱/食谱,如prod_a::activemq
,或者为该环境设置所需的任何特定属性或其他内容,然后使用include_recipe
或activemq
食谱中的LWRP 。您可以找到有关此环境菜谱模式on Jamie's blog的更多信息。如果您想要一个环境-y配置的中间层,您还可以查看poise-appenv。您可以使用knife-solve始终查看给定节点上每个菜谱的哪些版本处于活动状态。