【问题标题】:Configure chef zero server with existing chef server使用现有的厨师服务器配置厨师零服务器
【发布时间】:2023-05-16 16:16:05
【问题描述】:

我希望将 chef zero 与 vagrant 一起用于配置开发人员环境。这些开发人员参与应用程序开发,不参与维护厨师食谱。

我有一个厨师服务器,它充当所有厨师组件的存储库。是否可以使用此厨师服务器配置厨师零,以便开发人员可以利用角色和环境?

我可以使用 berkshelf 下载使用 chef_api 的说明书,但角色的运行列表和环境属性必须复制到 Vagrant 文件中。

这种方法的优点是开发人员可以通过更改 Vagrantfile 中的环境来复制 productionQA 环境。

【问题讨论】:

    标签: chef-infra vagrant chef-solo


    【解决方案1】:

    正如您所发现的,Berkshelf 是管理说明书的绝佳工具,但没有类似的工具可用于管理角色、环境和数据包等实体。这是有道理的,因为这些实体相当于特定于厨师特定实例的全局数据。

    有其他方法可以解决这个问题:

    1. 使用包含“角色食谱”的“应用程序”食谱,详细说明 所需的运行列表
    2. 导出所需的角色和环境并在 vagrant repo 中保留一份副本

    应用说明书模式

    您可以使用特殊“应用程序”食谱中的配方,而不是使用角色。每个配方都旨在捕获应用程序特定组件的运行列表:db、appserver、路由器等。

    例如“myapp::db”配方:

    include_recipe "mysql::server"
    include_recipe "database"
    include_recipe "myapp::_db_schema"
    

    还有“myapp::appserver”配方

    include_recipe "apache2"
    include_recipe "php"
    ..
    include_recipe "myapp::_appserver_setup1"
    include_recipe "myapp::_appserver_setup2"
    

    与角色相比,这种方法的主要优势在于能够对运行列表 (dev/test/prod) 的更改进行修订控制,并使用像 Berkshelf 这样的工具来控制厨师服务器的加载。

    从 Chef 服务器导出角色和环境

    如果您拥有管理员凭据,则可以轻松地从厨师服务器导出数据。见:

    http://docs.opscode.com/knife_download.html

    【讨论】:

    • 感谢您的回复。我的主要目标是在开发人员机器上复制生产、登台和 QA 环境。在我们的组织中,如果生产中出现错误,开发人员必须在他/她的机器中手动复制环境,并且该过程不标准化。如果我可以利用环境,从厨师服务器用于实际生产的角色,它将大大减少工作量。因此,我正在寻找使用厨师服务器引导/复制厨师零。
    • 我认为当系统中的食谱数量增加时,我的用例会变得相当复杂。从厨师服务器下载所有食谱并将其上传到厨师零服务器将非常耗时。如果我希望对此进行优化,我将不得不阅读角色的运行列表并使用 berkshelf 下载这些说明书及其依赖项。我想使用chef_client 是这里最简单的选择。
    • @Vaibhav Berkshelf 是一款旨在简化食谱管理的工具。它是一个可以进行修订控制的文件,并且可以与您用来复制生产系统的 Vagrantfile 一起分发。是的,加载 chef-zero 存在开销,但这被 Berkshelf 缓存文件的能力和与生产系统真正隔离的好处所抵消。每个人共享同一个厨师服务器会在开发人员之间建立紧密的耦合。
    • 是的,我可以提到所有将在 Chef 中运行的食谱在 Berksfile 中运行,但这会导致重复,因为相同的食谱是在角色的运行列表中定义的,因为我希望在一个角色中复制该角色开发环境,会有维护开销。
    • @Vaibhav 不,你错过了我上面的观点......为了避免使用角色的开销,不要使用它们!用食谱代替它们。 Berksfile 然后列出所有要加载到您的厨师服务器的食谱。功能上与 Ruby 中的 Gemfile 或 Java 中的 Pom.xml 文件相同。