今天给大家分享的是 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 流水线应该是怎样的。概括起来,有下面这几个步骤。

  1. 部署 Argo CD 到 Kubernetes 集群

  2. 配置 Argo CD 以监控 Git repository 的更新

  3. 如果 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 流水线就该这么玩系列之一的更多相关文章

  1. gitlab cicd流水线语法

    流水线语法有哪些? 流水线参数列表 Keyword Description script 运行的Shell命令或脚本. image 使用docker映像. services 使用docker服务映像. ...

  2. .Net Core 微服务容器系列基础目录篇

    1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...

  3. 一站式交付体验:云效+Kubernetes

    背景 云效依托于阿里巴巴研发效能多年规模化持续交付,赋能云上开发者专为云端用户提供的一站式研发协作平台.Kubernetes,由Google开源的容器集群管理平台,面向运维侧提供自动化的集群和应用管理 ...

  4. 云原生强大且灵活的持续集成CI开源框架Tekton实战-上

    @ 目录 概述 定义 常见CICD工具 使用好处 组件 基本概念 安装 前提条件 安装Tekton Pipelines 创建并运行任务 安装Dashboard 安装Cli Pipelines示例演示 ...

  5. 【BZOJ-1324】Exca王者之剑 最小割

    1324: Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 483  Solved: 248[Submit][Status][Disc ...

  6. 【普通の惨败】GDOI2015卖萌记

    前记:这次可真的全程卖萌了.... Day 0 早早坐上前往广州的火车,然后转车到韶关 然后就到了偏远郊区的(准)四星酒店 周围连路灯都没有,极其僻静极其荒凉 大家都极其安静地回到自己房间复习 这一天 ...

  7. 作为深度学习最强框架的TensorFlow如何进行时序预测!(转)

    作为深度学习最强框架的TensorFlow如何进行时序预测! BigQuant 2 个月前 摘要: 2017年深度学习框架关注度排名tensorflow以绝对的优势占领榜首,本文通过一个小例子介绍了T ...

  8. [转]TensorFlow如何进行时序预测

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组 ...

  9. 博云DevOps 3.0重大升级 | 可用性大幅提升、自研需求管理&自定义工作流上线,满足客户多样化需求

    DevOps能够为企业带来更高的部署频率.更短的交付周期与更快的客户响应速度.标准化.规范化的管理流程,可视化和数字化的研发进度管理和可追溯的版本也为企业带来的了更多的价值.引入DevOps成为企业实 ...

随机推荐

  1. Git 系列教程(3)- 初次运行 Git 前的配置

    前言 直接搬官网教程,再修改下,先啰嗦可以直接看以前的文章 Window初始化Git环境 https://www.cnblogs.com/poloyy/p/12185132.html Linux初始化 ...

  2. jooq使用示例

    一.说明 最近使用的项目,采用了jooq. 通过学习api文档和自我调试,写了一些代码,在此处进行记录. 二.代码 一切尽在代码中-- 参考文档:http://www.jooq.org/doc/3.1 ...

  3. shell脚本———双重循环——九九乘法表

    1.基础双重循环模板 2.break跳出单个循环 3.continue中止某次循环中的命令,但不会完全中止整个命令 4.九九乘法表

  4. 计算机基础知识以及java JDK、JRE

    计算机 计算机(Computer)全称:电子计算机,是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔 ...

  5. 我用MRS-ClickHouse构建的用户画像系统,让老板拍手称赞

    摘要:在移动互联网时代,用户数量庞大,标签数量众多,用户标签的数据量巨大.用户画像系统中,对于标签的存储和查询,不同的企业有不同的实现方案.当前主流的实现方案采用ElasticSearch方案.但基于 ...

  6. (5)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot简介

    ​Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板化的配置 ...

  7. [第四篇]——Windows Docker 安装之Spring Cloud直播商城 b2b2c电子商务技术总结

    Windows Docker 安装 Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境. Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境, ...

  8. 一文搞懂Python Unittest测试方法执行顺序

    大家好~我是米洛! 欢迎关注我的公众号测试开发坑货,一起交流!点赞收藏关注,不迷路. Unittest unittest大家应该都不陌生.它作为一款博主在5-6年前最常用的单元测试框架,现在正被pyt ...

  9. 截断误差VS舍入误差

     截断误差:是指计算某个算式时没有精确的计算结果,如积分计算,无穷级数计算等,使用极限的形式表达的,显然我们只能截取有限项进行计算,此时必定会有误差存在,这就是截断误差. 舍入误差:是指由于计算机表示 ...

  10. 10.6Java学习

    1.类,对象,方法的定义.2.标识符分为两类:关键字/常见的基本类型:boolean(布尔型),byte(字节型),char(字符型),double(双精度),float(浮点),int(整型),lo ...