Terraform 和 Ansible 的区别
DevOps 社区中最常听到的比较是 Terraform 与 Ansible。Ansible 是一种配置管理工具,而 Terraform 是一种配置管理和预配工具。这些技术使我们在各种可重复的场景中,即使面临复杂的约束条件,也能更轻松地部署我们的代码和其他基础设施。在此之前,如果没有这些工具,这个过程要困难得多。
Terraform 定义
Terraform 是 DevOps 团队用来构建和部署各种基础设施资源的工具,包括虚拟机、负载均衡器和网络,它使用描述性语言和模型。借助 Terraform 的基础设施即代码 (IaC) 框架,IT 基础设施可以避免偏离预期的配置。
此解决方案用于安全高效地创建、修改和版本控制基础设施。它用于管理专有解决方案以及知名供应商提供的解决方案。它使用声明式、易于学习的 HashiCorp 配置语言 (HCL) 来创建和提供端到端的 IT 基础设施。
私有云(如 VMware vSphere、CloudStack 和 OpenStack)以及公共云(如 Google Cloud Platform、Amazon Web Services 和 Microsoft Azure)都可以托管本地部署的 Terraform 管理的基础设施。
使用多云架构的团队可以使用 Terraform 在多个云平台上构建单一流程。即使是目前只使用单一云的企业,也会受益于 Terraform,特别是因为它使将来迁移到多云更容易。
Ansible 定义
开源 Ansible 引擎自动化了众多其他 IT 操作,包括部署、编排、预配和配置管理。Ansible 的主要优势在于为跨平台 IT 支持提供简化、强大的自动化功能。它易于实施,并且独立于安全基础设施和代理软件,非常适合简化组织的 IT 操作。
Ansible 使用以简单脚本样式表达的指令来自动化流程,这也有利于高效的版本控制。借助其功能,DevOps 专业人员可以利用 IaC 的优势,以类似于软件开发的方式管理服务器和客户端基础设施。Ansible 使得构建经过验证的组织维护解决方案变得容易,因为它保证了高效且持久的自我文档化,而不管员工变动如何。
Ansible 不仅对企业应用程序有用,对最终用户也很有用,因为它使他们能够同时设置单个机器以及整个计算机网络。由于其指令易于人类理解,其文件也易于掌握,用户无需深入了解编程即可使用它。
Ansible 和 Terraform 的主要区别 | |
---|---|
Terraform | Ansible |
Terraform 完全是声明式的;在声明式中,我们声明真正需要什么,而不是获得所需结果将采取的步骤。在使用 terraform 时,我们将指定环境,如果环境稍后发生更改,它只会反映在下一个“Terraform Apply”中。由于此代码是声明式的,它始终反映基础设施的当前状态。 |
与 Terraform 不同,Ansible 可以接受临时更改请求,并使用逐步方法的过程方法来实现目标。在处理过程任务时,我们并不总是考虑基础设施的状态。随着状态的变化,过程代码的可重用性非常有限。 |
如果我们使用 Terraform 部署由 Docker 或 Packer 创建的机器镜像,那么每次更改,就像在函数式编程中一样,都是对新服务器的部署。这种方法与 Ansible 方法相比,大大降低了配置问题的可能性。这使得简单的回溯成为可能,以便我们可以在出现问题时立即回滚。此配置管理工具还具有执行强制不变部署的功能,但不推荐这样做。 |
Ansible 是一个自动采用可变基础设施范例的工具。随着时间的推移,我们进行的更改越多,每个服务器都会累积修改历史记录,从而导致配置漂移,这是一种性能现象,其中每个服务器逐渐偏离其他服务器,有时会产生几乎难以复制的问题。 |
云组建、puppet 等是一些在其使用中使用声明式代码的程序员,这意味着它们是为了自行提供服务器而制作的。Terraform 是一个预配工具。它们还负责负载均衡器、数据库网络和其他基础设施。虽然大多数配置管理工具可以在某种程度上进行预配,大多数预配工具也可以在某种程度上同时进行这两项工作,但当我们关注特定方面时,某些工具显然比其他解决方案更适合。 |
Ansible 是一种配置管理工具,其他类似的工具包括 Chef、Puppet 等。Chef 是另一种使用这种过程方法的工具。 |
Terraform 也是无主机的。在某些方面,它可能看起来像 API 服务器是主服务器,因为 Terraform 通过其 API 与云提供商交互,但它们不需要任何额外的基础设施或身份验证方法。 |
Ansible 是无主机的。某些工具,如 Chef 和 Puppet,需要一个主服务器来保存更改并分发更新。但是,这样做会带来额外的安全风险和更高的基础设施维护成本。 |
Terraform 的安装无需额外的代理。虽然其中一些可能需要代理,但这些代理已包含在软件包中,因此您无需安装任何额外的支持代理。 |
Terraform 的安装无需额外的代理。虽然其中一些可能需要代理,但这些代理已包含在软件包中,因此您无需安装任何额外的支持代理。 |
结论
现在我们已经看到了这两个著名的 DevOps 工具之间的比较,我们可以分析出 Terraform 用于预配管理,而 Ansible 主要用于配置管理。以 terraform 为例,我们可以组合多个工具。所有必要的基础设施,包括 VPC、子网、路由表、负载均衡器等,都可以通过使用它来部署。然后,我们甚至可以使用 Ansible 在创建的基础设施之上部署我们的应用程序。