什么是基础设施即代码? (IaC)

简介:什么是 IaC?

今天我们将熟悉一个称为基础设施即代码的概念。 基础设施即代码的想法在今天变得越来越流行。 IaC 是一种用于通过定义的机器可读文件而不是物理硬件配置或其他交互式配置工具来管理和配置数据中心的方法。 本文将分享它的用途、重要性以及企业为何努力利用此平台来实现预期的结果。 理解我们将同时考虑 IaC 的理论和实践部分是很重要的。

预IaC

要了解为什么基础设施即代码出现,我们需要了解在 IaC 之前发生了什么。 在经典的服务器管理模型中,有关服务器管理和结构的知识看起来像这样。

  • 所有的专业知识和解决方案都留给了开发人员和系统管理员。 如果 admin 或者开发人员离开公司,管理工作可能会延迟或减少到影响业务的程度,从而有效地停止许多业务流程。
  • 大多数(如果不是全部)信息都存储在服务器本身上。 同样,如果开发人员或 admin 无法解决这些服务器的问题,数据可能会丢失。
  • 如果记录了每个操作和配置,则该过程可能比应用实际更改花费的时间更长。 该文档不仅需要记录,还需要保持更新。

基础设施即代码 (IaC)

在这种情况下出现了一种解决方案,可以解决其中的许多问题。 随着服务器文档被翻译成人类可读、可维护、编写良好的代码的出现,IaC 可用于记录其中的更新和/或修改。 因此,我们看到了基础设施即代码 (IaC) 解决方案的开发。 该平台描述了以代码形式存在的整个基础设施,以及使用它并将其转换为工作基础设施所需的随附工具集。

因为人们容易犯错,他们无法记住对系统所做的每一次更改或修改。 考虑到这一点,人们注意到这些流程的自动化比人工做得更好更快。 通过自动化这些过程,编码架构将完成算法所说的一切。

这些是此场景中使用的算法类型。

  • 声明式 (功能性)——描述问题是什么以及预期的结果。
  • 至关重要的 (程序性)——专注于做出哪些改变。
  • 聪明的 — 解释了为什么应该以这种方式配置基础设施。

这些算法中使用了两种主要的 IaC 方法。

  • — 管理主机发送配置更改
  • — 主要主机本身初始化其配置的接收

配置管理与配置编排

配置管理包括 Chef、Puppet、Ansible 和 Saltstack 等工具,这些工具有助于在已配置的现有基础架构中配置软件和系统。 以下是一些最流行的配置管理工具。

工具

发布

方法

方法

写在

厨师

2009年

十二月和势在必行

红宝石

木偶

2005年

声明式

红宝石

盐堆

2011年

推拉

十二月和势在必行

Python

Ansible

2012年

十二月和势在必行

Python

以下是有关上述工具的一些信息。

  • Chef 是用于自动化和控制当前流程的配置管理系统。
  • Puppet 允许我们管理安装在多台计算机上的操作系统和应用程序配置。
  • SaltStack 是一个配置管理和远程执行系统。
  • Ansible 是一个用于描述和管理配置的系统。

配置编排工具,包括 Terraform、Google 等服务 Cloud 部署管理器和 Azure 资源管理器旨在自动部署服务器和其他基础结构。

工具

发布

方法

方法

写在

谷歌 Cloud 部署经理 2015年 声明式
地形 2014年 声明式

Azure 资源管理器

2014年 声明式

以下是有关上述工具的一些信息。

  • 谷歌 Cloud 部署管理器允许我们使用 yaml 文件以声明格式指定应用程序所需的资源
  • Terraform 是由 HashiCorp 创建的开源基础设施即代码软件工具。 用户使用称为 HashiCorp 配置语言 (HCL) 的声明性配置语言或可选的 JSON 定义和供应数据中心基础设施
  • Azure Resource Manager 是一种 Microsoft 工具,用于部署和管理 Azure 服务

除了系统管理员,IaC 还用于 DevOps 实践和 SRE 专业化。 DevOps 和 SRE 或站点可靠性工程师也是流行的方法。 来自不同领域的大多数情况都会发展为 DevOps 和 SRE。 系统工程师和管理员成长为 DevOps,而开发人员成长为 SRE。 情况并非总是如此,但它们是最受欢迎的版本。 理解这一点至关重要,因为我们将使用来自这些相关领域的示例。 现在让我们考虑使用 IaC 将面临哪些问题。

IaC 问题

系统多样性

