基础架构即代码 (IaC) 使用高级描述性编码语言来自动完成 IT 基础架构的配置。 利用这种自动化功能,开发人员就不必每次开发、测试或部署软件应用时都手动配置和管理服务器、操作系统、数据库连接、存储和其他基础架构元素。
在当今时代,企业每天将数百个应用部署到生产环境早已是司空见惯的事。为了响应开发人员和用户的需求,企业不断地启动、拆除、扩展和缩减基础架构,这种情况下,实现基础架构自动化就显得至关重要,这样才能控制成本、降低风险,快速响应新的商业机会和竞争威胁。 IaC 便可以实现这一自动化目标。
IaC 也是一项必不可少的 DevOps 实践,对于具有竞争力的软件交付生命周期不可或缺。 IaC 让 DevOps 团队能够采用与版本源代码相同的方式快速创建和版本化基础架构,并跟踪这些版本,避免 IT 环境之间的不一致,这种不一致可能会导致部署期间出现严重问题。
Sai Vennam 在以下视频“什么是基础架构即代码?”中详细介绍了 IaC:
提供传统 IT 是一个耗时且成本高昂的过程,需要专家完成硬件的物理设置、操作系统软件的安装和配置以及与中间件、网络、存储等的连接。
虚拟化和云原生开发消除了物理硬件管理的问题,使开发人员能够按需配置自己的虚拟服务器或容器。 但是,配置虚拟化基础架构还是无法让开发人员全身心投入到代码编写上来,他们仍然需要为每个新部署重复配置工作,并且没有一种简单的方法来跟踪环境变化和防止影响部署的不一致。
借助基础架构即代码 (IaC),开发人员终于能够通过执行脚本有效地“订购”全面记录的版本化基础架构。 产生的优势正如您所想到的那样:
在使用基础架构即代码 (IaC) 自动执行基础架构以及选择 IaC 解决方案时,需要就创建可变还是不可变基础架构做出明确的决策,这一点很重要。
可变基础架构在完成最初配置后可以修改或更新。 可变基础架构使开发团队能够灵活地定制临时服务器,例如,更紧密地适应开发或应用要求,或者响应紧急安全问题。 但这也削弱了 IaC 的一项关键优势,即在部署之间或版本内保持一致性的能力,同时也使基础架构版本跟踪变得更加困难。
由于这些原因,大多数 IaC 被实现为不可变基础架构,即一旦完成最初配置就无法修改。 如果需要更改不可变基础架构,则必须替换为新的基础架构。 因为新的基础架构可以在云上快速启动,特别是使用 IaC,所以不可变基础架构在可行性和实用性方面更加名副其实。
不可变基础架构将 IaC 带到下一个逻辑步骤,从本质上加强了 IaC,进一步确保其优势得以实现。 这几乎消除了配置漂移,并使保持测试和部署环境之间的一致性变得更加容易。 不可变基础架构还可以更轻松地维护和跟踪基础架构版本,并在必要时自信地回滚到任何版本。
在选择 IaC 解决方案时,了解基础架构自动化的声明式方法或命令式方法之间的区别也很重要。
在大多数组织中,声明式方法(也称为功能方法)最适用。 在声明式方法中,由组织来指定要配置的基础架构的最终状态,IaC 软件会处理其余的工作,启动虚拟机 (VM) 或容器、安装和配置必要的软件、解决系统和软件的相互依赖关系以及管理版本控制。 声明式方法的主要缺点在于通常需要熟练的管理员来设置和管理,而这些管理员一般专长于他们偏爱的解决方案。
在命令式方法(也称为过程式方法)中,解决方案可帮助准备自动化脚本,这些脚本可以一次为基础架构配置一个特定步骤。 虽然随着您的扩展而可能需要更多的管理工作,但现有管理人员可以更容易理解并且可以利用您已有的配置脚本。
选择声明式还是命令式方法,类似于要使用 GPS 还是遵循逐向指令。 采用 GPS,您只需要输入地址,剩下的工作由 GPS 来完成,它会为您绘制最快的路线并避开交通拥堵,但您可能需要专家来告诉你为什么会做出这样的选择。 逐向指令是基于个人经验;提供者知道路线以及选择该路线的原因,但如果您遇到障碍或想要优化路线,则必须寻求帮助或自己完成工作。
虽然有许多开源 IaC 工具可用,但最常用的工具就是 Ansible 和 Terraform:
Ansible(链接位于 ibm.com 外部)是一个由 Red Hat 赞助的开源社区项目,旨在帮助组织实现配置、配置管理和应用部署的自动化。 Ansible 是一种声明式自动化工具,可用于创建“剧本”(用 YAML 配置语言编写)来指定基础架构所需的状态,然后进行配置。 Ansible 是自动配置 Docker 容器和 Kubernetes 部署的流行选择。
Terraform 是另一种声明式配置和基础架构编排工具,可让工程师自动配置其企业基于云的基础架构和本地基础架构的所有方面。
Terraform 与所有领先的云提供商合作,让你可以并行地跨多个提供商自动构建资源,无论物理服务器、DNS 服务器或数据库位于何处。 Terraform 还可以配置以任何语言编写的应用。
与 Ansible 不同的是,Terraform 不提供配置管理功能,但它与配置管理工具(例如 Cloud Formation )协同工作,可在配置文件描述的状态下自动配置基础架构,并在必要时自动更改更新配置以响应配置更改。
要更深入地了解如何选择 IaC 工具,请参阅“基础架构即代码:Chef、Ansible、Puppet 还是 Terraform?”