自建平台CD发布技术选型
第一步:技术选型
ArgoCD 两种使用模式
- 使用 Kustomize:推荐 GitOps 模式,版本在 Git 中控制;ArgoCD 检测到版本/模板变更自动触发发布,也支持手动同步。
- 使用 Helm:同样支持多版本控制。
各方案优缺点
- Helm
- 优点:一套模板支持多次部署。
- 缺点:配置复杂,强依赖
values文件;配置叠加变多后极易混乱。
- Kustomize
- 优点:采用叠加、补丁修改方式渲染模板;应用数量少时维护简单;适配 GitOps。
- 缺点:每个应用至少维护一份
kustomize.yaml;应用规模变大后维护成本高;没有 Python SDK;如果通过 Python 操作文件系统调用 Kustomize,性能较差。
- KCL(字节开源模板管理编程语言)
- 优点:
- 支持字段类型定义与字段校验;
- 提供多语言 SDK;
- 语法设计接近 Python,上手相对友好;
- 融合 Helm、Kustomize 的能力,同时优化二者维护痛点。
- 缺点:需要额外学习 KCL 语法。
平台的处理逻辑
- 用户在平台通过表单提交必填字段;平台做参数约束,限制用户可传入的字段,避免用户自定义参数泛滥,造成后期不可维护。
- 平台可管理 K8s 资源:
ingress、svc、deploy、sts、pod。 - 平台后端基于 FastAPI;用户提交的全部字段输入 KCL,渲染输出部署 YAML。
- KCL 基础模板存储在数据库;仅管理员具备编辑权限,普通用户仅只读查看(界面置灰)。
- 兼容场景:允许用户自定义 YAML 创建特殊资源(该能力会违背第1条参数约束设计)。
回滚逻辑
每次发布,将 KCL 渲染完成后的模板以 JSON 格式存入数据库,留存版本快照。
回滚流程:
- 对比线上资源模板与数据库历史版本快照;
- 内容无变化则跳过执行;
- 存在差异则使用 SSA 方式更新资源。
部署 Diff 预览能力
- 后端:使用 python
difflib做内容对比,将差异数据返回前端。 - 前端:使用
diff2html渲染展示差异界面。
问题:用户动作映射到 KCL 渲染如何实现?
示例场景:应用是否开启 Ingress;Ingress 是否配置多个域名等?
实现思路:
- 将用户表单输入的参数,传入封装好的 Python 业务方法;
- 在 Python 内部调用 KCL 执行渲染,输出 YAML / JSON;
- Python 对渲染结果做二次加工处理,生成最终 K8s 资源定义;
- 将最终资源交由 K8s client 库执行集群操作。

浙公网安备 33010602011771号