Chef infra 如何管理一个供所有人使用的厨师服务器

Chef infra 如何管理一个供所有人使用的厨师服务器,chef-infra,Chef Infra,我已经不再是厨师的新手了,尽管无论如何我都不是专家。使用开源Chef,我正在设置一个单一Chef服务器,该服务器将包含我公司的所有食谱,旨在将我们的产品应用程序安装在运行基本操作系统(如RHEL 5.10)的虚拟机上。我正在版本控制中隔离cookbook文件,但是当我将它们导入ONE chef服务器时,如何隔离它们?以下是我面临的挑战: 我的公司有不同的产品,比如ProdA,ProdB,ProdA和ProdB是完全不同的 尽管这两个产品可能共享相同的应用程序,但每个产品中应用程序的实现是不同的

我已经不再是厨师的新手了,尽管无论如何我都不是专家。使用开源Chef,我正在设置一个单一Chef服务器,该服务器将包含我公司的所有食谱,旨在将我们的产品应用程序安装在运行基本操作系统(如RHEL 5.10)的虚拟机上。我正在版本控制中隔离cookbook文件,但是当我将它们导入ONE chef服务器时,如何隔离它们?以下是我面临的挑战:

  • 我的公司有不同的产品,比如ProdA,ProdB,ProdA和ProdB是完全不同的
  • 尽管这两个产品可能共享相同的应用程序,但每个产品中应用程序的实现是不同的。例如,尽管我在两种产品上都安装了ActiveMQ,但在每种产品上安装的ActiveMQ是不同的
  • 此外,我需要能够安装,在一时兴起,不同版本的ProdA软件的虚拟机上预定的ProdA。ProdB也一样,适用于计划用于ProdB的VM。我永远不会在为ProdB设计的虚拟机上安装ProdA软件,反之亦然
  • 一套特定的食谱可能适用于ProdA软件的v1.0版,而另一套可能适用于ProdA软件的v2.0版
  • 一组开发人员可能同时在编写ProdA cookbooks;一组不同的开发人员可能会编写ProdB cookbooks我想将每个开发人员的cookbook版本分开
  • 我想将开发人员的食谱与QA或客户使用的食谱分开
这里是一个简单的工作流程,扩展了我上面提到的ActiveMQ

  • Dev1使用一本食谱在ProdA上安装ActiveMQ。Dev11还可以在一本食谱上工作,以便在ProdB上安装ActiveMQ。同样,尽管它们都是针对ActiveMQ的,但安装是不同的。我们如何将这两本ActiveMQ烹饪书分开,给它们起不同的名字——ProdA_ActiveMQ和ProdB_ActiveMQ这看起来太可怕了
  • Dev2想要调整Dev1的ProdA/ActiveMQ食谱,并在其本地环境中进行测试。现在Dev2想让其他dev尝试它,所以他将它上传到chef服务器。我们如何确保他不会破坏每个人的ActiveMQ安装
  • ProdA的1.0-1.4版使用ActiveMQ cookbook的0.1.0版,但ProdA的1.4-1.20版需要ActiveMQ的0.2.0版。我如何建模
  • 我正在为ProdA的2.0版开发一个功能。但是我的经理 告诉我在1.44版或我们的 产品。我怎样才能很快知道人们习惯了哪套食谱 安装ProdA的1.44版

我知道这可能是一个负载的职位。有更好的论坛吗?有人能给我指出一个链接,在那里我的场景已经完成了?谢谢。

如评论中所述,这通常通过使用图书馆和包装烹饪书来解决。您将拥有一本共享的
activemq
cookbook(可能来自社区网站或由内部编写),它为activemq提供了一个核心配置步骤。对于每个环境,您都会有一个类似于
prod_a::activemq
的食谱/配方,或者设置该环境所需的任何特定属性或其他内容,然后使用
include_recipe
activemq
食谱中的LWRP。您可以找到有关此环境烹饪书模式的更多信息。如果您想要一个中间层environment-yconfig,您也可以进行检查。您可以使用始终查看给定节点上每个cookbook的哪些版本处于活动状态。

如注释中所述,这通常通过使用library和wrapper cookbook来解决。您将拥有一本共享的
activemq
cookbook(可能来自社区网站或由内部编写),它为activemq提供了一个核心配置步骤。对于每个环境,您都会有一个类似于
prod_a::activemq
的食谱/配方,或者设置该环境所需的任何特定属性或其他内容,然后使用
include_recipe
activemq
食谱中的LWRP。您可以找到有关此环境烹饪书模式的更多信息。如果您想要一个中间层environment-yconfig,您也可以进行检查。您可以使用始终查看给定节点上每个cookbook的哪些版本处于活动状态。

在大规模运行chef时,有三种方法可以隔离用户之间的配置

  • 使用enterprise chef并为功能组用户建立一个chef“组织”
  • 使用开源chef server并为每个功能组的用户设置一个服务器
  • 在chef server的单个实例中为每个功能组创建chef“环境”
  • 我希望看到更多的讨论或出版物从用户操作厨师在规模。我们中的一些人需要支持那些不使用chef的开发团队,并且不能使用“一刀切”的服务器设置

    备选方案1+2 在实践中,我发现企业厨师“组织”在功能上与运行单独的服务器相同。您仍然需要将烹饪书、角色、数据包分别加载到每个角色中

    我认为这种方法简单易懂,但维护起来很复杂。chef服务器/组织的每个实例都需要自己的chef repo、访问密钥和Jenkins加载作业

    选择3 使用chef环境更难理解。一旦正确理解了它,我认为它更容易实现。是使一切成为可能的工具

    首先,不要被厨师的文件误导。他们给出的环境示例是全球性的:

    • 发展
    • 试验
    • 生产
    这给人的印象是,所有生产应用程序都将共享同一套食谱。一旦应用程序的数量开始增加,您就会因运行时间冲突而陷入很多麻烦。Berkshelf v2.0在这里真的很烂。。。它经常装载货物
    pool_members = search("node", "role:#{node['haproxy']['app_server_role']} AND chef_environment:#{node.chef_environment}") || []