我们在日常 DevOps 活动中考虑配置管理问题时都会考虑有哪些可用的最佳工具。这篇文章将重点讨论和对比 Ansible、Puppet、Chef 的最新趋势和相关信息。有人认为应该将 Terraform 加入这次对比,我们也十分同意这一想法(我们将 Terraform 也列入了 2021 年最佳 DevOps 工具名单),不过由于篇幅有限,所以我们决定将 Terraform 留到其他文章中讨论。
这里我们并没有像之前的文章一样只拿 Puppet 与 Chef 做对比,而是加入了 Ansible 与两者一起进行比较,因为根据 2021 工具预测这篇文章中的数据,我们发现 Ansible 中的基础设施即代码 (IaC) 受到越来越多人的青睐。
Ansible vs Puppet vs Chef……实际上这三种工具在功能上都非常相似。所以今天我们将探讨一下每个工具的特点详情,帮助你了解它们在 2021 年有哪些具体应用场景。当你在决定最适合自己团队的工具时,大部分判断都基于你在 DevOps 方面积累的经验。其他影响因素则包括使用最新和最好的配置管理工具的理念。重要的是不断跟进了解当前有哪些最佳选择。
2019 年相关市场份额数据显示,Ansible 已占有近 50% 的市场份额,而 Chef 和 Puppet 的使用率则都在 40% 左右。现在,有了对容器编排的需求,也就十分有必要了解此类工具如何帮助我们提高效率,并提供更完善的方式来组织和处理资源。
Python 助力 Ansible 登顶
短短时间内,Ansible 的使用量已超过同类别其他产品。其中一个因素便是对 Python 的熟悉程度。Python 在 DevOps 中广泛用于完成自动化任务。现在它也用来提供 Ansible 所需的服务和基础设施,帮助 Ansible 实现最佳性能。
对比 Ansible、Puppet 以及 Chef 可以发现,Ansible 为无代理系统,不需要专门的安全基础设施。也就是说,实现 Ansible 所需的配置并不复杂, 它使用 SSH 作为底层保障。Ansible 可以处理各种各样的自动化任务,包括云资源供应、资源配置,甚至是已部署软件的发布和编排。
熟悉 YAML 语法的人会发现,学习涵盖各种自动化作业指令的 Ansible“剧本”需投入的学习成本并不高。它与适用的云编排结合使用可实现强大的组合,从而在大量服务器上支持特定的配置管理。用剧本管理库存是实现 IaC 的关键一步。这种方法确保基础设施及相关配置与代码其他部分一起进行有序检查,因此有助于实现持续交付。
Puppet 的自动化管理
Puppet 作为配置管理器采用了一种类似于 Ruby 的语言来编写模块文件。编程时间集中在环境配置方面,使用声明式 DSL 设置维护特定状态的配置参数。这比 Ansible 中使用的剧本要更彻底一些。
使用主服务器/代理系统,代理便能轮询主服务器,对配置进行验证和更新。Ansible、Puppet 以及 Chef 的一个明显区别就是,Puppet 会通过这种方式利用“Puppet 主服务器”系统管理节点。主服务器被指定为环境中各种配置的“记录系统”。此外,它还帮助控制来自文件服务器的必要文件的传输,并提供与配置相关的指标。
Puppet 的查询部分使用 Facter 收集与管理系统有关的信息。回到主服务器的通信允许系统根据查询结果对信息进行编译,以便与 Puppet 清单作比较。之后,将节点传入 Parity 的指令会发送回代理,由代理守护程序完成操作。
Chef 带来自动化便利
自 2008 年 Chef 创立以来,该组织便持续关注 IT 和开发领域的需求。还记得我们就“基础设施即代码”过渡讨论的内容吗?同 Ansible、Puppet 一样,Chef 发展的大方向也是支持 IaC。与 Puppet 类似,Chef 系统依赖于包含所需状态指令的文件。此类文件在 Chef 中被称作 Cookbook。
这就跟烹饪时必须用到食谱一样。食谱、配置细节、工具和其他自定义资源的组合即可构成完整的 Cookbook。随着时间推移,这些 Cookbook 也变得越来越复杂。Chef 提供了许多有助于应对这种复杂性的工具,因此,你可以使用它实现更高水平的自动化。
让我们来看看具体阵容:
- Chef Infra – Chef Infra 是用于处理繁重任务的主要产品。与 Chef Server 以及 Client 等工具一起使用可对所需配置进行编排。
- Chef Workstation – Workstation 软件包包含创建 Cookbook 和管理系统所需的工具。此外,Chef Workstation 提供了在“测试厨房”中试用食谱的途径。
- Chef Habitat – Habitat 关注的重点在于应用本身的状态而非基础设施,目的是让你的 Chef Habitat 应用能够部署到几乎任何云端或本地环境中。
- Chef InSpec – 为进行更深层的内部检查,Chef InSpec 允许通过检查指定项目进行合规性验证。例如,检查数据库的特定选项,确保其符合数据安全政策。
显然,Chef 采取的方法涉及将许多部分剥离开来完成不同目标。因此,对于能花时间使用所有这些工具的人而言,Chef 确实是个不错的选择。对比 Ansible、Puppet、Chef,我们发现三个工具应用到特定环境中时存在功能上的差异。选择哪一种工具很大程度上取决于当前工具知识、学习曲线以及实际在团队工作流程中使用时的可接受性。
Ansible vs Puppet vs Chef 并列比较
Ansible | Puppet | Chef | |
发布时间 | 2012 | 2005 | 2009 |
易用性 | 高 | 中等 | 中等 |
功能集 | 低 | 高 | 一般(通过各种工具实现。) |
支持企业 | 小型 | 大型 | 大型 |
故障容忍度 | 通过二级节点 | 使用其他 Master 节点 | 依赖备份服务器 |
编码类型 | 程序式 | DSL | 程序式 |
维护难度 | 低 | 高 | 高 |
文档化 | 低水平文档化 | 高度文档化 | 高度文档化 |
应用部署 | 支持 | 支持,但比较困难 | 不支持 |
有了各种实现工具后,关键就是要通过各种 POC 测试进行综合比较。针对你的堆栈所需的管理水平开展规划会议有助于判断最合适的产品。即使有能力完成相应的任务,但要满足某一特定需求可能并不容易。
总结:
通过比较 Ansible、Puppet 以及 Chef,你一定能找到适合你团队的工具。许多管理员倾向于选择 Ansible 和 Puppet,而 Chef 则可能对团队中的开发人员更具吸引力。当然,并不是说这三种工具不能在某些情况下同时使用。例如,即使你非常喜欢 Chef 的能力和工具,你也同样可以借助 Ansible 来确保应用层面的工作得到妥善处理。
无论选择哪种产品,可以肯定的是,应用配置管理工具一定能为团队节省大量时间。任何能够提供自动化、指导性流程的东西都能帮助团队通过动态供应和配置的环境向持续交付的目标迈进。