更新时间:2024-10-21 GMT+08:00
分享

IaC Spec包典型目录结构

IaC Spec包用于描述环境。

目录结构介绍

表1 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目录的默认参数,从而完成部署。

此处WiseChaos的IaC代码为例,详细描述代码运行原理及涉及的各个IaC文件的作用,微服务WiseChaos的整体IaC代码结构如下:
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中不存在

相关文档