一 前言
随着DevOps环境更加关注自动化和编排,Ansible和Terraform之间的战斗将继续升级。这两个工具有助于自动化配置和部署基础设施。Terraform提供了将基础设施作为代码进行部署,有助于提高可读性以及提升和转移部署。Ansible是一个用于自动化系统配置和管理的配置管理工具。
二 Terraform vs. Ansible
Terraform是一种工具,旨在使用“基础设施即代码”方法帮助部署和取消云基础设施。它在这方面是高度专业化的。另一方面,Ansible是一个更通用的工具,可以用于跨各个领域的自动化。Terraform和ansible都有强大的开源社区和得到良好支持的商业产品。 简而言之,Terraform是用于创建和管理IT基础设施的工具。Ansible自动化供应、部署和其他IT流程。
三 Terraform是什么
Terraform是一个开源工具,用于安全有效地构建、更改和版本化基础设施。它是一个基础设施即代码工具,使用起来非常简单。它有助于开发和扩展云服务,并管理网络状态。它主要用于数据中心和软件定义的网络环境。它不会在现有设备上安装和管理软件;相反,它创建、修改和销毁服务器和各种其他云服务。Slack、Uber、星巴克、Twitch,所有大品牌都在使用Terraform。我们还可以将Terraform与Microsoft Azure、Heroku、谷歌计算引擎等集成。
四 什么是Ansible
Ansible是自动化和配置应用程序和IT基础设施的最重要方式。Ansible是一个开源的配置管理工具,主要用于使用IaaC配置和部署应用程序。
它有自己的语言来描述系统配置。Ansible是无代理的,这使得它可以管理跨企业的大型部署,使用Windows Power Shell或SSH执行任务。Ansible不是完全声明性的;它是程序性和声明性的混合体。它可以与Amazon EC2、Docker和Kubernetes集成。Zalando、Revolt和9gaga等公司都在使用Ansible。
五 Terraform和Ansible的相似之处
考虑到这两种技术的特点,Terraform和Ansible在很大程度上似乎是非常相似的工具。
- 它们都能够设置新的云基础设施,并为其配备必要的应用程序组件。
- 在新创建的虚拟机上,Terraform和Ansible都可以执行远程命令。这表明这两种工具都不需要代理。出于操作原因,不需要在计算机上部署代理。
- Terraform利用云提供商的api构建基础设施,SSH用于简单的配置操作。Ansible也是如此;所有必要的配置活动都通过SSH进行。这两个工具都是无主的,因为它们的“状态”信息都需要单独的基础设施来管理。
六 Terraform和Ansible Provisioning的区别(Terraform vs. Ansible)
| Terraform | Ansible |
|---|---|
| Terraform is a provisioning tool. | Ansible is a configuration management tool. |
| It follows a declarative Infrastructure as a Code approach. | It follows a procedural approach. |
| It is the best fit for orchestrating cloud services and setup cloud infrastructure from scratch. | It is mainly used for configuring servers with the right software and updates already configured resources. |
| Terraform does not support bare metal provisioning by default. | Ansible supports the provisioning of bare metal servers. |
| It does not provide better support in terms of packaging and templating. | It provides full support for packaging and templating. |
| It highly depends on lifecycle or state management. | It does not have lifecycle management at all. |
七 业务流程与配置管理
Terraform和Ansible同时有如此多的相似点和不同点。当我们研究DevOps的两个重要概念时,差异就显现出来了:编排和配置管理。 配置管理工具可以在本地解决问题,而不是完全替换系统。Ansible帮助配置每个动作和仪器,并确保平稳运行,没有任何损坏或错误。此外,Ansible还提供了混合功能来执行编排和替换基础设施。 编制工具确保环境持续处于所需的状态。Terraform被显式地设计为存储域的状态。每当系统中出现任何故障时,terraform在重新加载后自动恢复并在系统中计算整个过程。它最适合需要恒定不变状态的情况。Terraform Apply有助于有效地解决所有异常。 让我们看看Terraform和Ansible的过程性和声明性。
八 声明式与过程式
DevOps工具主要有两类:过程式和声明式。这两类说明了工具的作用。 Terraform遵循声明性方法,确保如果您所定义的环境发生更改,它会纠正这些更改。该工具试图达到系统管理员所描述的所需的最终状态。Puppet也遵循声明性方法。使用terraform,我们可以自动描述所需的状态,并计算出如何从一个状态移动到下一个状态。 Ansible是混合性质的。它同时遵循声明式和过程式配置。它执行特别命令来实现过程风格的配置。请仔细阅读Ansible的文档,以深入了解其行为。了解是否需要增加或减少资源以获得所需的结果或需要显式地指出所需的资源是很重要的。
九 可变与不可变
应用程序部署的工作流包括提供基础设施、安装正确的源代码版本以及安装任何依赖项。 作为应用程序和服务后续版本基础的基础设施具有可变性。要么使用现有的基础设施进行部署,要么我们可以为其创建一组全新的基础设施。 基础设施是可变的还是不可变的取决于部署过程。当应用程序的后续版本在相同的基础架构上发布时,它被认为是可塑的。但是,如果部署发生在全新基础架构的发布期间,那么它就被认为是不可变的。 虽然可变性看起来很方便,但失败的几率更高。在相同的基础设施上再次应用应用程序配置时,必须首先卸载以前的版本,然后才能安装所需的版本。额外的步骤增加了失败的可能性。这可能导致整个服务器群的设置不一致和行为不可预测。 相反,如果我们专注于通过跳过卸载过程并在新的基础设施资源上执行安装来最小化这些步骤,我们将有机会测试新的部署并回滚它,以防它不起作用。这种将基础设施视为不可变的方法为管理员提供了更多的更改控制。
十状态管理
terrraform管理下的资源的整个生命周期都得到了管理。它将基础设施资源的状态文件映射到最新的配置。国家管理对terrraform的运作至关重要。 状态用于监视配置更改并提供相同的更改。此外,通过从现实世界的基础设施引入状态文件,可以导入Terraform管理的预先存在的资源。 可以随时查询Terraform状态文件,以了解基础设施组件及其可用特性。 相反,Ansible不提供任何形式的生命周期管理。对配置所做的任何更改都会自动在目标资源上实现,因为Ansible专注于配置管理,默认情况下假设基础设施是不可变的。
十一 Terraform vs Ansible Provisioning
Terraform处理基础设施自动化。它目前的声明式模型缺乏一些特性,导致了复杂性。使用Terraform,将分别描述所需环境的元素,包括它们之间的关系。它评估模型,根据依赖关系创建计划,并向基础设施即服务提供优化的命令。如果环境或策略没有变化,重复运行将不起任何作用。如果计划或环境中有任何更新,它将同步云基础设施。 Ansible遵循程序方法。各种用户创建剧本,通过从上到下的方法进行评估,并按顺序执行。剧本负责网络设备的配置,这有助于实现过程化方法。当然,Ansible也提供云基础设施。但它的程序性方法限制了大型基础设施的部署。
十二 Terraform是如何工作的?
terraform有两个主要的工作组件。
- terraform core
- terraform Providers
Terraform具有声明性。它直接描述了系统的最终状态,而不定义到达那里的步骤。它在高层次的抽象上工作,以描述应该创建和定义什么服务和资源。 Terraform core需要两个输入源来完成它的工作。第一个输入源是由用户配置的terraform配置。用户定义需要提供和创建的内容。第二个输入源是保存有关基础设施信息的状态。 所以terraform core获取输入,并制定各种计划,以遵循哪些步骤来获得所需的输出。
第二个主要组件是提供商,如AWS、GCP、Azure等云提供商或其他基础设施即服务平台。它有助于在不同级别上创建基础设施。让我们以用户创建AWS基础设施为例,在其之上部署Kubernetes,然后在Kubernetes集群中创建服务。Terraform有多个提供各种技术的供应商;用户可以通过terraform访问这些提供者的资源。这是terraform的基本工作术语,有助于提供和涵盖从基础设施到完全开发的应用程序的完整应用程序设置。
十三 Terraform的特点
我们已经讨论了Terraform的工作原理,现在我们来看看Terraform的特性。
- Terraform遵循一种声明式的方法,这使得部署快速而简单。
- 它是一种以图形形式显示结果模型的方便工具。
- Terraform还管理外部服务提供商,如云网络和内部解决方案。
- 它是从零开始构建基础设施的罕见工具之一,无论是公共、私有还是多云。
- 它有助于管理并行环境,使其成为测试、验证错误修复和正式验收的好选择。
- 模块化代码有助于实现一致性、可重用性和协作。
- Terraform可以管理多个云以提高容错能力。
十四 Ansible是如何工作的?
Ansible是无代理的,不会在目标节点上运行。它使用SSH或其他身份验证方法进行连接。它使用JSON在目标上安装各种Python模块。这些模块是在目标上运行的简单指令。一旦这些模块的工作完成,就会执行并删除它们。这一策略确保了目标上的资源不会被滥用。在控制节点和目标节点上都必须安装Python。
一个管理节点作为一个控制节点,控制剧本的整个执行。该节点是运行安装的位置。有一个清单文件提供需要在其中运行模块的主机列表。管理节点建立SSH连接以执行主机上的模块并安装产品。模块一旦安装到系统中,就会被移除。这是Ansible的简单工作过程。 让我们来看看ansible的特点。
十五 Ansible的特点
现在我们将讨论Ansible为用户提供的各种功能。
- Ansible用于配置管理,遵循一种过程化的方法。
- Ansible处理基础设施平台,如裸机、云网络和虚拟设备,如管理程序。
- Ansible遵循幂等行为,使得它每次都将节点置于相同的状态。
- 它在整个基础设施中使用基础设施作为代码系统配置。
- 它提供了快速和简单的部署多层应用程序与代理。
- 如果代码被中断,它允许再次输入代码,而不会与其他调用发生冲突。
十六 选择哪一个:Terraform还是Ansible?
Terraform vs. Ansible:每个工具都有其独特的特点和局限性。我们来看看该选哪个。 Terraform具有良好的调度功能,并且非常用户友好。它与docker集成得很好,因为docker在配置管理方面比Terraform稍好一些。但是没有明确的证据表明目标设备是如何达到最终状态的,有时,最终的配置是不必要的。 Ansible具有更好的安全性和ACL功能。它被认为是一个成熟的工具,因为它可以很好地适应传统的自动化框架。它提供了简单的操作,并有助于快速编码。但是,另一方面,它不擅长逻辑依赖、编排服务和相互连接的应用程序等服务。 现在你可以根据情况和工作的要求在这两者之间进行选择。例如,如果容器化解决方案用于在云中提供软件,那么更可取的是Terraform。另一方面,如果你想获得对设备的合理控制,并找到部署底层服务的其他方法,Ansible更适合。这些工具将在未来提供更全面的解决方案。
总结
了解Terraform和Ansible中哪个工具用于哪个工作是很重要的。Terraform主要以跨各种云提供基础设施而闻名。它支持超过200个提供商和一个管理服务器下面的云服务的好工具。相比之下,Ansible经过优化,可以执行供应和配置管理。因此,我们可以说Terraform和Ansible都可以作为独立的工具一起工作,也可以一起工作,但总是根据工作要求选择正确的工具。
本文正在参加「金石计划」