Terraform Vs Ansible

举报
kaliarch 发表于 2022/06/11 12:22:55 2022/06/11
【摘要】 前言Terraform 和 Ansible 都是 DevOps 工具,但是这些 DevOps 工具有什么不同呢?简而言之,Terraform 是一个开源的基础设施即代码平台,而 Ansible 是一个专注于基础设施配置的开源配置管理工具。关于是否应该使用 Terraform 或 Ansible 进行基础架构管理,这通常是一个讨论主题。幸运的是,灰色地带有一个答案。当被问到对这两种工具都有工...

前言

Terraform 和 Ansible 都是 DevOps 工具,但是这些 DevOps 工具有什么不同呢?简而言之,Terraform 是一个开源的基础设施即代码平台,而 Ansible 是一个专注于基础设施配置的开源配置管理工具。

关于是否应该使用 Terraform 或 Ansible 进行基础架构管理,这通常是一个讨论主题。幸运的是,灰色地带有一个答案。当被问到对这两种工具都有工作经验的人时,这个答案似乎是一样的。

这篇文章重点介绍了 Terraform 和 Ansible 之间的相似之处,探讨了差异,并以管理基础设施的最佳方式结束。

一 相似之处

在非常高的层次上,考虑到这两种产品的功能,Terraform 和 Ansible 是类似的工具。它们都能够配置新的云基础架构并使用所需的应用程序组件对其进行配置。

Terraform 和 Ansible 都能够在新创建的虚拟机上执行远程命令。这意味着,这两个工具都是无代理的。出于操作目的,无需在机器上部署代理。

Terraform 使用云提供商 API 创建基础设施,并使用 SSH 完成基本配置任务。 Ansible 也是如此——它使用 SSH 来执行所有必需的配置任务。两者的“状态”信息都不需要一套单独的基础设施来管理,因此这两种工具都是无主的。

二 不同之处

上一节概述了这两种工具最广泛的相似之处。在高层次上,听起来 Terraform 和 Ansible 都能够进行供应和配置管理。然而,更深入地研究它们使我们意识到在某些领域中一种优于另一种的好处。

一般来说,这两种工具都有各自的优点。在基础设施管理方面,它们具有重叠的功能。基础设施管理大致包括两个方面——编排和配置管理。

Terraform 和 Ansible 有自己的管理方式——在重叠方面各有优缺点。

Terraform 和 Ansible 有自己的管理方式——在重叠方面各有优缺点。因此,深入研究这两种工具的一些细节以做出“完美”的选择或结合边界是很重要的。

2.1 编排 VS 配置管理

编配/配置是一个创建基础设施的过程——虚拟机、网络组件、数据库等等。然而,从另一方面来说,组态管理安装是一个自动化的过程,包括版本化的基于组件的软件工程安装、操作系统配置任务、网络和防火墙配置等等。

Terraform 和 anable 都能够同时完成这两项任务。然而,Terraform 提供了一个全面的基础设施管理解决方案。Terraform 使用云提供程序 api 根据已声明的资源提供和取消提供基础设施。

另一方面,Ansible 也能够提供云基础设施,但是它还不够全面。它主要面向组态管理。组态管理是一个保持应用程序和依赖关系最新的过程。与 Terraform 相比,这才是安塞贝尔真正闪光的地方。

这两种工具都可以执行这两种活动。然而,在使用 Terraform 实现组态管理和基础设施自动化时,使用 Ansible 是有局限性的。在复杂的基础设施管理方面,它们不够灵活。

从逻辑上讲,我们可以将编排识别为第 0 天活动,将配置管理识别为第 1 天活动。 Terraform 最适合第 0 天的活动,而 Ansible 最适合第 1 天及以后的活动。

2.2 声明式 VS 命令式

Terraform 用于将基础设施编写为代码 (IaC)。它使用本质上是声明性的 HCL(Hashicorp 配置语言)。编写代码的顺序无关紧要。代码也可以分散在多个文件中。

无论如何编写代码,Terraform 都会标识依赖项和条款基础结构。在 Terraform 中编写或将现有基础结构转换为代码很容易。如果你想了解更多有关 Terraform 管理下导入基础设施的信息,请查看这篇文章。

Ansible 使用 YAML 语法来定义在目标基础设施上执行的过程。 Ansible YAML 脚本本质上是程序性的——这意味着当您编写脚本时,它将从上到下执行。

Ansible 脚本被称为“ansible playbooks”。当您必须执行某些系列的任务时,您可以在剧本中定义相同的任务。这些任务将按照它们编写的顺序执行。例如,要以 root 用户身份在给定的虚拟机上安装 Apache 服务器,您必须在定义安装任务之前编写用户创建步骤。

2.3 可变 VS 不可变

当可以在不重新启动或更换基础架构的情况下更改配置时,配置是可变的。如果不是,则配置被认为是不可变的。

在 Terraform 的情况下,可变性和不变性之间的界限取决于几个因素。Terraform 将基础设施的理想状态作为输入并提供给它。当引入变更时,Terraform 根据变更本身的性质做出决定。

如果云提供商不可能在不重新启动或替换基础设施的情况下实现更改,那么 Terraform 将更改基础设施。它破坏了旧的红外线组件,并取而代之的是一个新的与最新的配置设置。这种可变性还取决于资源中的各种依赖关系,例如,网络组件。

其他不需要替换的更改,Terraform 不替换基础结构。例如,更改 AWS ec2实例的实例类型不会导致替换资源。但是,更改 AMI 会导致资源被替换

另一方面,安塞普默认是不可变的。试图保持配置更改按照最新版本的剧本保持一致。引入的任何更改都不会导致基础基础结构的任何”替换”。它只修理或修改给定部件的配置。

随着时间的推移,由 Ansible 管理的服务器会记录它们所经历的配置更改。如果管理不当,这可能会导致其他服务器具有不同的配置。这种现象称为配置漂移。

默认情况下,虽然功能强大,但 Terraform 使用可变方法,而 Ansible 使用不可变方法。话虽如此,这两个工具也能够在有限的情况下使用这两种方法。

2.4 状态管理

Terraform 管理其管理下的资源的整个生命周期。它使用状态文件中的当前配置维护基础架构资源的映射。状态管理在 Terraform 中起着非常重要的作用。

状态用于跟踪对配置的更改并提供相同的配置。也可以通过在状态文件中导入真实世界的基础设施来导入 Terraform 管理下的现有资源。

在任何给定时间,都可以查询 Terraform 状态文件以了解基础设施组件及其当前可用的属性。

与此相反,Ansible 不支持任何生命周期管理。由于 Ansible 主要处理组态管理文件,并且考虑到它默认使用不可变的基础设施,因此在配置中引入的任何更改都会在目标资源上自动执行。

总结

正如我们目前所知,Terraform 最适合编排,而 Ansible 擅长配置管理。

当然,他们有能力执行彼此的任务,尽管方式有限。在这种情况下,与其做出坚定的选择,最好根据各自的优势利用这两种工具进行基础设施管理。

问题的答案是“使用哪种工具?”这要看情况。这取决于当前基础设施管理流程的形成。重要的是在编排和组态管理之间找到恰当的平衡,为各自的工具分配明确的责任。

如果您希望将基础设施管理为代码,Spacelift 是一个不错的选择。它支持 Git 工作流、作为代码的策略、编程配置、上下文共享,以及许多更好的特性。它目前与 Terraform、 Pulumi 和 CloudFormation 一起工作,并支持 Ansible 正在开发中!你可以通过在这里创建一个试用帐户来免费试用它。

参考链接

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。