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成为企业实 ...
随机推荐
- java版gRPC实战之二:服务发布和调用
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Java XXE漏洞典型场景分析
本文首发于oppo安全应急响应中心: https://mp.weixin.qq.com/s?__biz=MzUyNzc4Mzk3MQ==&mid=2247485488&idx=1&am ...
- 自定义组件 v-model 的使用
关于自定义组件如何使用 v-model,本章直讲如何使用: 一. $emit('input', params) // 父组件中 <template> <article> {{f ...
- windows 下使用 mingw编译器 调试时 无法跟进源码
windows 下使用 mingw编译器 调试时 无法跟进源码 最近在公司使用QT 开发,官方在线下载的 安装的QT mingw 都是没有debug版本的 由于没有debug版本动态库 所以你调试的时 ...
- PHP中的MySQLi扩展学习(五)MySQLI_STMT对象操作
就像 PDO 中的 PDO_Statment 对象一样,MySQLI_STMT 对象也是一个预处理语句所形成的对象,专门用来操作 MySQLi 所生成的预处理语句的.其实操作方式之类也都比较相似,不外 ...
- symfony generate:bundle出现提示: Checking that the bundle is autoloaded
可以参考官方文档给出来的解决办法 http://symfonychina.com/doc/current/bundles/SensioGeneratorBundle/commands/generate ...
- Linux系列(4) - 目录处理命令(1)
前言 linux中一切皆文件.目录为目录文件,普通文件用来保存数据,目录文件用来保存文件 建立目录:mkdir mkdir -p [目录名] -p 递归创建目录,例子:mkdir -p LinuxTe ...
- c++ 的学习笔记 第一集cim cout
1. 你要用这个东西,所以得有包含它得头文件,就像java 你要用某个模块,你得包含这个模块 模块化??单片机里面学的模块化(可以在vs里面实现) 2. 当我把注册表regedit 程序删除之后成功了 ...
- 从0到1告诉你搭建完整Python+requests接口自动化测试框架!
前言 很多小伙伴不知道什么是框架?框架有哪些东西? 一步步从需求分析到报告生成告诉你如何搭自动化建框架. 学完unittest后这里基本上可以搭建一个简易的项目框架了,我们可以用一条run_main. ...
- 11.2.0.4 RAC manual opatch
1.Stop the CRS managed resources running from DB homes. If this is a GI Home environment, as the dat ...