基础设施即代码(IAC)在DevOps流水线中

这篇博文是来自电子书《从管理员到DevOps:在Azure中实现DevOps的无胡话方法》的一章。如果你想深入了解在微软Azure中成功实现DevOps所需的内容,请务必查看一下。

如果你曾经手动创建过任何一种云或虚拟基础架构,你会知道要么需要大量点击,要么需要大量输入。基础架构即代码(IaC)解决了这个问题。

要想配置任何东西,都需要记住要去哪个屏幕,或者运行哪个命令。如果你只是在尝试学习Azure,那没问题,但一旦这种玩耍变成了关乎业务关键、生产流程中时间就是金钱的事情,就必须做出改变。

一旦你的组织开始认真对待基础设施的配置和管理,你将面临许多新挑战。

你会遇到工作的不必要重复、重复的疑似错误输入、变更管理问题、配置漂移等。组织和团队越大,问题就越多。所有这些问题都可以通过一种称为基础架构即代码(IaC)的概念来消除或至少减轻。

基础架构即代码(IaC):举例说明

IaC是一个行业术语,指的是将构建基础架构组件所需的所有内容存储在代码中。这些代码通常以JSON或YAML文件的形式定义,代表了你的基础架构应该是什么样子的。

一旦所有组件在结构化文件中定义好,另一个进程就会出现,理解代码并立即开始将该文档用作构建基础设施的指令。

为了提供一个通用的、类似伪代码的示例,也许你有一个要创建的虚拟机。该虚拟机需要计算、存储和网络等资源。一个粗略的基础设施即代码(IaC)方法是在一个模板中描述虚拟机及其所有组件。

模板

在下面的代码片段中,你可以看到每个组件是如何按照层次结构进行分解的,并且关于每个组件的属性都有所定义。这个虚构的例子是在一个 JSON 文件中创建的,大多数服务都会称其为模板。

{
	"VM": {
        "Name": "MYVM",
        "Disk": {
            "Size": "100GB"
        },
        "Networking": {
            "IPAddress" : "10.0.0.1"
        }
    }
}

这个模板定义了虚拟机及其所有相关属性。它有一个特定的模式,模板作者遵循这个模式来定义虚拟机的外观。假设这个模板然后保存到一个名为myvm.json的文件中。

源代码控制

现在,你已经把组成虚拟机的一切都保存在一个单独的文件中。像任何优秀的 DevOps 专业人士一样,你把这个文件检入到源代码控制中。现在你有一种追踪文件更改的方式。

工具

现在文件已经创建,你需要一个工具或服务来读取该文件,理解你想构建的内容。该工具使用模板作为输入,并根据那些精确的规格构建虚拟机,没有其他交互。

> [some command line tool] -File myvm.json

不错,对吧?这还不是全部。

对抗配置漂移

现在假设您需要更改分配给该虚拟机网络接口卡的静态IP地址。您可以远程桌面连接到虚拟机并更改IP地址,但您不想这样做。为什么呢?

  1. 因为这样做是手动更改,会浪费时间并容易出现人为错误。
  2. 没有记录谁在何时更改了IP地址的审计追踪。
  3. 没有自动方式可以在您输错IP地址时恢复更改。

基础架构即代码(IaC)可以解决上述所有问题。只需几次按键,您就可以以一种您的经理和审计员会喜欢的方式进行更改。

打开myvm.json,更改IPAddress属性,将更改提交到源代码控制,然后再次运行工具。完成。

{
	"VM": {
        "Name": "MYVM",
        "Disk": {
            "Size": "100GB"
        },
        "Networking": {
            "IPAddress" : "10.0.0.2"
        }
    }
}
> [some command line tool] -File myvm.json

该工具将足够智能,以知道需要更改什么。它不会断开网络接口卡或重新构建整个虚拟机。所有IaC工具和服务都足够智能,以理解如何进行更改。神奇!

但现在您突然意识到使用了错误的IP地址,需要恢复更改。没问题。在源代码控制中还原更改,提交,运行工具,您又回到正常状态。

但等等,这还不是全部。

持续交付的开端

当您在模板中存储基础架构并将其放入源代码控制下时,您就拥有了启动自动发布或持续交付流水线的一组要素。

请记住,您以前必须在更改模板时每次运行该工具。在自动化的流水线/工作流中,该工具会自动运行。一旦创建或更改环境的过程被自动化,只要您提交对模板的更改,基础架构就会匹配。

构建足够的模板,最终,您的整个基础架构可以用代码或作为代码表示。

结论

IaC是一种允许运维人员借鉴软件开发者经验的DevOps方法。IaC带来了许多软件开发者多年来一直在利用的优势,并将这些优势赋予了系统管理员。

Source:
https://adamtheautomator.com/infrastructure-as-code-iac/