作者:周靖峰,青云科技容器顾问,云原生爱好者,目前专注于 DevOps,云原生领域技术涉及 Kubernetes、KubeSphere、Argo。

前文概述

前面我们已经掌握了如何通过 Jenkins + Argo CD 的方式实现单集群的持续交付,明白了整个 CI/CD 过程中不同工具在流水线中的关系。所以接下来我们将更深入的了解 Argo CD 的特性。

前文链接:KubeSphere DevOps 基于 Jenkins + Argo 实现单集群的持续交付实践

KubeSphere 配置

集群配置

这里我们需要准备至少 2 个集群,并且需要开启多集群组件、DevOps 组件。

因为 KubeSphere 已经内置了 Argo,所以只要被 KubeSphere 所管理的集群会自动注册上 Argo。

DevOps 配置

这里我们依旧要准备一个 Git 仓库, 这里仍然是使用我们之前的仓库例子。

https://github.com/Feeeenng/devops-maven-sample.git

不过需要注意,这次我们需要选择 multi-cluster 分支。

Argo CD 部分

ApplicationSet

这里主要介绍 ArgoCD 的一个控制器 ApplicationSet controller

此控制器追加了对跨多集群以及 monorepos 的支持。该项目以前是一个独立项目,后在 Argo CD v2.3 版本中合入主分支。

ApplicationSet 控制器主要应用场景:

  • 通过 Argo CD 单一 Kubernetes 资源管理应用发布多集群;
  • 单一 Kubernetes 资源发布一个 Git 或者多个 Git 仓库来部署多个应用;
  • 增加了 monorepos 的支持;
  • 多租户集群模式下,提高了单个集群租户使用 Argo CD 部署能力。

Generators

ApplicationSet 主要通过 generators 来实现对资源的定义, 通过 template 来实现参数值的替换。目前主要支持以下几种:

  • List generator:基于集群名/URL 值的固定列;
  • Cluster generator:基于 Argo CD 自定义方式;
  • Git generator:基于 Git 存储中包含的文件或文件夹;
  • Matrix generator:基于上述两种生成器的组合方式。

更多的方式参考地址:

https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/

实践操作

这次我们使用 List generator 的方式生成配置模版。

代码目录 deploy 下包含一个文件 applicationset.yaml

# 采用 List generator 方式进行生成
# 集群信息都注入在配置里面
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: devops-maven-sample
spec:
generators:
- list:
elements:
- cluster: dev
url: https://kubernetes.default.svc
- cluster: test
url: https://172.31.73.92:6443

开启 OnDeletion 配置

preserveResourcesOnDeletion 参数表示删除 ApplicationSet 资源以后,通过模版自动生成出来的 Application 一并删除。

请注意,生产环境不建议开启这个参数!

  syncPolicy:
preserveResourcesOnDeletion: true

更多模版配置参考:

https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/

配置同步策略

配置 Application CRD 同步策略。

CreateNamespace 自动创建 namespace。

PrunePropagationPolicy 删除采用友好删除方式策略。

prune 默认情况下,Argo CD 考虑安全机制不会自动同步 Git 资源变更操作,这里手动开启。确保当我们 Git 进行变更以后,Argo 会自动进行 Git 修改部署资源。

      syncPolicy:
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
automated:
prune: true

更多描述查看地址:

https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/

模版定义

通过上述 List generator 的定义参数,对应好模版,这种类型都属于 Key/Values 类型。

      source:
repoURL: https://github.com/Feeeenng/devops-maven-sample.git
targetRevision: multi-cluster
path: deploy/{{cluster}}
destination:
server: '{{url}}'
namespace: multi-demo

最后运行流水行以后,等待流水线执行完毕。Argo 自动进行 GitOps 触发管理同步。

然后进入 KubeSphere 界面,配置 Argo 设置为 NodePort 类型 观察 web 界面。

打开 Argo CD UI 界面,这里我配置了 Argo CD 对接 KubeSphere 的 LDAP。

所以可以通过 KubeSphere 的账号密码进行登录。如果没有配置的话,默认密码需要执行下面命令进行查看。

kubectl get secret -n argocd argocd-initial-admin-secret

这个时候我们能够看到,我们刚才通过 Jenkins pipeline 运行的流水线已经成功。并且 Argo CD 也已经自动同步发布应用。

回到 KubeSphere 界面上观察应用部署情况能够看到,我们所发布的 2 个集群也已经正常部署完成。

Dev 集群:

Test 集群:

至此,我们使用 Jenkins 完成了通过 Argo CD 来部署多集群的应用发布。

后续

当前例子使用的是简单的列表生成器的方式,但 ApplicationSet 的控制器其实也支持更多复杂的场景。比如通过 Git Generator 的方式只定义一个配置参数,满足多个应用的发布支持。这样也能够把应用代码跟配置代码进行分离。从而开发跟运维互不影响。

参考文档:

本文由博客一文多发平台 OpenWrite 发布!