假设我们有一个用高质量文档编写的定义明确的基础设施。 第一个问题是,在许多 IaC 情况下,DSL 或特定领域语言会发挥作用。 DSL 是对每个应用程序中使用的语言的描述。 大多数此类描述使用成熟的标记语言,如 YAML 或 JSON,其中许多语言早已存在并知道如何使用。 大多数公司都在扩展使用其他标记的能力,但有些公司使用自己的标记语言或其结构描述或修改。

对于要在其中使用 DSL 的每个程序,您需要了解如何解释、使用此描述、调试它并查找错误。 例如,在编程语言中没有这样熟悉的对象。

  • 变量
  • 实施条件
  • 评论功能(json格式,不存在,不提供)
  • 此外,高级对象,如类、OOP 等。

幸运的是,这些当前程序中的大多数都在尝试解决这些问题的同时进行了越来越多的开发。

技术多样性

下一个困境是我们没有单一的生态系统或技术堆栈可供使用。 与不同的技术相关的种类繁多。 让我们来看看这个问题的开发者方面。 开发人员往往更熟悉 IaC,因为他们编写了在 IaC 环境中使用的大部分代码。 如果开发人员使用 C# 编写,则将在那里使用与此编程语言相关的基础结构。 技术栈将与语言互联。 不幸的是,IaC 还没有那么简单。

最近,我们遇到了一个真实的例子。 Python 脚本启动了一个进程。 此过程生成一个 JSON 页面并将其放入分析器中。 然后分析器将其分解为 30 个文件,然后输入 Go 程序。 Go 中的变量通过 yaml 文件传递​​该输出。 结果就产生了一个扩展名为jsonnet的文件,需要再次转换成json,通过一种app API发送。 除了在IaC的结构中很难描述这一点,在这样的系统中查找问题的原因并进行调试就更加复杂了。

功能多样化

对于程序员来说,应用程序的开发是在一个任务框架内进行的。 这与一种语言相关联,与一种堆栈和技术相关联。 立即,实现这一目标可能会变得复杂。 虽然这些都是问题,但这些并不是最直接的问题。 我们可以告别以下方面:

  • 自动完成
  • 重构工具
  • 调试
  • 在启动或编译时检测错误

虽然这大部分都被开发人员使用,但它旨在使编写代码更容易。 我们通常在代码中描述我们的基础设施。 这些不是必不可少的方面,但它增加了开发和编写代码以及查找不可避免出现的错误所花费的时间。 我们不需要考虑如何充分描述基础设施、设计系统、编写可读代码等等。 现在我们需要考虑如何在语法上正确地编写代码和命令。 有各种独特的 IDE 可为初学者提供开发领域的帮助和建议。

IaC 测试

有人会说,这些担忧并不严重。 例如,有些测试是专门为 IaC 创建的,这些测试消除了许多问题和错误,但它们并不完美。 通常最好用编写程序本身的语言来描述目标。 由于 IaC 是一个新平台,一般测试和测试工具并不多。 目前,缺乏针对 IaC 的经过验证的测试,这可能是一个弱点。

考虑到这一点,我们采用了两种流行的工具(即 Java 和 Terraform)并在成熟度方面对它们进行了比较。 例如,在比较 Java 语言平台时,有大量用于测试的方法。 因为 IaC 从编程中获取了许多队列,所以本质上,我们正在使用相同的思维过程设计一个应用程序框架。 因此,我们使用 java 作为最流行的编程语言之一的示例,在 IaC 方面使用 terraform,因为它是一个流行的 IaC 程序。

最佳实践

Java 中有许多最佳实践,但由于 Terraform 是新的,因此定义的最佳实践较少。 我们使用 java 进行比较,因为 IaC 涉及在结构内进行编码。 由于 terraform 是用于基础设施描述的最流行的程序之一,

交流电

这是负数吗?

并不真地! 知识水平继续快速增长。 这方面的专家和报告经常出现,但这只是技术的开始。 将继续进行演变,以吸收和建立在早期的发展基础上。 不要忘记,我们也可以在其他领域成功实施这些方法和实践。 在未来很长一段时间内,仍有许多细微差别和细节将继续存在。 更重要的是,我们实施 IaC 是因为它解决了以前存在的许多更大的问题。

结论

在本教程中,我们回顾了 IaC 如何使用 IaC。 我们研究了为什么许多人决定使用 IaC 以及它是如何产生的。 我们还从不同的角度考虑了使用 IaC 时遇到的问题。 我们这样做是因为 IaC 不是许多问题的解决方案,而是另一种解决问题的方法,但与您同在。 由于这一趋势相对较新,您可能是将来能够为它做出贡献的人!

了解更多!

给我们打电话 800.580.4985,或打开一个 聊天 或与我们联系,与我们知识渊博的解决方案或经验丰富的托管顾问之一交谈,以了解您今天如何利用这些技术!