服务组件

什么是服务组件

服务组件是容器服务中极其重要的一个概念,是可被更新的最小单元,以开源 Zadig服务组件 - 图1 (opens new window) 服务示例,它包含以下服务组件:

  • aslan:负责 Zadig 中项目、环境、服务、构建、系统管理等核心功能
  • warpdrive:工作流引擎,负责自定义工作流运行相关功能
  • zadig-portal:Zadig 的 Web 端
  • dex:负责 Zadig 中第三方账号和认证鉴权相关业务
  • ……

一个服务中可以包含多个服务组件,可以理解为:服务组件是一个独立可自治的模块,所有的服务组件组合起来,整体对外提供服务能力。

服务配置

服务组件的来源

对于不同的项目类型,系统解析服务组件的逻辑不同,下面展开介绍。

K8s YAML 项目

服务组件的信息来源于服务 K8s YAML 配置内容中的 Deployment/Statefulset 资源,以下图为例:

  • 服务组件:Deployment/StatefulSet 资源中,container 的名称
  • 当前镜像版本:服务组件的 image 信息
  • 镜像名:从当前镜像版本中解析得出,解析格式为:仓库地址/命名空间/镜像名:标签名

服务配置

K8s Helm Chart 项目

服务组件的信息来源于服务的 values.yaml 文件内容,以下图为例:

  • 当前镜像版本:系统按照一定的规则对 values.yaml 文件做解析获得镜像信息,解析规则可参考文档:解析规则
  • 服务组件:和镜像名相同
  • 镜像名:从当前镜像版本中解析得出,解析格式为:仓库地址/命名空间/镜像名:标签名

服务配置

服务组件解析规则

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

Helm Chart 服务组件自定义

内置规则

  1. values.yaml 中有如下代码段结构,拼接 image.repository:image.tag 作为该组件的镜像版本,服务的部署版本和更新均围绕 image.repositoryimage.tag。该例中即为:koderover.tencentcloudcr.com/koderover-demo/backend:latest

点击查看

  1. # Helm Chart values.yaml Demo
  2. key1: value1
  3. key2: value2
  4. key3:
  5. key4: value4
  6. key5:
  7. image:
  8. repository: "koderover.tencentcloudcr.com/koderover-demo/backend"
  9. tag: "latest"
  10. key6:
  11. ...
  12. ...
  1. values.yaml 中的 image 字段的值为镜像信息,服务的部署版本和更新均围绕 image。该例中即为 koderover.tencentcloudcr.com/koderover-demo/backend:latest

点击查看

  1. # Helm Chart values.yaml Demo
  2. key1: value1
  3. key2: value2
  4. key3:
  5. key4: value4
  6. key5:
  7. image: "koderover.tencentcloudcr.com/koderover-demo/backend:latest"
  8. key6:
  9. ...
  10. ...

自定义规则

  1. 使用 key 的绝对路径来解析组件的镜像信息,下例中,自定义规则中填入 deploy.image.repo/deploy.image.name:deploy.image.tag 即可。

点击查看

  1. key1: value1
  2. key2: value2
  3. ...
  4. deploy:
  5. image:
  6. repo: library
  7. name: ubuntu
  8. tag: 20.04
  1. 使用 key 的相对路径来解析服务组件的镜像信息,下例中,自定义规则中填入 repo/name:tag 即可。

点击查看

  1. key1: value1
  2. key2: value2
  3. ...
  4. deploy:
  5. image:
  6. repo: library
  7. name: ubuntu
  8. tag: 20.04
  1. 支持使用一份解析规则来解析多个服务组件,下例中,自定义规则中填入 repo/name:tag 即可解析出 service1service2 的镜像分别为 library/service1:v1library/service2:v2

点击查看

  1. key1: value1
  2. key2: value2
  3. ...
  4. deploy:
  5. service1:
  6. repo: library
  7. name: service1
  8. tag: v1
  9. service2:
  10. repo: library
  11. name: service2
  12. tag: v2
  1. values.yaml 文件中可复用部分 key,下例中,自定义规则中填入 public.repoInfo/name:tag 即可解析出 service1service2 的镜像分别为 library/service1:v1library/service2:v2

点击查看

  1. key1: value1
  2. key2: value2
  3. ...
  4. public:
  5. repoInfo: library
  6. deploy:
  7. service1:
  8. name: service1
  9. tag: v1
  10. service2:
  11. name: service2
  12. tag: v2
  1. 自定义规则中的 仓库地址/命名空间镜像名 填写一项即可,标签名 非必填。下例中,在自定义规则的仓库地址/命名空间镜像名中填入 deploy.image.name 即可

点击查看

  1. deploy:
  2. image:
  3. name: library/ubuntu:12.04

K8s 托管项目

服务组件的信息来源于被托管的服务实例,目前支持 Deployment/Statefulset 类型的服务实例,以下图为例:

  • 服务组件:Deployment/StatefulSet 实例中,container 的名称
  • 当前镜像版本:被托管服务实例资源的镜像版本,即:image 信息
  • 镜像名:从当前镜像版本中解析得出,解析格式为:仓库地址/命名空间/镜像名:标签名

服务组件 - 图6 服务组件 - 图7

如何更新服务组件

支持以下 3 种途径更新服务组件。

  1. 为服务组件配置构建后,运行工作流时可选择对应的服务组件对其进行更新,相关配置文档参考如下:
  1. 在环境中直接修改服务组件镜像来对其进行更新,参考文档:服务实例操作
  2. 通过修改服务配置文件中的镜像信息,并在环境中更新服务来实现服务组件的更新,参考文档:更新服务