基础设施即代码解释

介绍

云计算提供按需计算资源,与物理硬件和必要的底层配置解耦。自治软件系统在云中提供这些计算资源,以实现云计算提供的自动化。由于这种自动化,可以通过与云提供商的接口以编程方式控制和操作可用资源。通过这种方式,基础设施变更(例如资源扩展)可以更快、更可靠地实施,并且在大多数情况下无需手动交互即可运行,但仍然能够监督整个过程并在某些事情没有按计划进行时恢复更改。

基础设施即代码(IaC) 是一种通过在代码中定义所需资源状态及其相互关系来自动化基础设施部署和更改的方法。代码是用专门的、人类可读的 IaC 工具语言编写的。当您执行代码时,会创建(或修改)云中的实际资源。然后,这会提示该工具代表您与云提供商或部署系统交互以应用必要的更改,而无需使用云提供商的 Web 界面。代码可以在需要时进行修改——在代码执行时,IaC 工具将负责查找代码中所需的基础设施与云中的实际基础设施之间的差异,采取措施使实际状态等于所需的状态。

对于IAC在实践工作中,创建资源不能手动后(修改一个不变的基础设施),因为这会产生代码的预期基础设施和实际状态在云之间的不和谐。此外,手动修改的资源可能会在未来的代码执行期间重新创建或删除,并且所有此类自定义都将丢失。对此的解决方案是将修改合并到基础设施代码中。

在这篇概念性文章中,我们将探讨 IaC 方法、它的好处以及实际实现的示例。我们还将介绍Terraform,这是一个开源 IaC 配置工具。我们将回顾 Terraform 在这种方法中的作用以及它与其他 IaC 工具的比较。

IaC 的好处

借助 IaC,您可以根据需要在多个提供者区域中从单一事实来源(您的声明性代码)快速创建整个基础架构的多个实例。这具有许多优势,可确保您始终如一地创建资源而不会出错,同时减少管理和手动设置时间。

IaC 的主要优点是:

  • 部署:消除与云提供商的手动配置交互意味着更快的部署速度。
  • 恢复:识别配置中的问题可能意味着从故障中快速恢复。
  • 一致性:每次部署资源都是一样的,解决基础设施的脆弱性。
  • 修改:修改资源可以有一个快速的周转时间。
  • 可重用性:在未来的项目中重用部分基础架构架构。
  • 版本控制:将基础架构代码存储在版本控制系统中。
  • 可见性:将配置作为代码编写作为基础设施的文档。

在 IaC 工作流中,您可以以标准化方式反复启动基础设施,这意味着软件开发和测试是一个更快的过程,因为开发、登台、质量保证测试和生产环境是分开的。您可以根据需要多次部署基础架构,从而重复编写代码并对其进行实时测试的过程。一旦您的书面基础设施满足所有要求,您就可以将其部署在所需的云环境中。当出现新需求时,您可以重复该过程。

通用 IaC 工作流程

IaC 基于代码,应始终与版本控制软件 (VCS) 相结合,例如Git将基础架构声明存储在 VCS 中使其易于检索,更改对团队中的每个人都可见,并提供历史点的快照,因此如果新修改产生错误,您始终可以回滚到早期版本。高级 VCS 可以配置为在添加批准的更改时自动触发 IaC 工具以更新云中的基础架构。

您现在知道 IaC 方法是什么,以及它带来的好处。您现在将了解状态,即 IaC 中使用的资源跟踪机制。然后,您将使用 IaC 跟进 Terraform 和其他工具的作用。

什么是“状态”?

在 IaC 环境中,术语“状态”是指部署中所需基础设施资源的状态。在给定时刻至少有三种状态:云中的实际状态、代码中呈现的理想状态以及 IaC 工具维护的缓存状态。缓存状态描述了上次执行代码时云中的状态。Terraform 允许您多次部署相同的代码,为每次部署形成多个状态。

状态如何改变

云中(托管资源的)的实际状态应始终与工具的缓存状态相同。执行代码时,该工具会将理想状态与缓存的状态进行比较,并将检测到的差异应用到云中。如果缓存状态和实际状态不匹配,则执行很可能会失败或资源配置不正确。

