基础设施即代码简介

基础设施即代码(IaC[Infrastructure as Code])是通过代码而非手动流程来管理和置备基础设施的方法。

利用 IaC 我们可以创建包含基础设施规范的配置文件,从而便于编辑和分发配置。此外,它还可确保每次置备的环境都完全相同。通过对配置规范进行整理和记录,IaC 有助于实现配置管理,并避免发生未记录的临时配置更改。

版本控制是 IaC 的一个重要组成部分,就像其他任何软件源代码文件一样,配置文件也应该在源代码控制之下。以基础设施即代码方式部署还意味着您可以将基础架构划分为若干模块化组件,它们可通过自动化以不同的方式进行组合。

借助 IaC 实现基础架构置备的自动化,意味着开发人员无需再在每次开发或部署应用时手动置备和管理服务器、操作系统、存储及其他基础架构组件。对基础架构编码即可创建一个置备用的模板,尽管置备过程仍然可以手动完成,但也可以由自动化工具为您代劳。

IaC 的声明式方法与命令式方法

IaC 有两种实施方法:声明式或命令式。

声明式方法定义了系统的预期状态,包括所需的资源以及它们应具有的属性,随后 IaC 工具会为您进行相关配置。

声明式方法还将保留系统对象的当前状态列表,因此在移除基础架构时会更便于管理。

另一方面,命令式方法则定义了实现预期配置所需的特定命令,最后需要以正确的顺序执行这些命令。

许多 IaC 工具都使用声明式方法,并会自动置备所需的基础架构。如果您更改了预期状态,则声明式 IaC 工具会为您应用这些更改。命令式工具则需要您确定该如何应用这些更改。

IaC 工具通常在两种方法中都能用,但往往更倾向于其中一种方法。

IaC 的优势是什么?

置备基础架构历来是一个耗时且成本高昂的手动过程。现在,基础架构管理已经从数据中心内的物理硬件(尽管它仍可能是企业的一个组成部分)转移到了虚拟化、容器和云计算。

随着云计算的发展,基础架构组件的数量也在不断增加,每天都有更多的应用发布到生产环境中,而且基础架构本身也要被不断地使用、扩展和移除。如果没有相应的 IaC 实践,那么管理现今这样大规模的基础架构会变得越来越困难。

IaC 可以帮助您的企业管理 IT 基础架构需求,同时提高一致性并减少错误和手动配置。

IaC 的优势有:

  • 降低成本
  • 加快部署速度
  • 减少错误
  • 提高基础架构一致性
  • 消除配置偏移

IaC 工具,包含但不局限于以下

  • Chef
  • Puppet
  • Ansible
  • Saltstack
  • Terraform
  • AWS CloudFormation

但各个工具在使用范畴范围上也有所不同,如下图:

为什么说 IaC 对于 DevOps 至关重要

IaC 是实施 DevOps 实践和持续集成/持续交付(CI/CD)的一个重要组成部分。IaC 免除了开发人员的大部分置备工作,他们只需要执行一个脚本即可让基础架构准备就绪。

如此一来,应用部署就不必再等待基础架构,而系统管理员也不用管理耗时的手动流程。

CI/CD 离不开贯穿应用整个生命周期(从集成和测试阶段,到交付和部署)的持续自动化和持续监控。

环境要实现自动化,需要保持一致。如果开发团队以一种方式部署应用或配置环境,而运维团队以另一种方式部署和配置,则实现应用部署的自动化并不能发挥作用。

通过 DevOps 方法来协调开发和运维团队,可以减少错误、手动部署及不一致的情况。

IaC 会帮助您协调开发和运维工作,因为这两个团队可以使用有关应用部署的同一描述,以支持 DevOps 方法。

每种环境(包括生产环境)都应使用相同的部署过程。每次使用 IaC 时,它都会生成相同的环境。

此外,您也无需分别维护具有独特配置(无法自动复制)的不同部署环境,从而确保了生产环境的一致性。

DevOps 最佳实践也同样适用于 IaC 中的基础架构。在软件开发期间,基础架构可采用与应用相同的 CI/CD 管道,因此可以对基础架构代码应用相同的测试和版本控制。

参考: