简介
本文介绍 Zadig 服务和环境的基本概念。
# 环境
Zadig 环境是一组服务集合及其配置、运行环境的总称,与 Kubernetes 的 Namespace 是一对一的关系,使用一套服务模板可以创建多套环境。
Zadig 环境按照以下方式进行分类:
- 根据服务部署方式和基础设施的不同分为:
K8s YAML 环境、K8s Helm Chart 环境、K8s 托管环境、主机环境。 - 根据场景的不同分为:
测试环境和生产环境。
# 服务
Zadig 中的服务可以理解为一组 Kubernetes 资源,包括 Ingress、Service、Deployment/Statefulset/CronJob、InitContainer、ConfigMap 等,也可以是一个完整的 Helm Chart 或者云主机/物理机服务,成功部署后可对外提供服务能力。
Zadig 服务可以按照以下方式进行分类:
- 根据服务部署方式和基础设施的不同分为:
K8s YAML 服务、K8s Helm Chart 服务、K8s 托管服务、主机服务。 - 根据场景的不同分为:
测试服务和生产服务。测试服务供测试环境使用,生产服务供生产环境使用。
# 什么是服务组件?
服务组件是容器服务中极其重要的一个概念,是可被更新的最小单元,以开源 Zadig(opens new window) 服务示例,它包含以下服务组件:
aslan:负责 Zadig 中项目、环境、服务、构建、系统管理等核心功能zadig-portal:Zadig 的 Web 端dex:负责 Zadig 中第三方账号和认证鉴权相关业务- ......
一个服务中可以包含多个服务组件,可以理解为:服务组件是一个独立可自治的模块,所有的服务组件组合起来,整体对外提供服务能力。

# 服务组件的解析
对于不同的项目类型,系统解析服务组件的逻辑不同,下面展开介绍。
# K8s YAML 项目
服务组件的信息来源于服务 K8s YAML 配置内容中的 Deployment/Statefulset/CronJob/InitContainer 资源,以下图为例:
服务组件:Deployment/StatefulSet/CronJob/InitContainer 资源中,container 的名称当前镜像版本:服务组件的 image 信息镜像名:从当前镜像版本中解析得出,解析格式为:仓库地址/命名空间/镜像名:标签名

# K8s Helm Chart 项目
服务组件的信息来源于服务的 values.yaml 文件内容,以下图为例:
当前镜像版本:系统按照一定的规则对 values.yaml 文件做解析获得镜像信息,解析规则可参考 解析规则服务组件:和镜像名相同镜像名:从当前镜像版本中解析得出,解析格式为:仓库地址/命名空间/镜像名:标签名

# 服务组件解析规则
包括内置规则和自定义规则,导入 Helm Chart 配置文件后,系统会按照内置规则解析 vaues.yaml 文件中的镜像内容。当内置规则不满足需求时,可点击服务组件右侧的更新匹配规则来自定义镜像解析规则。

内置规则
- values.yaml 中有如下代码段结构,拼接
image.repository:image.tag作为该组件的镜像版本,服务的部署版本和更新均围绕image.repository和image.tag。该例中即为:koderover.tencentcloudcr.com/koderover-demo/backend:latest。
点击查看
# Helm Chart values.yaml Demo
key1: value1
key2: value2
key3:
key4: value4
key5:
image:
repository: "koderover.tencentcloudcr.com/koderover-demo/backend"
tag: "latest"
key6:
...
...
2
3
4
5
6
7
8
9
10
11
12
- values.yaml 中的
image字段的值为镜像信息,服务的部署版本和更新均围绕image。该例中即为koderover.tencentcloudcr.com/koderover-demo/backend:latest。
点击查看
# Helm Chart values.yaml Demo
key1: value1
key2: value2
key3:
key4: value4
key5:
image: "koderover.tencentcloudcr.com/koderover-demo/backend:latest"
key6:
...
...
2
3
4
5
6
7
8
9
10
自定义规则
- 使用 key 的绝对路径来解析组件的镜像信息,下例中,自定义规则中填入
deploy.image.repo/deploy.image.project/deploy.image.name:deploy.image.tag即可。
点击查看
key1: value1
key2: value2
...
deploy:
image:
repo: library
project: public
name: ubuntu
tag: 20.04
2
3
4
5
6
7
8
9
- 使用 key 的相对路径来解析服务组件的镜像信息,下例中,自定义规则的仓库地址、镜像名、标签名中分别填入
repo、name、tag即可。
点击查看
key1: value1
key2: value2
...
deploy:
image:
repo: library
name: ubuntu
tag: 20.04
2
3
4
5
6
7
8
- 支持使用一份解析规则来解析多个服务组件,下例中,自定义规则的仓库地址、镜像名、标签名中分别填入
repo、name、tag即可解析出service1和service2的镜像分别为library/service1:v1和library/service2:v2。
点击查看
key1: value1
key2: value2
...
deploy:
service1:
repo: library
name: service1
tag: v1
service2:
repo: library
name: service2
tag: v2
2
3
4
5
6
7
8
9
10
11
12
- values.yaml 文件中可复用部分 key,下例中,自定义规则的仓库地址、镜像名、标签名中分别填入
public.repoInfo、name:tag即可解析出service1和service2的镜像分别为library/service1:v1和library/service2:v2。
点击查看
key1: value1
key2: value2
...
public:
repoInfo: library
deploy:
service1:
name: service1
tag: v1
service2:
name: service2
tag: v2
2
3
4
5
6
7
8
9
10
11
12
- 自定义规则中的
命名空间和标签名非必填,仓库地址和镜像名填写一项即可。下例中,在自定义规则的仓库地址或镜像名中填入deploy.image.name即可
点击查看
deploy:
image:
name: library/ubuntu:12.04
2
3
# K8s 托管项目
服务组件的信息来源于被托管的服务实例,目前支持 Deployment/Statefulset/CronJob/InitContainer 类型的服务实例,以下图为例:
服务组件:Deployment/StatefulSet/CronJob/InitContainer 实例中,container 的名称当前镜像版本:被托管服务实例资源的镜像版本,即:image 信息镜像名:从当前镜像版本中解析得出,解析格式为:仓库地址/命名空间/镜像名:标签名


# 如何更新服务组件
支持以下 3 种途径更新服务组件。
- 为服务组件配置构建后,运行工作流时可选择对应的服务组件对其进行更新,相关配置文档参考如下:


