选择一个 Vagrant 配置管理工具

29

问题

有人可以解释一下为什么选择木偶或厨师vagrant provisioners比shell provisioner更好吗?

背景

我正在开始使用Vagrant。其中一件让我感到困惑的事情是决定使用哪个provisioner。到目前为止,我使用shell provisioner取得了一些成功,但我发现使其可靠运行需要比我预期的更多的工作。

目前,我不熟悉ruby、木偶或厨师,但如果必须我很乐意学习任何一个或全部。我的早期经验表明,如果其他人有一个完全符合你要求的recipe,那么它会非常有效,但做一些非标准的事情意味着要在ruby中编写解决方案。

我知道有关puppet和chef的文章进行比较,我不太担心要使用它们中的哪一个,而是要知道何时以及为什么应该使用它们。

3个回答

27

完全透明:我是Puppet Labs的员工。但在加入他们之前,我选择了Puppet作为产品超过2年。

如果您的配置具有任何程度的复杂性并且会随时间变化 - 或者您预计安装环境本身会发生改变以一种可能改变部署执行方式的方式,我建议您使用Puppet或Chef而不是shell。您的脚本可能非常好,但是最终,除非您遵循围绕它们的出色编程实践、测试和QA等方面,否则它们将在某些时候失败。

有关DevOps讨论这个概念的整个文献体系,但归结为“技术债务”的原则-我们 tend to do things the easy way now, and thus perceive them as simpler, at the cost of increasing complexity and difficulty later。

Puppet的一个优点是其确定性-ni编写的清单必须能够被Puppet程序化地转换为您正在构建的服务器模型。这被人们认为是更“困难的”,但是我会认为,如果你沿着你的技术生命周期把它平均起来,那么难度就会降低。换句话说,Puppet迫使您现在进行思考,然后轻松地扩展部署,而不是以后思考并随时重新设计。现在用现金支付,而不是以后使用信用卡支付利息。

如果您仅仅拉取其他人的清单,那么您将会在某些时候遇到麻烦-虽然我们希望不是这样,在今天的Puppet中工作肯定是如此,因为他们编写它们以解决一般情况,而不是您的特定系统。许多通用清单只有在您更好地了解Puppet时才变得有用。

因此,与其从那里开始,我会通过优秀的学习Puppet指南逐步掌握基础知识。Puppet的学习曲线陡峭,但一段时间后就会平稳下来。

使用其他的配置管理工具或工具集也有其它原因,但我肯定会认为相比于尝试确保你的Shell脚本正在做你认为它们应该做的事情,你最好使用Puppet或Chef,特别是当你需要生成新环境的时候。


谢谢你的回答。不知道您能否就QA shell和puppet所需的努力差异发表评论?这是我目前犹豫不决的主要原因。 - Andrew Walker
2
两者都有框架和测试工具。你可以查看 rspec-puppetcucumber-puppet 来获取一些有用的 TDD/BDD Puppet 工具。对于 shell,也有测试工具,但问题在于你必须处理所有自己的失败情况——你如何知道你已经成功了,以及你如何知道你的代码正在执行你所断言的操作?Puppet 包含了处理这些问题的许多框架,因此使故障排除/验证代码成为一个更简单的练习。 - eshamow
6
对于这个很棒的“用现金支付,而不是以后用信用卡付利息”的技术负债寓言,给一个赞。 - Tomasz Nurkiewicz
3
我认为shell provisioners非常棒,只要你把它们视为原型,并在利息到期前用Chef或Puppet替换它们。使用shell脚本更容易让事情开始运作,如果你仍在确定确切需求,则这个原型阶段真的会帮助很多。问题是,如果你的管理层认为当shell脚本可以工作时你已经完成任务,就不让你替换它们。那么,你将积累大量利息,等到被允许付现金时,你可能会破产。 - iconoclast
1
实际上,在Vagrant的环境下,您可能永远不会遇到Chef和Puppet旨在处理的复杂性。如果您的情况足够简单,那么shell脚本可能会一直很好用。当您拥有更复杂的设置时,Chef和Puppet才能为自己带来回报。 - iconoclast

10
啊,自由选择带来的是选择适合自己的复杂性。 Chef Solo - 如果您刚开始使用 Chef 或者 Chef 服务器对于您的情况来说太重,那么 Chef Solo 是最理想的选择。Chef Solo 还允许您将所有的 cookbook 嵌入到项目中,这对于想要在同一代码库内跟踪自己的 cookbook 的项目非常方便。Chef Solo 独立运行,不需要与任何其他服务器通信,它只是自己在虚拟机上运行。 Chef Server - Chef 服务器适用于管理多个项目的公司或个人,因为它允许您在多个项目之间共享 cookbook。cookbook 本身存储在服务器上,客户端在运行时下载 cookbook。 Puppet - Puppet provisioner 运行独立的 Puppet manifest,这些 manifest 存储在服务器上,并在创建客户端 VM 时下载到该客户端。该 provisioner 不需要 Puppet 服务器,可以在 VM 上运行。 Puppet Server - Puppet Server provisioner 连接到 Puppet 服务器,并使用该服务器上的节点配置来配置您的客户端 VM。
其他工具、shell 脚本等 - 您是否使用除 Vagrant 内置工具之外的其他工具?Provisioners 只是 Vagrant::Provisioners::Base 的子类,这意味着如果需要,您可以很容易地构建自己的 provisioner。
您还可以查看文档,docs.vagrantup.com/v2

+1,这很有道理,但我真的希望能得到更实际的建议。我会看看是否可以编辑问题以使其更清晰。 - Andrew Walker
看起来链接已经失效了。 - mpoisot

4
我会选择Shell供应商,然后让shell脚本从github或bitbucket克隆您的puppet/chef存储库。该脚本可以设置ssh密钥以允许自动化git克隆。好处是大多数云提供商也支持此功能,因此您可以使用相同的脚本。这篇博客很好地解释了git、puppet和vagrant,one man and the cloud blog

我已经修复了,域名过期了。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接