Ansible 与 Puppet 之间的区别
Ansible® 和 Puppet 都是社区开源 IT 自动化工具。两者皆可通过自动执行日常任务来简化 IT 运维和 DevOps 工作,例如配置和置备系统、部署软件,以及跨大量服务器或端点设备管理更新等任务。
Ansible 以简单易上手而闻名,这归功于其采用更加灵活的无代理方法,无需在要自动化的目标设备上安装额外软件。开源 Puppet 和 Puppet Enterprise 则与之相反,仍采用传统的代理式方法,需要在每台机器上安装额外软件。对于自动化本身,Ansible 和 Puppet 也采用不同的方法。其中,Ansible 使用人类可读的语言(用于配置文件)和程序性自动化(定义要依序运行的步骤)。而 Puppet 则使用域特定语言 (需要掌握 Ruby 编程语言) 和声明性自动化(定义期望的状态)。
本文将更加详细地阐述 Ansible 和 Puppet 之间的异同。
常用 IT 自动化工具的受支持版本
Ansible 和 Puppet 在更广阔的 IT 自动化工具领域中占有怎样的地位?Ansible、Puppet、Salt 和 Chef 是最常用的 4 种开源 IT 自动化工具。这 4 种工具都提供由不同公司实体推出的企业级版本:
- 红帽® Ansible® 自动化平台由红帽提供支持。
- Puppet Enterprise、Puppet Bolt 和其他产品由 Perforce 提供支持。
- VMware Aria Automation(Salt)由 VMware 提供支持。
- Chef Enterprise Automation Stack 由 Progress 提供支持。
红帽资源
Ansible 和 Puppet 的 IT 自动化方式有何不同
Ansible
Ansible 是开源的命令行式 IT 自动化软件应用,采用 Python 编写。它能够配置系统、部署软件和编排高级工作流,以支持应用部署和系统更新等工作。红帽 Ansible 自动化平台是基于 Ansible 而打造的订阅产品,可提供许多企业级功能。
Ansible 的强大源自于其社区。它的主要 GitHub 存储库吸引了成千上万的贡献者,截至 2022 年秋季已有数万个存储库依赖于它。广受欢迎的用户大会 AnsibleFest 每年举行一次,而 Ansible Meetup 聚会也定期在全球各地举办。生气勃勃的用户社区反映出 Ansible 拥有大量专业人才,许多贡献者使 Ansible 与其他流行软件项目保持着紧密可靠的集成。Ansible 用户可以访问数百种模块和插件,进一步扩展其功能。
Ansible 的设计针对简单性和易用性作了提升,同时也十分注重安全性和可靠性,尽量控制了可以移动的部件数。它使用 OpenSSH 进行传输(其他传输和拉取模式作为替代选择),并在 Ansible Playbook 中使用人类可读的语言(YAML),用户无需大量培训即可迅速上手。
Ansible 采用控制节点(从中执行 Ansible)和托管节点(进行自动化的端点)概念,可以包含 Linux® 服务器、Windows 服务器、网络设备,以及许多其他裸机、虚拟、公共云和容器化平台。由于 Ansible 是无代理的,它可与大量端点通信,无需在托管节点上安装应用或服务。例如,许多网络设备和路由器是封闭系统,通常无法在其上安装软件代理。
Ansible 使用一种程序性(或命令式)编程方法,用户需要明确地指定每一步操作,告诉系统如何逐步达到预期的结果,以此来维护 IT 基础架构的配置。
Puppet
开源 Puppet 是一款采用 Ruby 编写的开源 IT 自动化应用,提供包括 Puppet Enterprise 在内的一系列产品。可扩展性是 Puppet 的一大优势。Puppet 采用模型驱动方法和命令式任务执行,可专门用于对大规模混合基础架构开展自动化。
Puppet 拥有一个活跃的开源社区,但贡献者人数和依赖于它的项目数量要少于 Ansible(根据截至 2022 年秋季的 GitHub 分析数据)。对其主要存储库的贡献也已大幅减慢。
Puppet 的工作方式也与 Ansible 不同。Puppet 通常作为基于代理的解决方案来运行,需要在其管理的每个设备上安装相应软件,但它也包含无代理功能。
Puppet 采用声明性编程理念;换而言之,由用户定义受管理机器的预期状态。Puppet 使用域特定语言(DSL)来定义这些配置。然后,Puppet 自动执行所需的步骤,使系统达到定义的状态。Puppet 会使用主服务器(在其上存储定义的状态)和 Puppet 代理(在您指定的系统上运行)来处理自动化。
基础的自动化术语
基于代理的架构是指一种基础架构和自动化模型,它需要对受管理的清单运行特定的软件组件(称为代理)。代理及其所有依赖项需要安装到每一目标节点上,因此需要额外的安全检查和规则。如果自动化目标上不可使用代理或不允许运行代理,这可能会成为一个难点。此外,它还需要将代理维护纳入到组织的维护支持生命周期中。
无代理架构(即 Ansible 使用的架构)指的是一种对 IT 设备进行自动化和管理的方式,它不需要在托管环境中安装任何代理软件。控制软件通过标准的安全 SSH 连接来连接到远程机器,无需大量设置工作即可开始管理这些机器。在这种架构中,一旦完成置备和配置,便不再需要维护代理部署系统。
声明性编程方法指的是通过编写代码来描述程序预期结果,而不是详细说明如何去做。它关注的是最终状态(利用声明性语言),而不是达成目标所需的具体命令和步骤。
程序性或命令式编程方法指的是通过编写代码来为计算机提供完成任务所需的指令列表(分步指南)。它关注的是过程,而不是最终状态。对于其自动化语言,Ansible 采用 YAML 这一种人类易读的数据序列化语言。YAML 语法以程序化方式解释和执行;也就是说,自动化工作流是按照编写时的顺序执行的。
哪一种自动化解决方案更好?
挑选自动化解决方案不仅要考虑当前软件中可用的功能,还要考虑平台更长远的前景。得益于高度活跃的开源社区和来自红帽的商用级支持,Ansible 在竞争中脱颖而出。
此外,企业组织同时使用多个自动化解决方案也是常态。Ansible 可打通一个大型集成生态系统,并且可作为自动化工具的编排器与众多其他自动化和配置管理工具搭配使用。Ansible 可对公共云超大规模环境(如 Amazon Web Services(AWS)、Microsoft Azure 和 Google Cloud Platform 等)中的系统实施自动化。
相比于 Puppet,用户如果希望能够继续利用现有知识和专长,并优先考虑易用性和无代理自动化解决方案,那 Ansible 就是更优之选。 它还背靠一个庞大的贡献者社群,普及率高,而且因为能与其他工具集成而被高度推崇。
红帽的与众不同
红帽 Ansible 自动化平台以开源为核心,是一款经过安全强化且久经检验的订阅产品,可为企业组织提供完整的生命周期支持。其上游项目 Ansible 凝聚了全球数千名贡献者的经验和智慧。
Ansible 自动化平台囊括了众多上游组件、来自 60 多个合作伙伴的、经过红帽 Ansible 认证的 130 多个内容集,以及即服务型投资回报率(ROI)工具,可大大消除您的企业在安装、配置和支持自动化时的不确定因素。它能专门针对跨职能团队打造端到端的自动化体验,同时在自动化开发人员、工程师和运维团队之间提供即装即用的体验。
红帽 Ansible 自动化平台的功能(例如自动化分析和红帽智能分析)可提供关于自动化性能的信息,您可以根据这些信息更加精确地衡量影响并监控或解决问题。自动化网格通过独立地扩展控制和执行容量,使自动化延伸到更接近需要自动化的端点,而且几乎不会有停机时间,让您从数据中心到云端乃至边缘位置,都能获得一致的自动化体验。
作为一种无代理、易用的 IT 自动化选择,Ansible 还因为其简单易用和强大的用户社群而傲立于同类产品。
红帽官方博客
获取有关我们的客户、合作伙伴和社区生态系统的最新信息。