站点图标 梦呓

Argo自动化流水线方案

仓促编写,新鲜出炉,如有错误,欢迎大家指正~

目标

早干完,早回家!不熬夜!

痛点

服务众多,上线发布巨慢无比

目前有五十个微服务,需要把这些全部上线才能构建完整系统。CPD项目引入serverless,完全实现后服务数量会成指数级增长。上线时一个个发布巨慢无比。

配置众多,不好管理

基于以上服务,每个至少有三个配置文件,就是总共约150个配置文件,手动管理应用,改到吐血。

多环境发布,差异化部署不好控制

每个项目至少三个环境,测试环境、预发布环境、正式环境。每个环境的配置参数又略微不一样,改了这个,忘了那个,或这个修改,那个修改,环境部署的服务是否正确,配置是否正确,只有天知道。

团队协作开发,修改自己用到的配置,(覆盖)顶来顶去,每个人都得去排查自己的功能在环境为什么返回失败,浪费无意义时间。每个环境众多配置满天飞,改到吐血。

略微差异的代码版本,要同时上线好几个项目

50个子服务,150个配置,乘N个项目,程序员不用回家了,管理起来复杂无比,大部分人的大多数时间时间并不是在解决实际线上问题,而是在验证环境的准确性。

Argo Workflows

Argo workflows 负责 DevOPS的CI部分,可以通过编写具体子服务的yaml进行配置即可实现自动化打包。鉴于运维还未安装服务,这里不做展示。

它不仅可以构建后端镜像,同样也可以构建前端代码,并传输到指定位置。一切都是基于yaml配置,运维编写好之后,开发人员只管用就可以了。

同时它也可以进行数据处理流水线、机器学习模型训练任务编排。

核心特性

  1. 容器即步骤: 工作流的每一个步骤都是一个独立的容器。
  2. DAG(有向无环图): 轻松定义复杂的依赖关系和并行任务。
  3. 云原生: 直接以 Kubernetes CRD(自定义资源定义)运行,无需额外搭建和维护调度引擎。
  4. 适用于CI(持续集成)、数据处理流水线、机器学习模型训练。

与Jekenis对比

  1. Argo功能较为强大,且适配云原生场景下的服务CI/CD流程。
  2. Jekenis只适合单机打包,当打quarkus镜像(内存耗费巨大),或多服务(50+)共同打镜像时吃不消,又不太好专门为Jekenis配置高性能大内存服务器。Argo Workflows可以部署在(测试)k8s集群上,当打镜像时,可以利用k8s集群的资源动态协调能力,每个服务构建都是一个pod任务,充分利用集群资源,物尽其用!
  3. Jekenis服务状态管理复杂,非云原生,维护成本高(独有资源/配置无法统一管理)。
  4. 有丰富的图形化页面进行管理,且能够与ArgoCD进行一体式自动化联动。
  5. 每个子服务镜像构建的yaml同样可以被git管理起来,可以做到在任何时间,任何地点,随时迁移/构建环境,项目。不会使得配置、文件散落各处,牵一发动全身,无历史回溯记录。

ArgoCD

ArgoCD 负责 DevOPS的CD部分。

功能亮点

服务快速部署能力

可以直接填写helm git地址、代码分支、环境参数配置文件、k8s集群地址即可实现快速部署,如果集群崩溃,只要 Git 仓库还在,随便找个新集群装上 Argo CD,一键就能把所有服务按原样拉起来。

集群服务健康状态检查

可以实现对集群各子服务健康检查管理,快速找出不健康服务,定位原因。

服务同步状态监控/配置偏移自动修复

可以对集群内服务同步状态进行监控,及时发现哪些服务偏离了git最新版本,进行配置偏移的自动修复。杜绝程序员手动/暗地修改环境配置,造成信息黑洞,只能通过修改提交git的方式来让ArgoCD自动管理配置,大家都有据可依。审计追踪清晰、安全性高(集群无需向外部暴露凭证,由集群内部拉取配置)。

历史部署版本一键恢复

当出现问题时,可以通过History and rollback功能一键快速恢复历史部署版本。准确知道恢复的是git哪个分支,哪次commit,具体都有哪些配置参数。

配置偏移详细对比

当第一次使用Argo时,环境配置与git版本配置严重不一致,导致谁也不敢一键升级,ArgoCD提供了配置对比功能,左侧的是环境配置,右侧的是git上的版本,它可以一键渲染helm参数,以及自动忽略k8s增加的默认配置,给人清晰化的配置结果。

回顾

再详细讲解下Argo的哪些功能解决了最开始提出的痛点问题。

展望

程序员在git提交代码,通过Argo Events触发事件,Argo Workflows进行CI编译打包镜像,然后推送到镜像制品库,同时自动修改helm脚本上的镜像版本号,这时候程序员在ArgoCD上查看最新helm git上与环境配置的差异,差异部分二次确认,无误即可点SYNC进行服务发布(可全自动化执行)。

Argo 控制k8s主集群,然后主集群再通过karmada向子k8s集群(各子项目)下发最新服务。

在以上过程中,程序员做的只是点一次(两次)按钮,一次git提交,一次SYNC进行同步!

最终效果

一切皆代码,与一切皆容器!

只要git仓库没丢,系统蓝图保留好,一切都可以快速部署!

提升交付速度、增强系统稳定性、降低运维心智负担。

退出移动版