IaC概述
IaC简介
基础设施即代码(Infrastructure as Code,简称IaC)是一种以YAML作为输入,经由云原生环境管理服务、IaC执行引擎、Operator平台解析和执行,实现环境自动部署以及管理动态基础设施的方法。它强调一致,可重复的供给和变更系统及其配置。当代码发生变更后,可以进行自动化测试,测试完成后可自动化的应用变更到运行系统中。使用基础设施即代码的方法,可以使用敏捷工程的优秀实践(如测试驱动开发,持续集成,持续发布)来更加快速安全的变更基础设施。
IaC3.0支持的部署模式
IaC3.0支持如下两种场景的部署模式。
IaC代码结构介绍
IaC代码支持单文件描述结构、多文件描述结构以及带global的多文件描述结构,具体介绍请参见IaC代码结构介绍。
- 单文件描述结构:在IaC主体描述文件meta.yaml中进行变更流程编排同时定义所有资源。
- 多文件描述结构:通过引入resources.yaml和文件引用语法,将单文件结构改造为多文件描述目录结构,避免诸多资源的描述都集中于meta.yaml,而造成文件内容过长难以管理。
- 带global的多文件描述结构:为解决不同规格目录间配置复用问题,IaC3.0支持带global的多文件描述结构。
带global的多文件描述结构为IaC3.0的典型目录结构,IaC Spec目录结构请参见IaC Spec包典型目录结构。
IaC代码开发介绍
在一次完整的业务变更中,往往会涵盖多种类型、多个模块的变更,如集群扩容、申请ELB、创建数据库、软件升级等等。在IaC的语境下,每一个变更本质上都是IaC资源的变更。在一次完整的业务变更中,部分资源的变更依赖于其他资源的变更,如为一个微服务创建NUWA实例之前往往需要先创建该微服务的数据库。
通过IaC代码对各资源在具体变更过程中的依赖关系、先后顺序进行代码化描述。本质上就是描述各模块、各资源之间的依赖关系。在变更过程中,IaC将根据由依赖关系生成的有向无环图顺序执行各资源的变更过程。
IaC代码开发主要围绕声明资源和变更流程编排两个方面展开。
- 在IaC代码中声明资源
- 定义component:定义component是IaC将一个环境的资源组织起来的方式,将同一类资源组织起来成为一个component。
- 定义资源:一个component下可以定义多个资源,所有的资源描述都存放于resources.yaml中。
- 在IaC代码中定义流水线
component间的编排在spec包中的meta.yaml文件中描述,用户可以根据自己的需求定义整个环境在变更时的执行过程。