基于Jenkins + Argo 实现多集群的持续交付的更多相关文章

  1. 联想企业网盘:SaaS服务集群化持续交付实践

    1      前言 当代信息技术飞速发展,软件和系统的代码规模都变得越来越大,而且组件众多,依赖繁复,每次新版本的发布都仿佛是乘坐一次无座的绿皮车长途夜行,疲惫不堪.软件交付是一个复杂的工程,涉及到软 ...

  2. 基于Tomcat的Solr3.5集群部署

    基于Tomcat的Solr3.5集群部署 一.准备工作 1.1 保证SOLR库文件版本相同 保证SOLR的lib文件版本,slf4j-log4j12-1.6.1.jar slf4j-jdk14-1.6 ...

  3. 基于HDInsight 3.4 HBase集群规划参考

    基于linux 创建HDInsight HBase集群,选择最小配置,zk(3).NN(2).WN(2),集群节点默认组件服务规划如下 NN0: Active NameNode /HDFS ZKFai ...

  4. 基于VMware的虚拟Linux集群搭建-lvs+keepalived

    基于VMware的虚拟Linux集群搭建-lvs+keepalived 本文通过keepalived实现lvsserver的的双机热备和真实server之间的负载均衡.这方面的blog挺多,可是每一个 ...

  5. Azure上搭建ActiveMQ集群-基于ZooKeeper配置ActiveMQ高可用性集群

    ActiveMQ从5.9.0版本开始,集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的实现方式. 本文主要介绍了在Windows环境下配置基于Zoo ...

  6. 通过 Terracotta实现基于Tomcat的Web应用集群

    [转]通过 Terracotta实现基于Tomcat的Web应用集群 博客分类: 企业应用面临的问题 Java&Socket 开源组件的应用 tomcatweb session集群服务器负载均 ...

  7. 基于开源软件构建高性能集群NAS系统,包括负载均衡(刘爱贵)

    大数据时代的到来已经不可阻挡,面对数据的爆炸式增长,尤其是半结构化数据和非结构化数据,NoSQL存储系统和分布式文件系统成为了技术浪潮,得到了长足的发展.非结构化数据目前呈现更加快速的增长趋势,IDC ...

  8. 基于Ambari的WebUI实现集群扩容案例

    基于Ambari的WebUI实现集群扩容案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.将HDP的服务托管给Ambari服务 1>.点击“Service Auto S ...

  9. 基于Ambari Server部署HDP集群实战案例

    基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...

  10. 【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件

    Hello 大家好,我是TANZAME,我们又见面了.今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品. 随着业务增长,线上环境的QPS暴增,自然而然将当前的单 ...

随机推荐

  1. 鹏程实验室,启智平台,openI平台,积分兑换新标准

    2024-02-13 11:12:21 星期二 地址: https://openi.pcl.ac.cn/reward/point/rule

  2. 如何在anaconda环境中安装cuda.h和cuda_runtime.h

    在前面的文章(几年前的文章)中我们介绍了在anaconda中安装cuda.cudnn后,有介绍了如何在anaconda中安装nvcc.nccl等NVIDIA的各种编译器和库,本文介绍如何在anacon ...

  3. http与https通俗易懂的原理解析

    1.背景 经常都在说http.https,都知道https是安全的, 但是, 为什么说http不安全呢? 为什么又说https是安全的呢? 接下来我将使用通俗易懂的方式给大家分析一下....... 2 ...

  4. EF Core连接PostgreSQL数据库

    PostgreSQL数据库介绍 PostgreSQL是一个功能强大的开源对象关系型数据库管理系统(RDBMS).最初于1986年在加州大学伯克利分校的POSTGRES项目中诞生,PostgreSQL以 ...

  5. .NET 与 LayUI 实现高效敏捷开发框架

    前言 WaterCloud 是一个集成了 LayUI 的高效敏捷开发框架,专为 .NET 开发者设计. 它不仅支持多种 .NET 版本(.NET 4.5..NET Core 3.1..NET 5..N ...

  6. vue(element)中使用monaco实现代码高亮

    vue(element)中使用monaco实现代码高亮 使用的是vue语言,用element的组件,要做一个在线编辑代码,要求输入代码内容,可以进行高亮展示,可以切换各不同语言,而且支持关键字补全,还 ...

  7. 微服务全链路跟踪:grpc集成jaeger

    微服务全链路跟踪:grpc集成zipkin 微服务全链路跟踪:grpc集成jaeger 微服务全链路跟踪:springcloud集成jaeger 微服务全链路跟踪:jaeger集成istio,并兼容u ...

  8. programmers model

    Handler模式一直使用MSP,所以在handler模式下处理器会忽略SPSEL位:异常进入及返回机制会更新CONTROL寄存器. 在操作系统的环境中,推荐线程在Thread模式下运行使用PSP,内 ...

  9. 【CMake系列】09-cmake install 一般文件 文件夹 代码文件

    上一节,我们学习了项目构建后.目标的安装,本节学习的内容是 对于一般文件,文件夹以及源代码的安装 本节的文件依然使用 file(WRITE xxx.xx) 来创建,不依赖额外的文件 本专栏的实践代码全 ...

  10. 零基础学习人工智能—Python—Pytorch学习(七)

    前言 本文主要讲神经网络的下半部分. 其实就是结合之前学习的全部内容,进行一次神经网络的训练. 神经网络 下面是使用MNIST数据集进行的手写数字识别的神经网络训练和使用. MNIST 数据集,是一个 ...