共计 2804 个字符,预计需要花费 8 分钟才能阅读完成。
基础设施即代码(IaC)是指应用代码和软件开发技术来配置和治理基础设施的实际。IaC 背地的逻辑是尽量打消手动配置基础设施和资源的需要 ,比方服务器、负载平衡以及数据库等。因为基础设施是整个软件开发流程的一个组成部分,并且与利用交付更严密地分割在一起,因而让基础设施的更改更容易交付非常重要。
应用代码来定义和治理基础设施及其配置,能够让开发者采纳版本控制、测试和自动化部署等技术,这有助于防止各种利用问题产生,比方性能瓶颈、性能故障等。
Terraform 是一个被宽泛应用的开源 IaC 工具,用户能够以申明式的形式来治理基础设施。借助 Terraform,用户能够应用简略的配置语言治理多个不同云厂商的云资源,比方 AWS、Azure、GCP 等。
本文将会介绍 Terraform 的根底,包含架构、工作原理、工作流程及最佳实际等方面的内容。
Terraform 架构
Terraform 是一款基于插件的工具,因而其有一个外围利用 Terraform,和上百个插件。外围利用提供了一个对立的层来治理 IaC 代码,并且它还会负责装置所需的插件,调用它们、治理状态等。另一方面,插件能够与基础设施平台和利用通信,如 AWS、GCP、Grafana、Jenkins、GitLab 等。其中一些插件由 Hashicorp 团队保护,另外的那些则是由第三方保护。每个人都能够编写并公布本人的插件,拜访下方网站能够获取插件库:
https://registry.terraform.io/
Terraform 插件由两大次要类型:Provider 和 Provisioner。Provider 是通过 API 负责与理论基础设施或利用进行连贯,并创立、批改和删除对象和资源。Provisioner 是负责连贯曾经配置好的基础设施并对其进行更改。例如,你能够应用 AWS Provider 来配置一个 EC2 实例,并在配置实现后近程执行 Provisioner 来在实例上执行某些命令行。(须要留神的是,Provisioner 通常不是最佳实际)
Terraform 外围概念
本节介绍一些 Terraform 中应用的外围概念 / 术语:
- Variables:也被称为 input-variables(输出变量),它是 Terraform 模块应用的键值对,能够自定义。
- Provider:一种插件类型,与 API 服务进行交互并拜访相干资源。
- Module:它是一个蕴含 Terraform 模板的文件夹,所有的配置都能够在这里定义。
- State:它由 Terraform 治理的基础设施和相干配置的缓存信息组成。
- Resources:它指一个或多个基础设施对象(计算实例、虚构网络等)的块(block),这些对象用于配置和治理基础设施。
- Data Source:它是由 provider 实现的,以返回内部对象的信息到 Terraform。
- Output Values:这是 Terraform 模块的返回值,能够被其余配置应用。
- Plan:这是指其中一个阶段,在这一阶段中会决定须要创立、更新或销毁什么,以便从基础设施的 real/current 状态转移到冀望状态。
- Apply:这一阶段会利用基础设施的更改 real/current 状态,以推动到冀望状态。
Terraform 生命周期
Terraform 的生命周期由 init、plan、apply 和 destroy,4 个阶段形成。
- Terraform init 初始化工作目录,其中包含所有的配置文件。
- Terraform plan 被用来创立执行打算以达到基础设施的冀望状态。为了达到预期状态,会对配置文件进行更改。
- Terraform apply 会对在 plan 阶段中定义的基础设施进行更改,从而使基础设施达到冀望状态。
- Terraform destroy 这一阶段用于删除所有的旧基础设施资源,这些资源在 apply 阶段后被标记为污损(taint)。
Terraform 的工作原理
Terraform 能够让用户通过配置文件定义和治理整个基础设施和版本控制。这次要由 Terraform 架构中的两个次要组件来实现这一指标:Core 和 Provider。
Terraform Core 如何工作
要实现工作,Terraform core 须要应用 2 个输出源。第一个源将用户配置输出到 Terraform,并定义须要创立或配置什么资源。第二个输出源包含向 Terraform 提供的对于以后基础设施设置状况的数据。
Terraform 会获取这些输出信息并决定下一步应该如何进行。它采纳用户指定的冀望状态,并将其与以后状态进行比照,进而对架构进行配置以打消两种状态之间的差距。Terraform core 实质上是要计算出须要创立、更新或删除的内容,以便全面配置基础设施。
Terraform Provider 如何工作
第二个让 Terraform 运行的要害组件是 provider。常见的是云厂商,如 AWS 或 Azure,但其余基础设施或平台服务工具也能够。例如,Kubernetes 也是 Terraform 用的一个 provider。
Terraform 有上百个不同技术的 Provider 可供用户拜访。例如,如果你正在应用 AWS,Terraform 能够拜访 EC2 实例和在这一技术栈内的其余资源。接着,用户能够在不同层级上创立基础设施,比方在 Azure 上构建 Kubernetes。
这就是 Terraform 的工作原理:应用 Core 和 Provider 性能来疾速实现应用程序和基础设施的设置,并且仅仅应用代码即可。
Terraform 工作流程
Terraform 的工作流程由以下 3 个步骤组成:
Step 1:写
在 Terraform 工作流程的第一步中,用户须要应用 Haschicorp Configuration Language(HCL)来将基础设施资源申明为代码。
Step 2:审核
接下来,Terraform 会展现其打算,它会依据用户设置的冀望状态和现有资源的以后状态进行比拟,来减少或移除资源。
Step 3:利用
最终,承受打算的更改,来减少或删除任何基础设施资源。而后基础设施将在 Terraform 的帮忙下进行全面部署。
Terraform 最佳实际
- 应用版本控制来治理 Terraform 配置
- 在存储后端近程保留你的 Terraform 状态
- 应用变量来确保你的配置更灵便和可复用
- 应用模块来整顿你的配置并将其共享给别人
- 应用 terraform plan 命令来在利用之前预览更改
总结
Terraform 是 IaC 畛域备受开发者青眼的开源工具,本文介绍了 Terraform 的根底,包含其工作流程、工作原理、外围概念以及架构解释,心愿能够帮忙你初步理解这个弱小的工具。除了 Terraform 自身领有弱小的性能之外,还有十分欠缺的配套文档和教程,帮忙开发者疾速上手应用。
教程地址:
https://developer.hashicorp.com/terraform/tutorials