您的位置:  首页 > 技术杂谈 > 正文

稳!上千微服务接入 Zadig 的最佳姿势(Helm Chart 篇)

2022-06-29 16:00 https://my.oschina.net/koderover/blog/5546440 Zadig云原生交付 次阅读 条评论

Helm 作为云原生领域优秀的 Kubernetes 应用的包管理工具,被广泛应用。然而当环境增多时,需要针对不同环境(开发环境、测试环境、预发布环境...)定制不同的 Helm Chart 配置,传统的脚本管理方式极易出错;且当临时测试环境生命周期结束后,对应的 Helm Chart 配置便失去价值,投入产出低。

Zadig 提供了三种高效管理 Helm Chart 配置的姿势:

  1. 从代码库批量同步配置:将 Helm Chart 配置组织在代码库中,从代码库同步配置,实现服务的批量创建。
  2. 使用 Helm Chart 模板创建服务:抽象 Helm Chart 配置模板,在 values 文件中支持变量,指定少许变量即可快速创建服务,且一套模板可复用到多套环境中。
  3. 使用 Helm Chart 模板批量创建服务:抽象 Helm Chart 配置模板,创建服务时指定 values 文件覆盖模板,便可批量创建服务,且一套模板可复用到多套环境中。

下面将详细阐述这些场景的使用方法。

从代码库批量同步配置

适用:使用 Helm Chart 管理多个 K8s YAML 服务配置,每个服务有单独的 YAML 配置。

