2

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

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

我们需要这样做的原因是客户端环境中的配置机器将无法访问存储我们的食谱的 git 服务器。它甚至可能无法访问互联网。我们基本上希望将客户端环境视为一个完全孤立的岛屿。

我希望能够将整个环境(包括依赖项)打包并上传到配置服务器上。然后我会启动 chef-zero 并从那里为该环境提供所有节点。

问题是,我真的不知道如何实现这一目标。

4

3 回答 3

0

Berkshelf 文档描述了如何将说明书打包到一个存档中:

$ cd ~/code/berkshelf-api/cookbook
$ berks package
Cookbook(s) packaged to /Users/reset/code/berkshelf-api/cookbook/cookbooks-1397512169.tar.gz

该存档可以直接提供给 Chef-Solo 或提取并上传到 Chef 服务器。

例子

包装食谱

使用 berkshelf 打包您的“myapp”食谱及其所有依赖项。

berks package myapp-1.0.tar.gz

用法:厨师独奏

tar zxf myapp-1.0.tar.gz
chef-solo -c ~/solo.rb -j ~/node.json

用途:厨师服务器

将食谱上传到厨师服务器

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] ..
..

环境的营造是刻意的。它使食谱版本在运行时受到限制,在共享的厨师服务器上提供隔离。

于 2014-11-08T11:22:33.220 回答
0

看看 spiceweasel ( https://github.com/mattray/spiceweasel )

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

于 2014-11-07T18:41:55.783 回答
0

您应该使用Packer 来完成此任务,因为它允许您为任何平台(包括 Dockerized 版本)创建这些图像,并且可以使用 Chef 食谱进行配置。

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

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

于 2014-11-08T12:14:10.307 回答