Bash 选择流浪的供给者

Bash 选择流浪的供给者,bash,configuration-management,chef-infra,puppet,vagrant,Bash,Configuration Management,Chef Infra,Puppet,Vagrant,问题 有人能解释为什么选择傀儡或厨师流浪供给者比选择贝壳供给者更好吗 背景 我正在和流浪汉开始接触。我遇到的问题之一是决定使用哪种供应器。到目前为止,我已经在使用shell provisioner方面取得了一些成功,但是要让它可靠地运行,所做的工作比我预期的要多 目前,我不熟悉ruby、puppet或chef,但如果有必要的话,我很乐意学习其中的任何一种或全部。我早期玩puppet和chef的经验是,如果其他人有一个食谱可以完全满足您的需求,它的效果非常好,但做一些非标准的事情意味着要用ruby

问题

有人能解释为什么选择傀儡或厨师流浪供给者比选择贝壳供给者更好吗

背景

我正在和流浪汉开始接触。我遇到的问题之一是决定使用哪种供应器。到目前为止,我已经在使用shell provisioner方面取得了一些成功,但是要让它可靠地运行,所做的工作比我预期的要多

目前,我不熟悉ruby、puppet或chef,但如果有必要的话,我很乐意学习其中的任何一种或全部。我早期玩puppet和chef的经验是,如果其他人有一个食谱可以完全满足您的需求,它的效果非常好,但做一些非标准的事情意味着要用ruby编写解决方案


我知道文章会比较,我不太担心使用哪一篇,而完全不知道什么时候和为什么要使用它们。

啊,随着选择的自由,选择适合你的东西变得复杂起来

主厨独奏-如果您刚刚开始使用主厨,或者主厨服务员对您的情况来说太重,那么主厨独奏是最理想的选择。Chef solo允许您将所有烹饪书嵌入到项目中,这对于希望在同一存储库中跟踪其烹饪书的项目来说非常好。Chef solo独立运行–它不需要Chef服务器或任何其他服务器进行对话;它只是在虚拟机上自行运行

Chef Server-Chef Server对于管理许多项目的公司或个人非常有用,因为它允许您在多个项目中共享食谱。烹饪书本身存储在服务器上,客户端在运行时下载烹饪书

Puppet-Puppet provisioner运行独立的Puppet清单,这些清单存储在服务器上,并在创建时下载到客户端VM。provisioner不需要Puppet服务器,而是在VM本身上运行

Puppet Server-Puppet Server Provisionier连接到Puppet服务器,并使用该服务器上的节点配置配置客户端VM

其他的工具,shell脚本,等等-你使用的东西不是内置在Vagrant中的吗? Provisioners只是Vagrant::Provisioners::Base的子类,这意味着您可以在需要时轻松构建自己的


您还可以查看文档,完整披露:我是Puppet Labs的员工。但在加入他们之前,我选择了木偶作为两年多的产品

如果您的配置a)有任何程度的复杂性,b)随着时间的推移会发生变化,或者您希望您的安装环境本身发生变化,从而可能会改变您的部署执行方式,那么我建议您使用Puppet或Chef over shell。您的脚本可能非常好,但最终,除非您遵循围绕它们的优秀编程实践,测试和质量保证等等,否则它们将在某个时候失败

DevOps周围有一大群有文化的人在讨论这个概念,但归根结底是“技术债务”的原则——我们现在倾向于用简单的方式做事,因此认为它们更简单,但代价是以后增加复杂性和难度

Puppet的优势之一是其确定性——您编写的清单必须能够由Puppet以编程方式转换为您正在构建的服务器模型。人们认为这更“困难”,但我认为,如果沿着技术生命周期的曲线将其平均化,困难就会减少。换言之,Puppet迫使您现在就开始思考,然后轻松地进行部署,而不是在以后思考和重新设计。现在就付现金,而不是信用卡,以后再付利息

如果你纯粹是在收集其他人的清单,你会在某个时候遇到麻烦——尽管我们不希望如此,今天与Puppet合作确实是这样,因为他们写这些清单是为了解决一般情况,而不是你的特定系统。只有当您更好地理解Puppet时,许多通用清单才变得有用

因此,我不会从这里开始,而是通过优秀的指南开始掌握基础知识。木偶的学习曲线是陡峭的,但过了一会儿就趋于平稳


使用其他资源调配器或工具还有其他原因,但我肯定会说,只要您需要生成新环境,使用Puppet或Chef比确保您的shell脚本完全按照您认为应该执行的操作要好。

我会选择shell资源调配器,然后让shell脚本从github或bitbucket克隆您的puppet/chef存储库。脚本可以设置ssh密钥以允许自动git克隆。好处是大多数云提供商也支持这一点,所以你可以使用相同的脚本。这篇博客解释了git、puppet和vagrant,很好,

+1,这是有道理的,但我真的希望得到更实用的建议。我会看看我是否可以编辑这个问题,让这个链接看起来像死了一样清晰。谢谢你的回答。你介意评论一下QA'ing shell和puppet所需的不同努力吗。这是我目前对做出改变持保留态度的一大原因。两者都有框架和手段。您可以查看或查找一些有用的TDD/BDD傀儡工具。shell也有测试工具,但shell的问题是,您必须处理自己的所有失败案例——您如何知道您已经成功,以及您如何知道您的代码正在执行您断言的操作?Puppet包含了很多处理这些东西的框架,因此使故障排除/验证代码变得更简单