开源实践联盟通信 2021年 07月25日

IaC 9大好处和4大工具

在本文中,我们将深入探讨基础设施即代码及其核心优势。

团队构建过程中面向的登台或开发环境、往往与部署时面向的生产环境并不同步,导致发布管道中的环境漂移问题,而基础设施即代码(IaC),或能解决这一问题。基础设施即代码能够自动配置基础设施,帮助企业以更高速度、更低风险以及更低成本实现云应用程序的开发、部署与扩展。在本文中,我们将深入探讨基础设施即代码及其核心优势。

基础设施即代码是什么?

IaC选择使用机器可读的定义文件替代物理硬件配置或交互式配置工具,借此管理并配置数据中心内的计算机系统。简而言之,IaC主张通过简单的代码行取代IT资源管理及配置中的手动操作流程。

基础设施即代码(IaC)是一种自动化基础设施管理方式,最典型的IaC流程主要包含以下三个步骤:1. 开发人员使用特定领域语言对基础设施规范进行定义与编写。2. 将创建的文件发送至管理API、主服务器或代码repo。3. 之后,由IaC平台执行具体操作,完成计算资源的创建与配置。

IaC本身也是一项必不可少的DevOps实践,可谓是实现良好软件交付生命周期的重要前提。IaC能够帮助DevOps团队以完全符合版本源代码的方式快速完成基础设施创建及版本化,同时持续跟踪各个版本,以避免各IT环境间因一致性冲突而引发严重的部署问题。作为一项重要DevOps实践,IaC通常与持续交付结合使用。

IaC通常有两种实现方式:声明式(函数式)与命令式(程序式)。这两种方法之间的本质区别,在于一方强调“什么”、另一方强调“如何”。声明式方法侧重于描述所需的最终配置应该是什么样子;而命令式则关注如何操作基础设施来达成这样的配置状态。

总而言之,声明式方法负责定义希望达成的状态,系统则通过必要操作实现这一目标状态;命令式方法定义必要的操作顺序,通过一系列特定命令将基础设施调整为所需状态。

IaC还提供“pull”与“push”两种方法,二者的区别体现在向服务器报告如何配置的具体方式上。在pull方法中,要配置的服务器将从控制服务器处拉取配置信息;而在push方法中,控制服务器会将配置信息推送至目标系统。

基础设施即代码的优势

基础设施即代码的优势首先在于降低了成本,通过清除手动操作,人们能够将精力重新集中在真正重要的任务身上。

其次,IaC能够加快基础设施的配置速度,并借助可见性优势帮助企业内的其他团队提升工作速度、强化工作效率。

第三,降低风险。自动化机制消除了由人类错误引发的风险,回避手动配置错误以缩短停机时间、提高基础设施可靠性。

第四,基础设施即代码使DevOps团队能够在开发周期早期,立足与生产场景相似/相同的环境测试应用程序。

第五,稳定且可扩展的环境。IaC能够快速、规模化提供稳定环境。在消除手动配置需求之后,团队能够以代码形式表达所需的环境状态,由此强制实现一致性。IaC类基础设施拥有可重复的部署流程,并可防止由配置漂移或缺少依赖项而引发的各类运行时问题。DevOps团队可以使用一组统一的实践与工具开展协同工作,以快速、可靠且规模化的方式交付应用程序以及配套的支持基础设施。

第六,可溯源性。我们可以像处理任何源代码文件一样对IaC配置文件进行版本控制,因此完全可以跟踪每套配置方案中的每一项具体变更。

第七,配置一致性。IaC实现了基础设施配置的全面标准化,由此降低发生错误或偏差的可能性。这不仅能够减少基础设施中出现的兼容性问题,同时也将帮助应用程序获得更顺畅的运行效果。

第八,翔实的文档。IaC不仅能够实现流程自动化,同时也可作为一种翔实的文档形式,确保每一位新晋员工都能快速掌握基础设施的实例化及保障方法。由于代码内容可进行版本控制,因此IaC允许我们整理、记录并跟踪针对服务器配置的每一项变更,而且各套配置也如代码一样可以接受测试。

最后,IaC增强了安全性。如果所有计算、存储及网络服务都以代码形式进行配置,则可保证全部服务每次都能拥有完全相同的部署方式。换句话说,我们可以在整个企业之内轻松统一地部署安全标准,无需相关管理员逐一审查并批准各项变更。

基础设施即代码相关工具

目前,市面上有众多工具可以帮助我们实现基础设施自动化,下面来看其中几款最受欢迎、最为成功的工具选项:

Terraform——Terraform是一款声明式配置及基础设施编排工具,可帮助工程师自动配置企业内的各类云与本地基础设施元素。

Chef——Chef是目前持续集成与交付流程中最具人气的配置管理工具之一。Chef具有明确的云中立性,并与亚马逊云科技、微软Azure、Google Cloud Platform以及OpenStack等多家云服务供应商合作。

Puppet——Puppet是另外一款流行的配置管理工具,可帮助工程师实现软件的持续交付。使用Puppet,开发者可以定义所需的基础设施最终状态与希望实现的运作方式。接下来,Puppet会自动强制执行所需状态并修复一切不正确变更。Puppet目前与多家领先云服务商(包括亚马逊云科技、微软Azure、Google Cloud及VMware)相集成,允许跨多云环境实现全面自动化。

Ansible——Ansible是由Red Hat开发的基础设施自动化工具。Ansible能够描述各组件与系统之间的相互关联方式,借此为基础设施建模、帮助我们摆脱独立管理各系统的沉重负担。

小结

总体来看,基础设施即代码能够简化并加快企业基础设施配置流程、帮助避免错误并严格遵循政策、保持良好的环境一致性,最终为企业节约下宝贵的时间与金钱。

《数字化转型方略》杂志 《数字化转型方略》杂志