当前位置:网站首页>稳!上千微服务接入 Zadig 的最佳姿势(Helm Chart 篇)
稳!上千微服务接入 Zadig 的最佳姿势(Helm Chart 篇)
2022-06-29 22:10:00 【Zadig云原生交付】

Helm 作为云原生领域优秀的 Kubernetes 应用的包管理工具,被广泛应用。然而当环境增多时,需要针对不同环境(开发环境、测试环境、预发布环境...)定制不同的 Helm Chart 配置,传统的脚本管理方式极易出错;且当临时测试环境生命周期结束后,对应的 Helm Chart 配置便失去价值,投入产出低。
Zadig 提供了三种高效管理 Helm Chart 配置的姿势:
- 从代码库批量同步配置:将 Helm Chart 配置组织在代码库中,从代码库同步配置,实现服务的批量创建。
- 使用 Helm Chart 模板创建服务:抽象 Helm Chart 配置模板,在 values 文件中支持变量,指定少许变量即可快速创建服务,且一套模板可复用到多套环境中。
- 使用 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: 1port: {{.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 内容进行预览。 
同样的步骤快速创建服务 service2、service3。
本例中
service2、service3的端口分别是 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,让工程师更专注创造。欢迎加入 开源吐槽群
边栏推荐
- Does rapid software delivery really need to be at the cost of security?
- Is it reliable to open an account on the compass with your mobile phone? Is there any hidden danger in this way
- How to use filters in jfinal to monitor Druid for SQL execution?
- 2022 (第五届)GIS软件技术大会开幕,GIS、IT将加速融合
- Detailed description of gaussdb (DWS) complex and diverse resource load management methods
- 5分钟快速上手 pytest 测试框架
- jfinal中如何使用过滤器监控Druid监听SQL执行?
- jfinal中如何使用过滤器监控Druid监听SQL执行?
- Information available from radar echo
- Guangzhou launched a campaign to promote the safety of bottled gas and popularized the knowledge of gas safety
猜你喜欢

文件操作的底层原理(文件描述符与缓冲区)

Detailed explanation of MySQL and mvcc and the difference between RC and RR for snapshot reading

math_基本初等函数图型(幂函数/指数/对数/三角/反三角)

中国数据库崛起,阿里云李飞飞:中国云数据库多种主流技术创新已领先国外

One click file sharing software jirafeau

2022年第一季度保险服务数字化跟踪分析

Guangzhou launched a campaign to promote the safety of bottled gas and popularized the knowledge of gas safety

每日刷题记录 (八)

With the rise of China's database, Alibaba cloud lifeifei: China's cloud database has taken the lead in various mainstream technological innovations abroad

This time, I will talk about technology and life
随机推荐
5-minute quick start pytest testing framework
State management uses session to restrict page access. Only login can verify sessionlogin Aspx can access session aspx
低代码、端到端,一小时构建IoT示例场景,声网发布灵隼物联网云平台
数论-整除分块
从第三次技术革命看企业应用三大开发趋势
Deep learning remote sensing data set
直播平台开发,进入可视区域执行动画、动效、添加样式类名
【Proteus仿真】步进电机转速数码管显示
Structure the fifth operation of the actual camp module
客户端可以连接远程mysql
VS2013如何让编写的程序在其它电脑上面也能运行
Wechat public account development, send message reply text
MySQL,MVCC详解,快照读在RC、RR下的区别
Dynamic planning learning (continuous update)
Can cdc2.2.1 listen to multiple PgSQL libraries at the same time?
Analysis of typical remote sensing tasks
这个flink cdc可以用在做oracle到mysql的,增量同步吗
Summary of basic concepts of moosefs
Type of radar
[force deduction 10 days SQL introduction] day7+8 calculation function



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