为什么人们使用Puppet / Chef与Amazon Cloud Formation而不是仅仅使用CloudInit?
我们正在计划使用非“预先烘焙”的AMI EC2实例。 也就是说,当他们分手时,他们是AWS Linux的裸设备。 我们的引导过程将引入我们需要的各种安装,例如python,tomcat。 我们将有3个实例,最多8个。
考虑到这些要求,使用Puppet / Chef会比使用Amazon Cloud Formation(CloudInit)更有用吗?
我能看到的最好的是,如果我们使用了Puppet,那么我们就会有更容易审计的声明性编程,以查看与脚本相比发生了什么。 另外CloudInit有一个16k的脚本大小限制,我们可能会也可能不会碰到。
有没有人从CloudInit移动到木偶或厨师的特定原因,他们可以在这里提供回答我的问题?
与CloudInit相比有优势吗? 是的,绝对有很多!
当然,您可以从头开始写一次CloudInit脚本来configuration服务器。 但是当您需要更改configuration文件,添加用户,更新软件包或安装新软件包时会发生什么情况? 你最终将login到服务器或编写脚本来做到这一点,并不可避免地会有不协调的状态。
CloudInit不是configurationpipe理。 如果您select开始使用configurationpipe理软件,则只需使用cloud init进行一项任务:引导Puppet / Chef /其他代理。
木偶不只是帮助你自动安装软件包,设置SSH密钥,或调整你的Tomcat堆。 它确保事物的状态。 当开发人员在凌晨3点对Java应用程序进行故障排除并更改Tomcatconfiguration时,Puppet会将其更改回来。 您可以快速更改所有或一组节点的Python版本,如果有人安装了不同的版本,Puppet会将其更改回来。
当您的应用程序堆栈发生变化并开始使用时(比如RabbitMQ或Jetty)或新的RDBMS,您可以轻松地在数以千计的服务器上testing和部署这些更改。
使用configurationpipe理软件还有其他许多原因,例如后端报告,审计和安全合规性。
整个configurationpipe理的重点是可预测和一致地启动机器。 当你完全限于AWS(尽pipedebuggingCloudFormation模板是一个悲惨的经历 )时,CloudFormation和cloudinit是非常棒的,但是那些同时使用数据中心资源和AWS,本地testing环境或者开发机器的应用程序呢?
如果你完全存在于AWS中,那么我想你可以不用任何其他的东西,但是我不相信这对于任何规模的应用程序来说都是现实的(例如,Netflix使用他们写的OSS技术来预先烘焙他们的AMI并发布到世界上;考虑这个video的细节)。 高度可用的应用程序是跨地区的,通常基于VPC,倾向于备份到跨越VPN的数据中心,甚至不涉及演示,暂存,testing或开发环境。 作为负责configuration机器的人员,我想要做的最后一件事是重复工作,或者停止debugging多个configuration方法。
因此,厨师或木偶。 他们对AWS的工作和他们对我的数据中心的工作一样好,对于我的开发机器来说也是如此,因为他们在我偶尔需要的演示环境中运行Vagrant 。 我宁愿从cloudinit启动Chef或Puppet,而不是维护cloudinit和Chef或Puppet。
对于扔掉服务器,说运行在一个自动缩放组后面我会说,cloudinit可能就足够了。 Linux的shell脚本或Windows PowerShell脚本应该做的伎俩。
如果您计划pipe理的长时间运行的服务器,可能是大厨,木偶或者docker工人,那么您可以按照公认的答案中提到的那样给予您一个优势。 如果您在使用它们之后看不到优势,那么您可能不需要该工具。
根据我的经验,使用AWS提供的开箱即用GUI工具可以轻松完成简单的任务,但是当您进入更复杂的事情时,您会发现只能使用AWS他们的工具。
在这一点上,你可以停下来,或者你可以find其他工具(如厨师或木偶),可以帮助你实现更复杂的目标,也可以做更简单的事情。
你的select。