Terraform 在 IaC 中的作用

Terraform是一个开源的 IaC 资源配置工具,用Go编写,Hashicorp开发它支持多个云提供商,包括 DigitalOcean。基础设施定义是用Hashicorp 配置语言(HCL) 编写的,用它编写的源代码文件的文件扩展名为tf.

Terraform 通过阅读描述您的基础设施的代码并生成一个包含所有资源及其相互关系的图表来工作。然后将其与云中资源的缓存状态进行比较,并准备一个执行计划,详细说明将应用到云中的内容以及达到所需状态的顺序。

Terraform 中的两种主要底层组件类型是providersprovisioners提供者负责与给定的云提供者交互,创建、管理和删除资源,而提供者则用于对创建的远程资源或执行代码的本地机器执行特定操作。

Terraform 支持管理基本的云提供商组件,例如计算实例、负载均衡器、存储和 DNS 记录,但由于其可扩展性,可以添加更多提供商和供应商。

在 IaC Terraform 中,Terraform 的作用是确保云中资源的状态与代码中表达的状态相同。它不监控已部署的资源,其主要重点不是使用软件和任务进一步引导已配置的计算实例。在下一节中,您将了解它与其他工具的比较以及它们如何在典型的工作流程中相互扩展。

使用 IaC 的工具

IaC 方法广泛用于现代部署、配置管理、虚拟化和编排软件。DockerKubernetes是用于容器创建和编排的领先工具,它们都使用 YAML 作为声明所需最终结果的语言。另一方面,Hashicorp Packer是一种用于创建部署快照的工具,它使用 JSON 来声明模板和变量,系统快照将从这些模板和变量中构建。

AnsibleChefPuppet这三种最流行的配置管理工具都使用 IaC 方法来定义他们管理的服务器的期望状态。

Ansible 引导程序根据给定的playbook提供服务器剧本是用适当的 YAML 编写的文本文件,指示 Ansible 对现有目标资源执行哪些操作。此类操作的示例包括运行和启动服务、使用系统提供的包管理器安装包或执行自定义 bash 命令。要了解有关编写 Ansible 剧本的更多信息,请阅读配置管理 101:编写 Ansible 剧本

Chef 和 Puppet 都需要在每个托管服务器上安装代理的中央服务器。与 Ansible 不同,Chef 使用 Ruby,而 Puppet 使用自己的声明性语言来描述资源。

Terraform 与其他 IaC 工具和 DevOps 系统并不相互排斥。它的优势在于提供硬件资源,而不是进一步的软件安装和初始服务器设置。

与 Ansible 和 Chef 等配置管理工具不同,Terraform 不适合在目标资源上安装软件和设置任务。相反,Terraform 提供了用于与其支持的资源进行交互的提供程序

与其他一些工具不同,Terraform 可以在单台机器上工作,并且不需要在提供的资源上安装客户端代理的中央服务器。它不会检查它们的实际状态并自动重新应用配置,因为它的主要重点是供应它们。典型的工作流程是使用 Terraform 供应基础设施资源,然后在需要时使用配置管理工具引导它们。

对于 Chef,Terraform 有一个内置的供应器,可以在供应的远程资源上设置其客户端代理。有了它,您可以自动将所有配置的服务器添加到主服务器,从那里您可以使用cookbooks和 Chef 的基础结构声明额外配置它们您可以在配置管理 101:编写 Chef 食谱中了解有关编写它们的更多信息

结论

本文介绍了 IaC 方法的范例、它相对于传统手动系统管理的优势、Terraform 作为 IaC 资源供应工具的基础知识,以及它与其他流行的基础设施自动化工具的比较。

如果您希望将基础设施即代码纳入您的工作流程,请查看我们的Terraform 系列以了解在您的开发和部署过程中使用此工具的基础知识。

开始使用 Terraform 的一种方法是阅读如何构建您的 Terraform 项目,以了解如何确保您的基础设施保持可伸缩性和可扩展性。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