IaC Spec包典型目录结构
IaC Spec包用于描述环境。
目录结构介绍
位置 |
类型 |
个数 |
描述 |
---|---|---|---|
iacspec_{service}_{version}.zip |
文件 |
1 |
IaC压缩包。 |
└── package.json |
文件 |
1 |
包描述文件,相关说明请参见包描述文件介绍。 |
└── global/ |
文件夹 |
1 |
全局默认的IaC描述,包含完整文件结构,放置被所有规格目录所复用的配置文件。 |
│ └── meta.yaml |
文件 |
1 |
变更策略描述,相关说明请参见在IaC代码中定义流水线。 |
│ └── environment/ |
文件夹 |
1 |
定义component1,公共资源。 |
│ └── resources.yaml |
文件 |
1 |
公共资源列表,相关说明请参见在IaC代码中声明资源。 |
│ └── values.yaml |
文件 |
1 |
公共资源参数值,在resources.yaml中通过$ref的方式来引用。 |
│ └── {microservice}/ |
文件夹 |
0-N |
定义component2,微服务资源。 |
│ └── resources.yaml |
文件 |
1 |
微服务资源列表,相关说明请参见在IaC代码中声明资源。 |
│ └── values.yaml |
文件 |
1 |
微服务资源参数值,在resources.yaml中通过$ref的方式来引用。 |
│ └── configs/ |
文件夹 |
1 |
微服务配置目录。 |
│ └── config_schema.yaml |
文件 |
1 |
声明微服务的业务配置项属性,敏感业务配置项需要声明,非敏感配置项可以不声明。在resources.yaml中通过$ref的方式来引用。 |
│ └── {cluster}_config_records.yaml |
文件 |
0-N |
微服务的业务配置项,在resources.yaml中通过$ref的方式来引用。 |
└── specs/ |
文件夹 |
1 |
环境特定的IaC描述,结构与global相同,但仅包含与global有差异的文件。 |
│ └── cn_product_cbu/ |
文件夹 |
1 |
中国区生产环境,命名采用站点级Cloud Map的名称,可以在环境管理界面查看可选的站点级Cloud Map名称列表。 |
│ └── environment/ |
文件夹 |
0-1 |
环境公共资源。 |
│ └── values.yaml |
文件 |
0-1 |
公共资源参数值。 |
│ └── {microservice}/ |
文件夹 |
0-N |
微服务资源。 |
│ └── values.yaml |
文件 |
0-1 |
微服务资源参数值。 |
│ └── configs/ |
文件夹 |
0-1 |
微服务配置目录。 |
│ └── {cluster}_config_records.yaml |
文件 |
0-N |
微服务的业务配置项。 |
│ └── aaa_product_cbu/ |
文件夹 |
1 |
亚非拉生产环境。 |
│ └── eu_product_cbu/ |
文件夹 |
1 |
欧洲生产环境。 |
global与specs的协同关系
- global文件夹:放置被所有规格目录所复用的配置文件。
global文件夹里面的微服务都可以被规格文件夹specs中的代码复用(可根据meta.yaml指定复用哪些微服务,取决于在相应环境的部署规划)。
global文件夹的作用类似于Java中的父类,spec类似于继承了global的子类,实际部署时还是使用的specs中的文件,但specs中的文件可以继承和复用global文件。
- meta.yaml:描述变更的组件与过程。
- {microservice}:描述要变更的微服务。
- resources.yaml:微服务变更的主体文件,其他所有的values.yaml、config文件夹中的yaml等文件都围绕此文件展开。文件名必须为resources.yaml。
- 其他文件:为变量配置文件,其定义的内容都会被resources.yaml引用,文件名称可自定义。
- spec文件夹:同一个服务在不同用途环境下所需配置文件(基础设施)。这个文件目录是必须的。
specs是在环境上部署服务时,最终使用的配置文件,当部署服务时,第一关注点和入口就是specs。
specs目录下的规格文件夹,命名采用站点级Cloud Map的名称(cn_product_cbu、eu_product_cbu)。可以在环境管理界面查看可选的站点级Cloud Map名称列表。
当某个规格被选用于部署时,会先将该规格目录下所有文件与global目录进行合并,得到该规格目录最终的所有配置文件,再进行部署动作。
合并策略:如果文件的相对路径相同,则规格目录下的文件保留,global目录下的文件被覆盖,其他文件则共存。
global目录应包含完整的YAML内容,即:其下meta.yaml通过$ref引用的YAML内容都存在于global目录中。这样能确保即使规格目录为空,也能引用到global目录的默认参数,从而完成部署。
iac3.0 # IaC3.0代码根目录:目录名字可自定义 └─ WiseEyeChaosMonkeyService # 此级目录为服务级目录,名字与所部署的服务名称相同 ├─ global # global目录:放置所有规格目录所复用的配置文件 ├─ WiseEyeChaosIssueMgrService ├─ WiseEyeChaosManageService ├─ WiseEyeChaosMonkeyExecutor │ └─ config │ ├─ business_config.yaml │ ├─ env.yaml │ ├─ envs_dynamic.yaml │ ├─ hosts.yaml │ └─ sidecar_aiops_param.json └─ resources.yaml │ └─ values.yaml ├─ WiseEyeChaosMonkeyPortal │ └─ config │ └─ sidecar_aiops_param.json │ └─ resources.yaml │ └─ values.yaml └─ WiseEyeChaosPortal └─meta.yaml ├─specs # 规格文件,描述了每个规格的定制化需求,最终部署的时候以specs文件为准 ├─cn_product_cbu ├─WiseEyeChaosMonkeyExecutor │ └─config │ ├─ envs_dynamic.yaml │ ├─ hosts.yaml │ └─ sidecar_aiops_param.json │ └─values.yaml ├─WiseEyeChaosMonkeyPortal │ └─config │ └─ sidecar_aiops_param.json │ └─values.yaml └─ meta.yaml ├─aaa_product_cbu └─eu_product_cbu └─package.json
当对此微服务的IaC代码打包合并时:
- specs中存在而global中不存在的文件,使用specs中的文件。
- specs中不存在而global中存在的文件,使用global中的文件。
- specs和global中都存在的,则使用specs中的文件。
以/iac3.0/WiseEyeChaosMonkeyService/specs/cn_product_cbu为例,在specs中的cn_product_cbu目录和global中都有WiseEyeChaosMonkeyExecutor和WiseEyeChaosMonkeyPortal微服务文件夹。
合并后最终呈现的文件目录如下:
“覆盖”指的是完全取代,不是内容合并。
cn_product_cbu ├─ meta.yaml # 来自于specs目录,覆盖global中的文件 ├─ WiseEyeChaosMonkeyExecutor │ ├─ values.yaml # 来自于specs目录,覆盖global中的文件 │ ├─ resources.yaml # 来自于global中的文件 │ └─ config │ ├─ business_config.yaml # 来自于global中的文件,因为specs中不存在 │ ├─ env.yaml # 来自于global中的文件,因为specs中不存在 │ ├─ envs_dynamic.yaml # 来自于specs目录,覆盖global中的文件 │ ├─ hosts.yaml # 来自于specs目录,覆盖global中的文件 │ └─ sidecar_aiops_param.json # 来自于specs目录,覆盖global中的文件 ├─ WiseEyeChaosMonkeyPortal │ ├─ values.yaml # 来自于specs目录,覆盖global中的文件 │ ├─ resources.yaml # 来自于global中的文件,因为specs中不存在 │ └─ config │ └─ sidecar_aiops_param.json # 来自于specs目录,覆盖global中的文件 ├─ WiseEyeChaosIssueMgrService # 来自于global中的文件,因为specs中不存在 ├─ WiseEyeChaosManageService # 来自于global中的文件,因为specs中不存在 └─ WiseEyeChaosPortal # 来自于global中的文件,因为specs中不存在