我们制作了一些食谱,以便设置运行我们的软件解决方案的环境。这些食谱位于两个git服务器上,并依赖于公共食谱(我们使用的是berkshelf)。
我们需要将我们的软件解决方案配置到不同的客户端环境(它们的硬件)中,为此,我们希望能够在我们的一台开发计算机上创建一个包含所有内容的包,并将该包上传到客户端环境中的配置计算机。然后,我们希望使用该配置机为该客户端设置所有内容。
我们需要这样做的原因是,客户端环境中的供应机器将无法访问存储我们的食谱的git服务器。它甚至可能连互联网接入都没有。基本上,我们希望将客户端环境视为一个完全孤立的孤岛。
我希望能够将整个环境(包括依赖项)打包并上传到配置服务器上。在那里,我将启动chef-zero,并从中为该环境提供所有节点。
问题是,我真的不知道如何实现这一点。
发布于 2014-11-08 02:41:56
看看spiceweasel (https://github.com/mattray/spiceweasel)
我最近没有用过这个,但这是我们在客户集群上安装时的策略(在use-'ta-work-there)。
发布于 2014-11-08 19:22:33
Berkshelf documentation介绍了如何将食谱打包到单个归档中:
打包到/Users/reset/code/berkshelf-api/cookbook/cookbooks-1397512169.tar.gz的食谱$ cd ~/
/ berks api/Cookbook$berks package Cookbook
此存档可以直接提供给Chef-Solo,也可以提取并上传到Chef Server。
示例
把食谱打包
使用berkshelf打包你的"myapp“食谱和它的所有依赖项。
berks package myapp-1.0.tar.gz用法: Chef solo
tar zxf myapp-1.0.tar.gz
chef-solo -c ~/solo.rb -j ~/node.json用法: Chef服务器
将食谱上传到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针对chef服务器引导一些新的客户端节点
knife bootstrap node1 -E myapp-1_0 -r recipe[myapp] ..
knife bootstrap node2 -E myapp-1_0 -r recipe[myapp] ..
..环境的创建是有意识的。它支持在运行时对食谱版本进行约束,从而在共享的chef服务器上提供隔离。
发布于 2014-11-08 20:14:10
您应该使用Packer for完成此任务,因为它将允许您为任何平台创建这些镜像,包括Dockerized版本,并且它可以与厨师食谱一起提供。
然后,将图像上传到任何位置,并更改您的Vagrantfile (或您使用的任何文件),以指向该图像作为您的起点。
作为示例和起点,只需查看根目录中"packer“文件夹下的Opscode Bento service repo (在GitHub上)。Opscode大量使用包装器为他们的ChefDK服务等提供专门的配置盒。
https://stackoverflow.com/questions/26803688
复制相似问题