杭州云之重器科技有限公司,业界简称「云器科技」,自 2021 年成立以来,以其创新的"single-engine"湖仓平台引领数据架构革新,统一了数据处理流程,成为多云数据管理的先锋。
云器科技汇聚了阿里云、字节跳动、微软、oracle 等顶尖企业的资深专家,携手推动数据使用的转型。其旗舰产品 lakehouse,提供企业级全托管数据平台,用户注册账户即可轻松进行数据管理和分析,无需涉足复杂的后台维护。
云器 lakehouse 搭载的先进增量计算引擎,整合了批处理、流计算与交互式分析,适配多云环境,助力企业优化数据架构,减少冗余。云器科技以此确立了其在自动化和智能化数据平台领域的领先地位。
其背后的工程效率和技术运维团队,在云原生 devops 实践中扮演了关键角色。本文我们采访了云器工程效率团队——郑伟,给大家分享如何通过 zadig 平台,应对多云环境挑战,实现高效安全发布,保障业务连续性。
场景痛点
在我们的微服务的构建部署工程化实施过程中,原先采用的 jenkins 逐渐显露出一些局限性,主要表现在以下几个方面:
- 配置复杂性高
在使用 jenkins 进行新环境的 pipeline 配置时,我们遇到了相当复杂的设置流程。每当涉及到编译代码或构建镜像等环节的变更时,都需要对每一个 job 进行单独的修改,这不仅增加了工作量,也增加了出错的风险。
- 微服务项目的配置挑战
在微服务架构中,由于每个服务都需独立配置 pipeline,这导致管理工作变得繁琐。而且,每当需要增加新的环境时,我们不得不重复复制和调整相关 jobs,这一过程既耗时又容易出错。
随着公司业务发展,新开云厂商和 region 的增加,加剧了管理和使用的复杂性。
- jenkins job 界面灵活但极易出错
jenkins 的用户界面在处理复杂的构建流程配置时,不够直观和简洁。在执行发布操作或查看环境内服务状态、镜像 tag 时,界面操作显得不够直接,影响了工作效率。
选择 zadig 的原因
当时评估选型 devops 平台的过程中,我们不仅考虑了 zadig,还评估了其他备选方案。然而,zadig 最终以其独特的优势胜出,以下是我们选择 zadig 的主要原因:
- 集成 gerrit 的需求
我们代码库使用的是 gerrit。在评估过程中,发现 argocd、kubesphere 等不支持与 gerrit 集成,而 zadig 已支持集成 gerrit 的需求。
- 云原生和国内研发优势
zadig 是国内公司研发的云原生 devops 平台,提供一站式 ci/cd 解决方案。它的模板和工作流功能比 jenkins 更加强大,且集成了飞书审批功能,支持多云环境,确保了稳定高效的交付。
- 产品与技术团队的支持
zadig 的产品和技术团队给予了大力的支持,我们反馈的问题都能得到及时的响应和解决。
zadig 解决方案
- 强大的模板库
zadig 提供了包括 k8s yaml、dockerfile、构建和工作流等在内的模板库,极大提升了工程化效率。
模板的目的是为了能复用,比如前端有通用的 dockerfile 模板,后端有通用的 dockerfile 模板;构建模板也是相同的道理,多个不同的后端 maven 项目,可以使用相同的构建模板(相同的编译命令 mvn clean package 和 dockerfile),同样如果多个前端项目都是相同的编译命令和 dockerfile,也可设计构建模板来提高工程化效率。
无论是新增服务,还是构建、dockerfile、yaml 更新,只要修改模板就可以自动同步(对模板库操作应用到服务时,该服务配置将自动基于模板内容同步)。通过使用模板,更加方便地编排构建部署工作流,极大提升工程化效率。
- 使用变量的灵活性
模板中的变量使得不同服务的配置差异化变得简单,全局变量的运用进一步提高了配置的复用性。
一般大多数服务都用到的变量,在同一个环境下变量值相同的使用全局变量。全局变量值,一般会跟随环境变化,只要改一次,即可应用到所有服务。
- go 模板语法的高效性
go 模板语法允许根据不同的条件渲染模板,简化了 kubernetes 配置文件的生成。
我们用到 go 模板的几个场景:
- pod 的 hostnetwork,配置 pod 是否使用宿主机的网络和相应的 dns 策略
spec:
template:
spec:
hostaliases:
{{- range .ip_hostnames}}
- ip: {{ .ip }}
hostnames:
{{- range .hostnames}}
- {{ . }}
{{- end}}
{{- end}}
如果 .``hostnetwork
被设置为真,则 pod 使用宿主机的网络和 dns 设置;否则,pod 使用 kubernetes pod 网络和集群内的 dns 解析。
- pod 的 hostaliases,hostaliases 定义 pod 的 hosts 文件(/etc/hosts)里的内容。
spec:
template:
spec:
hostaliases:
{{- range .ip_hostnames}}
- ip: {{ .ip }}
hostnames:
{{- range .hostnames}}
- {{ . }}
{{- end}}
{{- end}}
- go 模板语法来条件性地包含注释(annotations),用于支持个别的 cloudprovider 需要特殊的配置。
kind: service
apiversion: v1
metadata:
annotations:
{{- if .cloudprovidergcp }}
cloud.google.com/neg: '{"ingress": true}'
cloud.google.com/backend-config: '{"default": "{{.backend_config}}"}'
{{- end }}
- 工作流的高效编排
zadig 的工作流支持多服务并行构建和部署,在一个工作流即可实现多个服务的构建、部署、测试等,提高了工作流程的管理和执行效率。
- 发布集成飞书审批
zadig 支持集成飞书审批流程,一定程度上增强了环境发布管控的便捷性和安全性。
实践成果
- 多云高效发布
目前我们在阿里云、腾讯云、aws、gcp 的 10 个 region 开服,近期华为云等也即将开服。zadig 使我们在多云环境下的发布工作变得简单高效,已成功应用于阿里云、腾讯云、aws、gcp 等多个云服务区域。
- 万级构建部署
使用 zadig 不到一年时间,执行的自动化构建和部署次数已达到 2 万次以上,显著提升了研发和部署的效率。
总之,通过引入 zadig,我们解决了之前使用 jenkins 时面临的配置复杂性问题,简化了用户界面操作,并通过强大的模板库和工作流功能,实现了工程化效率的显著提升。同时,zadig 的多云支持和飞书审批集成,进一步加强了我们在多云环境下的发布管控能力。
扫码即刻咨询
解锁企业专属最佳实践方案!
发表评论