将多个服务的 YAML 配置组织在一个 Helm Chart 中,使用 Zadig 批量导入,下面以 voting-demo 项目为例演示说明:

  • 源码:zadig/voting-app [1]
  • 服务:包括 5 个微服务(db/redis/result/vote/worker
  • Helm Chart 配置:位于源码下的 chart 目录,目录结构如下所示。values.yaml 中包括所有服务的镜像信息,templates 目录下包括所有服务的配置,并引用 {{ .Values.services.服务名.image }} 作为容器镜像信息
zadig/examples/voting-app/chart
├── Chart.yaml
├── templates
│   ├── db.yaml
│   ├── redis.yaml
│   ├── result.yaml
│   ├── vote.yaml
│   └── worker.yaml
└── values.yaml


从代码库同步

进入项目的服务模块 -> 点击从代码库同步 -> 选择代码库以及 Helm Chart 所在文件目录,点击加载(本例中即为 Zadig 库的 examples/voting-app/chart 目录)。

同步后,系统会自动分析 values.yaml,解析出多个服务组件。

将服务加入到环境

点击加入环境 -> 选择环境,快速将多个服务一键加入到已有环境中。

使用 Helm Chart 模板创建服务

适用:使用 Helm Chart 管理 K8s YAML 服务配置,各服务的配置结构同构,不同服务配置的值存在细微差异(比如:不同服务的镜像名称不同、端口不同、所需 CPU/Memory 资源限制不同...)。将配置抽象为包括变量的 Helm Chart 模板,创建服务时只需配置少量变量即可。

下面以 multi-service-demo 案例[2]进行实践,和实践相关的部分目录结构说明如下:共包括三个服务 service1/service2/service3,通过对完整的服务配置( k8s-yaml 目录)进行分析,抽象出通用的 Helm Chart 服务模板(general-chart 目录)。

zadig/examples/multi-service-demo/
├── general-chart # Helm Chart 服务模板
│   ├── Chart.yaml
│   ├── templates
│   │   ├── _helpers.tpl
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   └── values.yaml
├── k8s-yaml # 各服务完整的 K8s YAML 配置
│   ├── service1
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   ├── service2
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   ├── service3
│   │   ├── deployment.yaml
│   │   └── service.yaml


可以看到模板的 values.yaml 文件中使用了自定义变量 port 和系统内置变量 T-Service,在使用模板创建服务后,此处的变量会被渲染替换。

fullnameOverride: $T-Service$
replicaCount: 1
port: {{.port}}

imagePullSecretsName: "default-registry-secret"

image:
  repository: "ccr.ccs.tencentyun.com/koderover-public/$T-Service$"
  tag: "latest"

resources:
  requests:
    cpu: 10m
    mem: 10Mi

  limits:
    cpu: 20m
    mem: 20Mi


创建 Helm Chart 模板

在项目预览页点击右上角的 模板库 -> Helm Chart 进入 Helm Chart 模板管理页面。

点击 + 新建模板 -> 填写模板名称 multi-service-demo-template -> 选择模板所在的代码库及目录 -> 点击加载保存模板。

本例中即为 Zadig 库的 examples/multi-service-demo/general-chart 目录

导入模板成功后效果如下,点击模板中具体的文件可查看其内容,可对模板中自定义变量赋默认值。

使用模板新建服务

进入项目的服务模块 -> 点击使用模板新建 -> 填写服务名称并选择模板,根据服务的实际配置情况,对模板中的变量赋值 -> 点击导入

导入成功后效果如下所示,选中服务后可在 Zadig 平台中对其 values 内容进行预览。

同样的步骤快速创建服务 service2service3

本例中 service2service3的端口分别是 20222、20223。

将服务加入环境

进入项目的环境中 -> 点击添加服务 -> 选择新建的服务即可将服务加入到已有环境中。

使用 Helm Chart 模板批量创建服务

适用:现有服务配置使用独立的 Helm Chart 来管理(一个一个的接入会导致效率低下)。此时将服务配置抽象为 Helm Chart 模板,创建服务时使用各服务的 values 来覆盖模板中的配置,可将服务批量接入 Zadig。

同样以 multi-service-demo 案例[2]进行实践,和实践相关的部分目录结构说明如下:共包括三个服务 service1/service2/service3,通过对各服务完整的 Helm Chart 配置( full-charts 目录)进行分析,抽象出 Helm Chart 模板(base-chart 目录),以及对应每个服务的 values(values 目录)。

zadig/examples/multi-service-demo/
├── base-chart # Helm Chart 服务模板
│   ├── Chart.yaml
│   ├── templates
│   │   ├── _helpers.tpl
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   └── values.yaml
├── full-charts # 各服务完整、独立的 Helm Chart 配置
│   ├── service1
│   │   ├── Chart.yaml
│   │   ├── templates
│   │   └── values.yaml
│   ├── service2
│   │   ├── Chart.yaml
│   │   ├── templates
│   │   └── values.yaml
│   └── service3
│       ├── Chart.yaml
│       ├── templates
│       └── values.yaml
└── values # 对应各服务的 values
    ├── service1.yaml
    ├── service2.yaml
    └── service3.yaml

创建 Helm Chart 模板

前文中已有同类操作,此处不再赘述。

本例中创建的模板名称为 multi-service-demo-base-template,来源于 Zadig 库的 examples/multi-service-demo/base-chart 目录。

使用模板批量新建服务

进入项目的服务模块 -> 点击使用模板新建 -> 点击批量创建-> 选择模板以及多个服务的 values 所在文件路径,点击导入

本例中即为 Zadig 库的 examples/multi-service-demo/values 目录 导入成功后效果如下所示,选中服务后可在 Zadig 平台中对其 values 内容进行预览。

将服务加入环境

进入项目的环境中 -> 点击添加服务 -> 选择新建的服务即可将服务批量加入到已有环境中。

以上三种方式成功将服务接入 Zadig,接下来便可以使用 Zadig 强大的环境治理和工作流能力对服务进行构建部署、测试验证、持续交付等,推荐阅读:

结语

从代码库同步 Helm Chart 配置可快速在 Zadig 中批量创建服务拉起环境,快速对业务进行验证;模板功能将服务配置统一化管理,降低 Helm Chart 的维护负担,让工程师从繁琐的配置管理“脏活累活”中解放出来,进入云原生持续交付快车道,更多时间创造业务价值。

参考链接:

[1] https://github.com/koderover/zadig/tree/main/examples/voting-app

[2] https://github.com/koderover/zadig/tree/main/examples/multi-service-demo/

[3] https://docs.koderover.com/zadig/v1.12.0/project/workflow/

[4] https://docs.koderover.com/zadig/v1.12.0/project/env/helm/chart/

[5] https://docs.koderover.com/zadig/v1.12.0/project/version/#k8s-helm-chart-项目

Zadig,让工程师更专注创造。欢迎加入 开源吐槽群🔥

Zadig on Github
Zadig on Gitee

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接