【问题标题】:Why do people use Puppet/Chef with Amazon Cloud Formation instead of just using CloudInit?为什么人们将 Puppet/Chef 与 Amazon Cloud Formation 一起使用,而不仅仅是使用 CloudInit?
【发布时间】:2012-08-13 06:46:27
【问题描述】:

我们计划使用非“预烘焙”的 AMI EC2 实例。 IE。当它们启动时,它们是 AWS linux 的裸安装。我们的引导过程将引入我们需要的各种安装,例如蟒蛇,雄猫。我们将有最少 3 个实例,最多 8 个实例。

鉴于这些要求,使用 Puppet/Chef 会比使用 Amazon Cloud Formation (CloudInit) 有用吗?

我能看到的最好的结果是,如果我们使用 Puppet,那么我们就会有声明式编程,与脚本相比,它更容易审核以查看正在发生的事情。 CloudInit 也有一个 16k 的脚本大小限制,我们可能会也可能不会遇到。

是否有人出于特定原因从 CloudInit 迁移到 Puppet 或 Chef,他们可以在此处提供以回答我的问题?

【问题讨论】:

  • 有些人(比如我)在 CloudFormation 中使用简单的用户数据脚本(由 cloud-init 支持)。更长的脚本可以从 S3 下载并由初始用户数据脚本运行。
  • cloud-init 是不可知的,多个云提供商使用它。它可以在AWS、谷歌云平台和微软Azure上运行。 (cloud-init.io) 而 AWS::CloudFormation::Init 不是不可知论者。这是亚马逊特有的。

标签: chef-infra puppet configuration-management cloud-init


【解决方案1】:

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

当然,您可以编写自上而下运行一次 CloudInit 脚本来配置服务器。但是当您需要更改配置文件、添加用户、更新包或安装新包时会发生什么?您最终会登录服务器或为此编写脚本,并且不可避免地会出现服务器的不协调状态。

CloudInit 不是配置管理。如果您选择开始使用配置管理软件,只需使用 cloud init 完成一项任务:引导 Puppet/Chef/other 代理。

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

当您的应用程序堆栈发生变化并且您开始使用 RabbitMQ、Jetty 或新的 RDBMS 时,您可以轻松地在数万或数千台服务器上测试和部署更改。

使用配置管理软件还有很多其他原因,例如后端报告、审计和安全合规性。

【讨论】:

  • 视情况而定。对于长时间运行的服务(通常是 AD、DB),可能需要配置管理。但是对于其他可替换的丢弃服务器,并非如此;在 ASG 下管理的 Web 服务器、hadoop 或 elasticsearch 中的集群节点。如果我要更改配置,我只会扔掉服务器并启动一个新的。
【解决方案2】:

配置管理的全部意义在于以可预测且一致的方式启动机器。当您仅限于 AWS 时,CloudFormation 和 cloudinit 非常棒(尽管调试 CloudFormation 模板是 miserable experience),但对于同时使用数据中心资源和 AWS、或本地测试环境或开发机器的应用程序呢?

如果您纯粹存在于 AWS 中,我想您可以只使用 cloudinit 而没有别的,但我不相信这对于任何规模的应用程序都是现实的(例如,Netflix 使用 OSS 技术预烘焙他们的 AMI) '已经编写并发布给世界;请考虑this video了解详细信息)。高可用性应用程序是跨区域的,通常基于 VPC,倾向于跨 VPN 备份到数据中心,这甚至不涉及演示、登台、测试或开发环境。作为负责配置机器的人,我想要做的最后件事是重复工作或在调试多种配置方法时陷入困境。

因此是厨师或木偶。它们适用于 AWS 和适用于我的数据中心一样好,适用于我的运行 Vagrant 的开发机器也适用于我偶尔需要的演示环境。我宁愿从 cloudinit 启动 Chef 或 Puppet,也不愿同时维护 cloudinit 和 Chef 或 Puppet。

【讨论】:

  • @U0001:修复了视频链接
【解决方案3】:

对于丢弃的服务器,假设在自动缩放组后面运行,我会说 cloudinit 可能就足够了。 linux shell 脚本或 windows powershell 脚本应该可以解决问题。

如果它是您计划管理的长期运行的服务器,也许厨师、木偶或码头工人可能会给您带来优势,如已接受的答案中所述。如果您在使用后看不到优势,那么您可能不需要该工具。

【讨论】:

  • 我完全同意。 Puppet 和 Chef 很复杂,如果您可以简单地通过删除并启动一个新服务器来替换服务器 - 那么我实际上不鼓励使用它们。在某些场景中 puppet / chef 很棒,但您需要权衡在每个场景中使用 then 的额外复杂性。
【解决方案4】:

根据我的经验,使用 AWS 提供的开箱即用 GUI 工具可以轻松完成一些简单的事情,但是当您处理更复杂的事情时,您会开始发现您可以做的事情是有限的只使用他们的工具。

此时,您可以停下来,也可以找到其他工具(如 Chef 或 Puppet)来帮助您实现更复杂的目标以及做更简单的事情。

你的选择。

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2018-02-08
    • 2013-09-01
    相关资源
    最近更新 更多