简介
本文主要介绍 Zadig 服务和环境的基本概念。
环境
Zadig 环境是一组服务集合及其配置、运行环境的总称,与 Kubernetes 的 Namespace 是一对一的关系,使用一套服务模板可以创建多套环境。
Zadig 环境按照以下方式进行分类:
- 根据服务部署方式和基础设施的不同分为:
K8s YAML 环境
、K8s Helm Chart 环境
、K8s 托管环境
、主机环境
。 - 根据场景的不同分为:
测试环境
和生产环境
。
服务
Zadig 中的服务可以理解为一组 Kubernetes 资源,包括 Ingress、Service、Deployment/Statefulset/CronJob、ConfigMap 等,也可以是一个完整的 Helm Chart 或者云主机/物理机服务,成功部署后可对外提供服务能力。
Zadig 服务可以按照以下方式进行分类:
- 根据服务部署方式和基础设施的不同分为:
K8s YAML 服务
、K8s Helm Chart 服务
、K8s 托管服务
、主机服务
。 - 根据场景的不同分为:
测试服务
和生产服务
。测试服务供测试环境使用,生产服务供生产环境使用。
什么是服务组件?
服务组件是容器服务中极其重要的一个概念,是可被更新的最小单元,以开源 Zadig (opens new window) 服务示例,它包含以下服务组件:
aslan
:负责 Zadig 中项目、环境、服务、构建、系统管理等核心功能warpdrive
:工作流引擎,负责自定义工作流运行相关功能zadig-portal
:Zadig 的 Web 端dex
:负责 Zadig 中第三方账号和认证鉴权相关业务- ……
一个服务中可以包含多个服务组件,可以理解为:服务组件是一个独立可自治的模块,所有的服务组件组合起来,整体对外提供服务能力。
服务组件的解析
对于不同的项目类型,系统解析服务组件的逻辑不同,下面展开介绍。
K8s YAML 项目
服务组件的信息来源于服务 K8s YAML 配置内容中的 Deployment/Statefulset/CronJob 资源,以下图为例:
服务组件
:Deployment/StatefulSet/CronJob 资源中,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:
...
...
- 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:
...
...
自定义规则
- 使用 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
- 使用 key 的相对路径来解析服务组件的镜像信息,下例中,自定义规则的仓库地址、镜像名、标签名中分别填入
repo
、name
、tag
即可。
点击查看
key1: value1
key2: value2
...
deploy:
image:
repo: library
name: ubuntu
tag: 20.04
- 支持使用一份解析规则来解析多个服务组件,下例中,自定义规则的仓库地址、镜像名、标签名中分别填入
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
- 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
- 自定义规则中的
命名空间
和标签名
非必填,仓库地址
和镜像名
填写一项即可。下例中,在自定义规则的仓库地址或镜像名中填入deploy.image.name
即可
点击查看
deploy:
image:
name: library/ubuntu:12.04
K8s 托管项目
服务组件的信息来源于被托管的服务实例,目前支持 Deployment/Statefulset/CronJob 类型的服务实例,以下图为例:
服务组件
:Deployment/StatefulSet/CronJob 实例中,container 的名称当前镜像版本
:被托管服务实例资源的镜像版本,即:image 信息镜像名
:从当前镜像版本
中解析得出,解析格式为:仓库地址/命名空间/镜像名:标签名
如何更新服务组件
支持以下 3 种途径更新服务组件。
- 为服务组件配置构建后,运行工作流时可选择对应的服务组件对其进行更新,相关配置文档参考如下: