CICD 流水线就该这么玩系列之一
今天给大家分享的是 DevOps 世界中非常流行的一个 GitOps 工具 - Argo CD。如果你还不知道什么是 GitOps,欢迎留言告诉我,根据热度,我会再写一篇详细讲解 GitOps 的文章。
由于篇幅较长,同时也为了避免阅读疲劳,我把它拆解成 4 个小节来讲解,这样也能让读者最大化吸收并理解文章内容。为了方便及时收到更新,请关注本公众号,谢谢!

本小节包括以下这些内容:
Argo CD 是什么?
Argo CD 是如何工作的?
Argo CD 是什么?
Argo CD 是一个持续交付(CD)工具,但是目前大部分项目中,已经有 Jenkins、GitLab CICD 等 CD 解决方案,为什么又出来另一个 CD 工具呢?Argo CD 和它们有什么区别呢?Argo CD 是不是有什么特别之处,会取代它们吗?接下来我会一一解答这些疑问。
我们先来看看目前大部分项目中是怎么玩 CICD 的。假设项目采用了微服务架构,所有微服务运行在 Kubernetes 集群中。开发人员往代码库 push 了一个特性或者一个 bug fix,Jenkins 持续集成流水线(CI pipeline)会被自动触发,流水线步骤包括有自动化测试,构建 Docker 镜像和推送到镜像仓库,然后是 CD pipeline,把最新的镜像部署到 Kubernetes 集群中,卖个关子,这一步是如何做的呢?

是的,最常见的方法就是直接更新应用的部署 yaml 文件,然后将它 apply 到 Kubernetes 集群。

调整一下 CICD 流水线图,现在应该是下面这样子的。Jenkins 作为 CICD 服务器起到非常关键的作用,这也是大部分项目实施 CICD 的现状。注意,这里的 CD 是 Continuous Delivery。

但是,你有没有考虑过这些问题呢?
必须在 Jenkins 上面安装和设置一些工具,例如 kubectl,helm 等
在 Jenkins 上配置 credentials,这些工具才可以访问 Kubernetes 集群
如果是EKS,那还得配置 Jenkins credentials 以访问 AWS 云平台
因为需要把 Kubernetes cluster credential 提供给外部服务和客户端工具,这就引发了安全问题。尤其是部署多个项目的应用到集群,为了只允许访问特定的 Kubernetes 集群,每个项目有自己的 Kubernetes credentials。更有甚者,如果是很多个集群呢?那这个配置工作就变得繁琐了,安全隐患也更大。
最重要的是,Jenkins 执行完 CD 流水线后,部署状态是不可见的。也就是,kubectl apply 之后,Jenkins 是不知道它的执行状态的,资源是否被创建,服务是否更新成功且为健康状态,你只能通过接下来的测试步骤去确认。
所以,CD 这一部分是有提升空间的。这时候,就该 Argo CD 入场了,以上这些痛点,它都有自己的解决方案,让持续交付到 Kubernetes 集群更有效率。Argo CD 就是基于 GitOps 的原则为 Kubernetes 而诞生的。
Argo CD 是如何工作的?
那么 Argo CD 是如何提高 CD 效率的呢?我们换位思考一下,把 kubectl apply 到集群这个步骤反转过来,不再从外面去访问 Kubernetes 集群。以前是在集群外面通过 push 的方式去更新资源,现在是集群中有一个 Argo CD agent,它作为集群的一部分使用拉取(pull)的方式,从 git repo 上面拉取 yaml 文件,然后更新资源。

现在来看看用 Argo CD 替代 Jenkins 后,CD 流水线应该是怎样的。概括起来,有下面这几个步骤。
部署 Argo CD 到 Kubernetes 集群
配置 Argo CD 以监控 Git repository 的更新
如果 Argo CD 监控到有更新,自动拉取这些更新,然后更新到 Kubernetes 集群
这里有个关于 Git repository 的最佳实践。

为什么要把业务代码和 Kubernetes yaml file 单独放在不同的 git 仓库呢?其中一个主要的原因是,配置代码不仅仅有 k8s deployment yaml 文件,还有 ConfigMap,Secret,Service,Ingress 等等其它 Kubernetes 资源,当我们只需要更新这些 yaml 文件时,可以独立于业务代码,不会触发 CI pipeline,因为业务代码本身并没有任何更新。也不需要,在 CI pipeline 中写一些复杂的逻辑去检查有哪些更新。这个配置代码库也被称之为 GitOps Repository。
现在整个 CICD 流水线是下面这样子的。

