为什么人们使用Puppet/Chef与Amazon Cloud Formation一起,而不仅仅使用CloudInit?

85

我们计划使用未经“预先烘焙”的AMI EC2实例。也就是说,当它们被启动时,它们是裸装的AWS Linux安装。我们的引导程序将拉取我们需要的各种安装,例如Python,Tomcat。我们将至少有3个实例和最多8个实例。

鉴于这些要求,与使用Amazon Cloud Formation(CloudInit)相比,使用Puppet / Chef是否有用?

我所能看到的最好的办法是,如果我们使用Puppet,那么我们将拥有易于审核以查看发生了什么的声明式编程,而不是脚本。此外,CloudInit有一个16k的脚本大小限制,可能会遇到或者可能不会遇到。

是否有人因为特定原因从CloudInit转移到Puppet或Chef,并可以在此回答我的问题?


2
有些人(比如我)使用CloudFormation支持的简单用户数据脚本。更长的脚本可以从S3下载,并由初始用户数据脚本运行。 - Eric Hammond
cloud-init 是一个不偏向任何云平台的工具,多个云服务提供商都在使用它。它可以在 AWS、Google Cloud Platform 和 Microsoft Azure 上运行。(https://cloud-init.io/) 相比之下,AWS::CloudFormation::Init 不是一个通用的工具,它只能在亚马逊上使用。 - Jordan Stewart
4个回答

83

CloudInit有优势吗?是的,绝对有很多!

当然,您可以编写一次性的CloudInit脚本来配置服务器。但是,当您需要更改配置文件、添加用户、更新软件包或安装新的软件包时会发生什么?您将不得不登录服务器或编写脚本来完成这些操作,并且最终会导致服务器状态不一致。

CloudInit不是配置管理。如果您选择开始使用配置管理软件,请只使用cloud init来引导Puppet/Chef/其他代理程序。

Puppet不仅可以帮助您自动安装软件包、设置ssh密钥或调整Tomcat堆栈,还可以确保事物的状态。当开发人员在凌晨3点调试Java应用程序并更改Tomcat配置时,Puppet会将其更改回来。您可以快速更改所有或一组节点的Python版本,如果有人安装了不同的版本,Puppet会将其更改回来。

当您的应用程序堆栈发生变化并开始使用例如RabbitMQ、Jetty或新的关系数据库管理系统时,您可以轻松测试和部署跨数十甚至数千个服务器的更改。

使用配置管理软件的其他原因包括后端报告、审核和安全合规性。


15
这取决于情况。对于长期运行的服务(通常是 AD 和 DBs),可能需要进行配置管理。但对于其他可以替换或丢弃的服务器,不太需要;例如在 ASG 托管的 Web 服务器、Hadoop 或 Elasticsearch 中的集群节点。如果我需要更改配置,我会直接丢弃该服务器并启动一个新的。 - Sleeper Smith

65

配置管理的整个目的是以可预测和一致的方式启动机器。当您仅限于使用AWS时,CloudFormation和cloudinit非常好用(尽管调试CloudFormation模板是一种痛苦的经历),但对于同时使用数据中心资源和AWS、本地测试环境或开发机器的应用程序来说呢?

如果您完全在AWS中存在,我想您可以只使用cloudinit而不需要其他任何东西,但我并不认为这对于任何规模的应用程序都是现实的(例如Netflix会使用他们编写并发布给世界的开源技术来预先制作他们的AMIs;请参考此视频了解详情)。高度可用的应用程序是跨区域的,通常基于VPC,并倾向于通过VPN备份到数据中心,甚至还涉及演示、暂存、测试或开发环境。作为负责提供机器的人,我最不想做的事情就是重复工作或陷入多个提供方法的调试中。

因此,Chef或Puppet。它们在AWS上和我的数据中心上同样有效,在运行Vagrant的开发机器上同样有效,对于我偶尔需要临时环境的演示环境也同样有效。我更愿意从cloudinit启动Chef或Puppet,而不是同时维护cloudinit和Chef或Puppet。

1
@U0001:修复了视频链接。 - Christopher

5

如果是一些临时服务器,比如在自动扩展组后运行的服务器,我认为cloudinit可能已经足够了。Linux shell脚本或Windows PowerShell脚本应该可以完成任务。

如果您计划管理长时间运行的服务器,那么像chef、puppet或docker可能会给您带来优势,正如接受答案中所提到的那样。如果您在使用它们后看不到任何优势,那么您可能不需要这个工具。


我完全同意。Puppet和Chef都很复杂,如果你可以通过删除并启动一个新服务器来替换服务器,那么实际上我会不建议使用它们。使用Puppet / Chef确实适用于某些情况,但您需要权衡在每种情况下使用它们所带来的额外复杂性。 - bobmarksie

0
在我的经验中,AWS提供的开箱即用GUI工具可以轻松完成简单的事情,但是当你涉及到更复杂的事情时,你会发现仅凭他们的工具存在一定的限制。
此时,你可以选择停止,或者寻找其他工具(如Chef或Puppet),这些工具可以帮助你实现更复杂的目标,同时也能完成更简单的任务。
由你决定。

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