Chef infra 打包chef环境并在单独的资源调配服务器上运行

Chef infra 打包chef环境并在单独的资源调配服务器上运行,chef-infra,provisioning,berkshelf,Chef Infra,Provisioning,Berkshelf,为了建立一个运行我们的软件解决方案的环境,我们制作了一些食谱。这些烹饪书位于两个git服务器上,并且依赖于公共烹饪书(我们使用的是berkshelf) 我们需要将我们的软件解决方案提供给不同的客户机环境(它们的硬件),为了做到这一点,我们希望能够在我们的一台开发机器上创建一个包含所有内容的包,并将该包上载到客户机环境中的配置机器。然后,我们希望使用该资源调配机器为该客户端设置所有内容 我们需要这样做的原因是,客户端环境中的资源调配机器将无法访问存储我们烹饪书的git服务器。它甚至可能没有互联网接

为了建立一个运行我们的软件解决方案的环境,我们制作了一些食谱。这些烹饪书位于两个git服务器上,并且依赖于公共烹饪书(我们使用的是berkshelf)

我们需要将我们的软件解决方案提供给不同的客户机环境(它们的硬件),为了做到这一点,我们希望能够在我们的一台开发机器上创建一个包含所有内容的包,并将该包上载到客户机环境中的配置机器。然后,我们希望使用该资源调配机器为该客户端设置所有内容

我们需要这样做的原因是,客户端环境中的资源调配机器将无法访问存储我们烹饪书的git服务器。它甚至可能没有互联网接入。我们基本上希望将客户机环境视为一个完全孤立的孤岛

我希望能够将整个环境(包括依赖项)打包并上载到资源调配服务器。在那里,我将启动chef zero并从中为该环境提供所有节点


问题是,我真的不知道如何做到这一点。

看看spiceweasel()

我最近没有使用过这个,但这是我们在客户群集中安装时的策略(在使用时-'ta-work-there)。

介绍了如何将烹饪书打包到单个存档中:

此档案可直接提供给厨师长索洛或提取和 上传到厨师服务器

例子 包装食谱 使用Berkself打包您的“myapp”食谱及其所有依赖项

berks package myapp-1.0.tar.gz
用法:厨师独奏 用法:Chef服务器 将烹饪书上载到厨师服务器

tar zxf myapp-1.0.tar.gz
knife environment create myapp-1_0 --description "myapp version 1.0" -d
knife cookbook upload --all --cookbook-path cookbooks --environment myapp-1_0 --freeze
knife bootstrap node1 -E myapp-1_0 -r recipe[myapp] ..
knife bootstrap node2 -E myapp-1_0 -r recipe[myapp] ..
..
针对chef服务器引导一些新的客户端节点

tar zxf myapp-1.0.tar.gz
knife environment create myapp-1_0 --description "myapp version 1.0" -d
knife cookbook upload --all --cookbook-path cookbooks --environment myapp-1_0 --freeze
knife bootstrap node1 -E myapp-1_0 -r recipe[myapp] ..
knife bootstrap node2 -E myapp-1_0 -r recipe[myapp] ..
..
创造环境是经过深思熟虑的。它使cookbook版本在运行时受到约束,从而在共享chef服务器上提供隔离。

您应该使用它来执行此任务,因为它允许您为任何平台创建这些映像,包括停靠版本,并且可以使用chef cookbooks进行设置

然后,将图像上传到任何地方,并更改您的文件(或您使用的任何文件)以指向该图像作为起点


作为一个示例和起点,只需查看根目录中“packer”文件夹下的(在GitHub上)。Opscode大量使用Packer为其ChefDK服务等提供专门的供应箱。

是的,你说得很对。创建工作二进制文件是交付应用程序最可靠的方法。然而,根据我的经验,一些客户不允许使用第三方虚拟设备或容器。如果他们已经在使用chef,那么您将需要一种机制来提供一套完整的chef食谱,我假设这就是问题所在。事实上,随着Linux容器变得越来越普遍,希望这种情况会改变。我已经修改并简化了我的答案。少一些“说教”,多一些实践:-)