Argo CD 支持 Kubernetes YAML 文件,Helm Charts,Kustomize(kustomize.io) ,还有其它最终会生成为 YAML 格式的模版文件。
我们最终拥有了单独的CI 流水线和 CD 流水线。一般情况下,CI 流水线由开发者或者 DevOps 负责,CD 流水线由 Ops 或者 DevOps 负责(使用 Argo CD)。这样的好处是,不仅有自动化的 CICD 流水线,还能达到关注点分离的目的,不同的团队负责流水线的不同部分。
好了,今天先写到这,各位看官可以先消化一下,想一想,你所在的项目 CICD 流水线是怎么做的呢,还有没有提升的空间呢?
CICD 流水线就该这么玩系列之一的更多相关文章
- gitlab cicd流水线语法
流水线语法有哪些? 流水线参数列表 Keyword Description script 运行的Shell命令或脚本. image 使用docker映像. services 使用docker服务映像. ...
- .Net Core 微服务容器系列基础目录篇
1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...
- 一站式交付体验:云效+Kubernetes
背景 云效依托于阿里巴巴研发效能多年规模化持续交付,赋能云上开发者专为云端用户提供的一站式研发协作平台.Kubernetes,由Google开源的容器集群管理平台,面向运维侧提供自动化的集群和应用管理 ...
- 云原生强大且灵活的持续集成CI开源框架Tekton实战-上
@ 目录 概述 定义 常见CICD工具 使用好处 组件 基本概念 安装 前提条件 安装Tekton Pipelines 创建并运行任务 安装Dashboard 安装Cli Pipelines示例演示 ...
- 【BZOJ-1324】Exca王者之剑 最小割
1324: Exca王者之剑 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 483 Solved: 248[Submit][Status][Disc ...
- 【普通の惨败】GDOI2015卖萌记
前记:这次可真的全程卖萌了.... Day 0 早早坐上前往广州的火车,然后转车到韶关 然后就到了偏远郊区的(准)四星酒店 周围连路灯都没有,极其僻静极其荒凉 大家都极其安静地回到自己房间复习 这一天 ...
- 作为深度学习最强框架的TensorFlow如何进行时序预测!(转)
作为深度学习最强框架的TensorFlow如何进行时序预测! BigQuant 2 个月前 摘要: 2017年深度学习框架关注度排名tensorflow以绝对的优势占领榜首,本文通过一个小例子介绍了T ...
- [转]TensorFlow如何进行时序预测
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组 ...
- 博云DevOps 3.0重大升级 | 可用性大幅提升、自研需求管理&自定义工作流上线,满足客户多样化需求
DevOps能够为企业带来更高的部署频率.更短的交付周期与更快的客户响应速度.标准化.规范化的管理流程,可视化和数字化的研发进度管理和可追溯的版本也为企业带来的了更多的价值.引入DevOps成为企业实 ...
随机推荐
- ABP VNext发布遇到的坑
本地调试没有问题,发布后通过Token调用其他API时,出现返回JSON中提示:Authorization failed! Given policy has not granted. 需要修改apps ...
- VUE004. provide与inject的使用(祖先组件隔多层传静态值给子孙组件)
provide和inject可以通过祖先组件隔三层四层甚至隔着九层妖塔传值给子孙组件. 需要注意的是这样的传值方式是非响应式的,需要结合自身的应用场景,比如将上传的限制条件通过父组件传值给子组件的子组 ...
- Vue指令及自定义指令的使用
导航列表: 一.vue指令 二.自定义指令 一.vue指令 回到顶部 1. v-text v-text主要用来更新textContent,可以等同于JS的text属性,不会解析标签,会把标签解析 ...
- 法术迸发(Spellburst)
描述 法术迸发 (EN:Spellburst ) 是一种在<通灵学园>中加入的关键字异能,在玩家打出一张法术牌后触发,只能触发一次. 若随从在法术结算过程中死亡,则不会触发效果 思路 首先 ...
- 测试开发【提测平台】分享10-Element UI抽屉和表单校验&增改接口合并实现应用管理
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 开篇说个小讨论,一个群里聊天聊到关于更新篇章的长度,是小篇幅多次,还是每次按照一个小完整的功能,我个人的是按照后种来的,主要的思考就是希望 ...
- mybatis一对多联表查询的两种常见方式
1.嵌套结果查询(部分代码如下) sql语句接上: 注释:class表(c别名),student表teacher(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为 ...
- DEM数据全国各省的裁剪与分享(30m、90m、250m、1000m)
1.简介: 数字高程模型(Digital Elevation Model),简称DEM,是通过有限的地形高程数据实现对地面地形的数字化模拟. 这次分享的数据是全国34个省份的DEM裁剪数据,一共有6期 ...
- Centos7安装配置Gitlab-CE
GitLab介绍 GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业.学校等内部网络搭建git私服. 功能:Gitl ...
- spl_autoload_register 实现自动加载
spl_autoload_register 注册给定的函数作为 __autoload 的实现 bool spl_autoload_register ([ callable $autoload_func ...
- P6640-[BJOI2020]封印【SAM,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P6640 题目大意 给出两个字符串\(s,t\).\(q\)次给出\(l,r\)询问\(s_{l\sim r}\)与 ...