Vagrant provision shell、Puppet和Chef的比较

37

我有以下设置:
  • 许多不同的项目,它们是独立的git仓库,但大部分具有相同的服务器配置
  • 每个项目又依赖于许多其他项目,我们使用composer依赖管理器将它们组合在一起(PHP语言)。
我想使用Vagrant,并在每个仓库中包含一个Vagrant文件,这样我的团队成员就可以克隆一个仓库,运行vagrant up,然后就可以开始工作了。
现在我的问题针对于如何进行预配。我需要安装几个工具和软件包,例如apache、git、mysql和一些PHP软件包,然后下载一些文件(比如最近的开发数据库转储),在/var/www中设置好一切,并运行composer install 命令。
因此,做这件事的一个选项是使用像chef或puppet之类的管理工具及其 “recipes”(配方)。 另一个选择是编写bash文件并使用shell预配功能。
我没有太多使用chef/puppet的经验,所以自然而然,使用shell选项似乎更容易,但我想知道这是否不是长期来看一个好的/可行的选项。
为什么我认为采用puppet/chef方法不好:
我明白我将不得不使用几个不同的“recipes”,并且几乎总是会为我的不同存储库使用相同的“recipes”,因此我将不得不在所有存储库中都包含它们。考虑到有20个存储库需要10个“recipes”,那意味着我需要添加200个“recipes”作为git子模块或类似物(每个团队成员都需要克隆存储库,然后克隆10个配方存储库,然后才能为每个项目运行vagrant up)。相比之下,我只需要一个小型存储库,其中包含我的shell脚本,并将其克隆20次即可。
我可能缺少了某些东西,请建议我是否应该选择chef/puppet,为什么即使我所有的存储库都具有非常相似的服务器设置,也是有意义的。

如果您认为Shell提供程序是正确的选择,那么请使用它。这样做会更快,因为您不需要学习新工具。学习Chef或Puppet的最佳方法是尝试使用它们。要开始,请查看此链接:https://dev59.com/gHfZa4cB1Zd3GeqPSH2y#19127033 - Mark O'Connor
1
@MarkO'Connor 谢谢您的评论。Berkshelf工具看起来非常有趣,似乎可以解决我需要单独下载所有代码配方的问题 :) 我知道使用shell脚本会更快,但可能有很好的理由使用chef / puppet,我还没有完全掌握。所以问题是使用chef / puppet相比使用shell脚本的优势是什么 - 还是只是个人偏好? - mpaepper
听起来你想要实现的目标用Docker和一个小的bash脚本(或者任何你想要的ansible/chef/puppet工具)会更容易。我刚刚经历了这个过程,使用了Docker和Bash。 - Kenyon
2个回答

27
以下文章涉及另一种CM工具(ansible),但我认为作者非常好地解释了从Shell脚本过渡的好处。

http://devopsu.com/blog/ansible-vs-shell-scripts/

引用1:

让我真正惊讶的是一些更著名的开发人员的反应。他们基本上说,“这很酷,但我可能不会阅读它,因为我的手动安装/ shell 脚本工作流目前还可以。”

我有点震惊,但几分钟后我想了一想,意识到他们的选择在他们对 CM 工具所知道的情况下是完全明智和理性的。

引用2:

对他们来说,使用 CM 工具意味着花费数周的时间学习复杂的概念,与复杂的安装过程斗争,并随着时间的推移维护该复杂系统。他们有点意识到收益,但使用 CM 工具的成本似乎太高,不值得付出努力。

最后总结了相对于 shell 脚本的优点,我认为这适用于所有 CM 工具,包括 puppet、chef、salt、ansible 等。

  • 哪种方法最有可能进入源代码控制?
  • 哪种方法可以安全地多次运行并保持信心?
  • 哪种方法可以轻松地针对多个服务器运行?
  • 哪种方法实际上验证(测试)了您的服务器是否正确?
  • 哪种方法可以轻松地针对特定服务器(Web、DB 等)进行定位?
  • 哪种方法支持轻松地模板化您的配置文件?
  • 哪种方法将增长以轻松支持您的整个堆栈?

希望这能有所帮助。


2

2016年更新

对于那些通过谷歌找到这篇文章的人,似乎一群开发者正在转向使用Ansible,因为它更加简单易用。引用文章中的话:

"Ansible是一个适合不喜欢使用部署工具的人使用的部署工具。它接近脚本编写,不会在服务器上污染代理或集中式服务器,并且非常容易理解。"

我们最近在我们的微服务架构中实现了它,效果很棒。

  • 超级简单
  • 只需要一天就能掌握
  • 设置好之后就不需要再考虑它了

Puppet/chef永远在我心中有一席之地,但Ansible更加易用。


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