基础架构即代码详解

介绍

Cloud computing提供按需计算资源,这些资源与物理硬件和必要的底层配置分开。自动软件系统在云中提供这些计算资源,以实现云计算提供的自动化。由于这种自动化,可以通过与云提供商接口来编程控制和操纵可用的资源。这样,基础设施的变化(如资源扩展)可以更快、更可靠地实现,而且大多数情况下没有手动交互,但仍有能力监督整个过程并逆转变化,如果某些事情不按计划进行。

基础设施作为代码(IaC)是通过在代码中定义所需的资源状态和它们之间的相互关系来自动化基础设施部署和变化的方法。代码是用IaC工具的专门可读语言编写的。当您执行代码时,云中的实际资源被创建(或修改)。

要使 IaC 在实践中工作,创建的资源不必随后被手动修改(a immutable infrastructure,因为这会导致代码中的预期基础设施和云中的实际状态之间的分歧。

在这篇概念文章中,我们将探讨 IaC 方法,它的好处,以及现实世界实现的例子,我们还将介绍一个开源的 IaC 配置工具,Terraform(https://terraform.io/)。

IAC 的好处

借助 IaC,您可以快速创建您需要的整个基础设施的许多实例,在多个提供商区域,从一个真相来源:您的声明代码。

IaC的主要好处是:

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

在 IaC 工作流程中,您可以以标准化的方式反复升级基础设施,这意味着软件开发和测试是一个更快的过程,因为开发、阶段化、质量保证测试和生产环境是分开的。

General IaC Workflow

IaC 是基于代码的,应该始终与版本控制软件(VCS)相结合,例如 Git。在 VCS 中存储基础设施声明使其易于检索,对团队中的每个人都可看到更改,并提供历史点的快照,因此如果新的更改造成错误,您可以随时返回以前的版本。

您现在知道 IaC 方法是什么,以及它带来了哪些好处. 您现在将了解 stats,在 IaC 中使用的资源跟踪机制。

什么是国家?

在 IaC 环境中,术语状态指部署中所需基础设施资源的状态。在某一时刻,至少有三种状态:云中的实际状态,代码中呈现的理想状态,以及 IaC 工具维护的缓存状态。

How State is Changed

云中的实际状态(管理资源)应始终与工具的缓存状态相同。在执行代码时,工具会将理想状态与缓存状态进行比较,并将检测到的差异应用到云中。

在 IaC 中的 Terraform 的作用

Terraform是一个开源的 IaC 资源提供工具,用 Go编写,由 Hashicorp开发。它支持多个云提供商,包括 DigitalOcean。基础设施的定义是用 Hashicorp Configuration Language (HCL) 编写的,并在其中编写的源代码文件具有文件扩展 tf

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

Terraform 中的两个主要类型的底层组件是 providersprovisioners. 提供商负责与特定云提供商互动,创建,管理和删除资源,而提供商用于在创建的远程资源或执行代码的本地机器上执行特定操作。

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

在 IaC Terraform 中,其作用是确保云中的资源状态等于代码中表达的状态,它不监控部署的资源,其主要重点不在于进一步启动提供的计算实例与软件和任务。

使用 IaC 的工具

IaC方法在现代部署、配置管理(https://andsky.com/tech/tutorials/an-introduction-to-configuration-management),虚拟化和编排软件中很普遍。 DockerKubernetes,用于集装箱创建和编排的领先工具,两者都使用YAML作为声明所需的最终结果的语言,另一方面, Hashicorp Packer,用于创建部署截图的工具,使用JSON来声明将构建系统截图的模板和变量。

Ansible, ChefPuppet,三种最流行的配置管理工具,都使用 IaC 方法来定义他们所管理的服务器的所需状态。

Ansible bootstraps 根据给定的 playbook 提供服务器。 播放簿是用适当的 YAML 编写的文本文件,指示 Ansible 对现有目标资源执行哪些操作。 此类操作的例子包括运行和启动服务,使用系统提供的包管理器安装包,或执行自定义 bash 命令。

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

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

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

Terraform 可以从单台机器运行,不需要在提供的资源上安装客户端代理的中央服务器,与其他一些工具不同. 它不会检查它们的实际状态,并且会自动重新应用配置,因为其主要重点是提供它们。

对于 Chef,Terraform 有一个 内置的提供者,它将其客户端代理设置在提供的远程资源上. 通过它,您可以自动将所有提供的服务器添加到主服务器中,从那里您还可以使用 cookbooks, Chef 的基础设施声明来配置它们。

结论

本文涵盖了 IaC 方法的范式,其对传统手动系统管理的优势,Terraform 作为一个 IaC 资源提供工具的基本知识,以及它与其他流行的基础设施自动化工具的比较。

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

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

Published At
Categories with 技术
comments powered by Disqus