稳!上千微服务接入 Zadig 的最佳姿势(K8s YAML 篇)
云原生微服务架构下,可以获得更高的可用性和扩展性,以满足业务快速迭代的需求,然而成百上千个服务的 YAML 配置管理问题成了老大难的事情:不同服务的配置差异极小,但是不得不复制粘贴;针对多样化部署环境(比如有开发环境、测试环境、预发布环境...)定制的服务配置更是导致 YAML 文件泛滥成灾...
Zadig 提供了几种高效管理服务配置的姿势:
- 从现有 Kubernetes 批量导入多个服务,一键将已有服务配置平滑迁移
- 将多个服务的配置文件组织在代码库中,从代码库同步现有服务配置,实现服务的批量创建
- 将多个服务的配置文件抽象成服务模板,工程师只需填写和服务相关的少量参数,使用模板创建服务即可
下面将详细阐述这几种场景的具体接入方法。
从现有 Kubernetes 批量导入服务
适用:K8s YAML 类型项目的场景,可以直接从现有 K8s 集群的命名空间批量导入服务,几乎无迁移成本。
批量导入服务
进入项目的服务模块 -> 点击新建按钮 -> 选择 从 Kubernetes 导入
。
选择服务所在的集群和命名空间 -> 添加服务 -> 选择配置类型及配置名称后导入。
支持导入 deployment/statefulset/service/ingress/secret/configmap/pvc 资源
导入成功后,可在 Zadig 平台中按需修改服务配置。
将服务加入到环境
进入项目的环境 -> 点击 添加服务
-> 选择从 NS 导入的服务即可批量将服务加入到已有环境中。
查看环境
从代码库批量同步
适用:已存在大体量的 K8s YAML 服务,每个服务有单独的 YAML 配置。
将服务的 YAML 配置按照一定目录结构组织起来,通过 Zadig 批量同步,下面以 voting-demo
项目为例演示说明:
- 源码:zadig/voting-app [1]
- 服务:该项目包括 5 个微服务(
db
/redis
/result
/vote
/worker
) - 服务对应的配置文件:上述 5 个微服务的 K8s YAML 配置文件目录,如下所示:
zadig/examples/voting-app/freestyle-k8s-specifications
├── db
│ ├── db-deployment.yaml
│ └── db-service.yaml
├── redis
│ ├── redis-deployment.yaml
│ └── redis-service.yaml
├── result
│ ├── result-deployment.yaml
│ └── result-service.yaml
├── vote
│ ├── vote-deployment.yaml
│ └── vote-service.yaml
└── worker
└── worker-deployment.yaml
批量同步服务
进入项目的服务模块 -> 点击 从代码库同步
-> 选择代码库以及服务配置所在文件目录,点击 同步
。
本例中即为 Zadig 库的
examples/voting-app/freestyle-k8s-specifications
目录
将服务加入到环境
批量同步服务配置后系统会自动解析多个服务,效果如下图左侧边栏所示。
进入项目的环境中 -> 点击 添加服务
-> 选择从代码库同步的服务即可批量将服务加入到已有环境中。
查看环境
使用服务模板创建
适用:已存在大体量的 K8s YAML 服务配置,多个服务的配置结构同构,不同服务配置的值存在细微差异(比如:不同服务的端口不同、数据库连接地址不同、所需 CPU/Memory 资源限制不同...)
下面以 multi-service-demo
项目的 服务配置[2]为例进行实践。该项目中包括三个服务 service1
/ service2
/ service3
,通过分析这些服务的 K8s YAML 配置,抽象出服务模板,将不同服务有差异的配置提取为模板中的变量,即可得到服务模板 template.yaml[3]。
创建服务模板
在项目预览页点击右上角的 模板库
-> K8s YAML
进入 K8s YAML 模板管理页面。
点击 +
新建模板 -> 填写模板名称 multi-service-demo-template
-> 填写模板内容 -> 填写自定义变量的值对模板赋默认值 -> 保存模板。
该例中的模板内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: $T-Service$
labels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
spec:
selector:
matchLabels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
replicas: 2
template:
metadata:
labels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
spec:
containers:
- name: $T-Service$
image: ccr.ccs.tencentyun.com/koderover-public/$T-Service$:latest
imagePullPolicy: Always
command:
- /workspace/$T-Service$
ports:
- protocol: TCP
containerPort: {{.port}}
resources:
limits:
memory: {{.memoryLimit}}
cpu: {{.cpuLimit}}
---
apiVersion: v1
kind: Service
metadata:
name: $T-Service$
labels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
spec:
type: NodePort
ports:
- protocol: TCP
port: {{.port}}
targetPort: {{.port}}
使用模板新建服务
只需要填写服务名称,选择模板,填写若干变量即可快速创建服务。
进入 multi-service-demo
项目的服务模块,点击 使用模板新建
服务。
填写服务名称 service1
-> 选择模板 multi-service-demo-template
-> 填写 service1
服务在模板中的变量配置后新建即可。
重复上述步骤继续新建服务 service2
、 service3
。
将服务加入到环境
至此这三个服务都被成功创建,进入项目的环境中 -> 点击 添加服务
-> 选择服务即可批量将服务加入到已有环境中。
以上三种方式成功将服务接入 Zadig,接下来便可以使用 Zadig 强大的环境治理和工作流能力对服务进行构建部署、测试验证、持续交付等,推荐阅读:
- 使用 Zadig 工作流 [4]
- Zadig 环境 - K8s YAML 项目 [5]
结语
秉承着 do not block developers
的理念,Zadig 的批量接入能力及 K8s YAML 服务模板功能,极大程度降低服务 YAML 配置文件维护的心智负担,让工程师从繁琐的配置管理“脏活累活”中解放出来,进入云原生持续交付快车道,更多时间创造业务价值。
参考链接:
[1] http://github.com/koderover/zadig/tree/main/examples/voting-app
[2] http://github.com/koderover/zadig/tree/main/examples/multi-service-demo/k8s-yaml/
[3] http://github.com/koderover/zadig/blob/main/examples/multi-service-demo/k8s-yaml/template.yaml
[4] http://docs.koderover.com/zadig/v1.12.0/project/workflow/
[5] http://docs.koderover.com/zadig/v1.12.0/project/env/k8s/
Zadig,让工程师更专注创造。欢迎加入 开源吐槽群🔥
- 主机基础设施如何使用 Zadig 做持续交付
- Zadig 环境负载均衡:0 人工干预,极速部署
- 打通了!Jira Zadig 实现需求与研发过程追踪
- 云原生 DevOps 现状调研问卷征集:KodeRover 联合 OSCHINA 推出
- Zadig v1.13.0 相信开放的力量,工作流连通一切价值
- 飞书视频会议端到端集成测试工程实践经验总结 - Zadig 应用案例
- 在解决了 2961 个用户反馈后,我做出了这样的改变...
- 基于 Ingress Controller 在集群外访问 Zadig 自测环境(最佳实践)
- iMile 利用 Zadig 多云环境周部署千次,跨云跨地域持续交付全球业务
- 稳!上千微服务接入 Zadig 的最佳姿势(Helm Chart 篇)
- 稳!上千微服务接入 Zadig 的最佳姿势(K8s YAML 篇)
- Zadig 洞态 IAST:让安全溶于持续交付
- TT 语音落地 Zadig:开源共创 Helm 接入场景,环境治理搞得定!
- 00后云工程师用 Zadig 为企业研发开源节流
- Zadig 构建究竟有何强大?一起来实践
- 妙盈科技全面实施 Zadig 拥抱云原生
- Zadig SonarQube,为开发过程安全保驾
- Zadig v1.12.0 推出 VS Code 插件,全面支持 GitOps ,好工具就要到最后一公里
- 钛动科技:我们的 Zadig 落地之路
- 众乐邦就这样与 Zadig 结缘了