基于Jenkins + Argo 实现多集群的持续交付

作者:周靖峰,青云科技容器顾问,云原生爱好者,目前专注于 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: devurl: https://kubernetes.default.svc- cluster: testurl: 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=foregroundautomated: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.gittargetRevision: multi-clusterpath: 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 的方式只定义一个配置参数,满足多个应用的发布支持。这样也能够把应用代码跟配置代码进行分离。从而开发跟运维互不影响。

参考文档:

  • https://argo-cd.readthedocs.io/en/stable/
  • https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/
  • https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/
  • https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/
  • https://github.com/Feeeenng/devops-maven-sample

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

埃克拉姆·阿拉姆,MindPortal的CEO和联合创始人 - 采访系列

Ekram Alam 专访:MindPortal 创始人兼首席执行官 引言 Ekram Alam 是 MindPortal 的创始人兼首席执行官,该公司致力于开发非侵入式神经接口,改变人类与人工智能的交互方式。他们的使命是通过让用户仅通过思想与人工智能交互,从而…

c++11笔记 跨平台线程池

1. 左值: 简单的说,可以放在等号左边的变量可以称之为左值,可以对该变量进行取地址运算的是左值,左值在内存中有确切的地址,可以长期存在,拥有具体的名字的。 比如 int a 10; int *p &a;//这里的a就是左值 2.…

java 继承(下)

前面我们已经说明了什么是继承?继承的好处弊端等,不清楚的可参照链接 java 继承(上)-CSDN博客 本篇文章主要理解 继承中变量,构造方法,成员方法的访问特点。 1、继承中变量的访问特点 1.1 代码实现 不看…

亚马逊认证考试系列 - 知识点 - 安全组简介

AWS安全组是一种虚拟防火墙,用于控制实例进出网络流量。安全组是一个实例级别的防火墙,可以定义哪些流量可以进入或离开特定的EC2实例。 功能:安全组可以用于限制特定类型的流量,如HTTP或SSH,允许特定IP地址范围的流量…

若依添加页面

背景:我想增加的是一个收支管理的页面 views中直接添加income文件夹,里面放着index.vue 网页的菜单中添加这个页面的菜单

基于springboot的留守儿童爱心网站

技术:springbootmysqlvue 一、系统背景 现代社会,由于经济不断发展,旧物捐赠的数量也在不断的增加,人们对留守儿童爱心信息的需求也越来越高。 以往的留守儿童爱心的管理,一般都是纸质文件来管理留守儿童爱心信息&am…

分布式异步任务框架celery

Celery介绍 github地址:GitHub - celery/celery: Distributed Task Queue (development branch) 文档地址:Celery - Distributed Task Queue — Celery 5.3.6 documentation 1.1 Celery是什么 celery时一个灵活且可靠的处理大量消息的分布式系统&…

rust学习(简单handler实现)

用过android的同学对于handler应该都很了解,用起来比较方便。这里用rust设计了一个简单的rust。 1.处理接口 pub trait ProcessMessage {fn handleMessage(&self,msg:Message); } 2.Message结构体 pub struct Message {pub what:u32,pub arg1:i32,pub arg2:…

Java:设计模式

文章目录 参考简介工厂模式简单工厂模式工厂方法模式抽象工厂模式总结 单例模式预加载懒加载线程安全问题 策略模式 参考 知乎 简介 总体来说设计模式分为三类共23种。 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模…

Function与Module的差异与应用场景,symbolic() 和 forward() 是什么关系?

Function与Module的差异与应用场景 Function与Module都可以对pytorch进行自定义拓展,使其满足网络的需求,但这两者还是有十分重要的不同: Function一般只定义一个操作,因为其无法保存参数,因此适用于激活函数、pooli…

Unity构建详解(1)——SBP介绍

【前言】 Unity的资源工作流程分为导入、创建、构建、分发、加载。我们说的是其中的构建步骤。 构建是指将项目工程中的资源文件和代码整合程可执行文件的过程,构建的结果是生成可执行文件,在win平台上是exe,在Android平台上是apk&#xff…

基于浏览器localStorage作为数据库完成todolsit项目

一、文章内容 TodoList结构搭建HTML代码 TodoList样式编写Css代码 TodoList行为表现JavaScript代码 二、项目展示 项目介绍 Todolist是一个基于B/S模式开发的待办事项软件,主要功能是离线记录用户的待办事项和已经完成的事情,基于htmlcssjs实现&am…

Superset二次开发之PostgreSQL 存储库介绍

Apache Superset 使用 PostgreSQL 作为其默认的元数据数据库,来存储关于数据源、图表、仪表盘、用户及其权限等信息。下面是列出的一些主要表的功能和作用的简介: 权限和角色 ab_permission: 存储权限,如“可以访问仪表板”、“可以执行SQL查询”等。ab_permission_view: 将…

Mysql——索引下推

MySQL的索引下推(Index Condition Pushdown, ICP)是一种查询优化技术,它允许MySQL在存储引擎层执行部分WHERE子句中的过滤条件,而非全部在MySQL服务器层执行。这使得在扫描索引过程中就可以剔除不满足条件的记录,从而减…

【C++】---string的模拟

【C】---string的模拟 一、string类实现1.string类的构造函数2.swap()函数3.拷贝构造函数4.赋值运算符重载5.析构6.迭代器7.operator[ ]8.size9.c_str()10.reserve()11.resize()12.p…

flutter 局部view更新,dialog更新进度,dialog更新

局部更新有好几种方法,本次使用的是 StatefulBuilder 定义 customState去更新对话框内容 import package:flutter/cupertino.dart; import package:flutter/material.dart;class ProgressDialog {final BuildContext context;BuildContext? dialogContext;double _…

【DL经典回顾】激活函数大汇总(四十一)(SinReLU附代码和详细公式)

激活函数大汇总(四十一)(SinReLU附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色,它们决定着神经元的输出,并且影响着网络的学习能…

Oracle函数6—递归查询(start with...connect by、sys_connect_by_path、level)

文章目录 一、准备数据二、基本使用三、level函数四、获取完整的全树路径 一、准备数据 创建表 CREATE TABLE TEST_ORG (ID VARCHAR2(64) NOT NULL PRIMARY KEY,NAME VARCHAR2(200),PARTEN_ID VARCHAR2(64) ); comment on column TEST_ORG.ID is 主键; comment on column TES…

C语言经典例题(2) --- 阶乘、斐波那契数、9*9乘法表、字符串逆序、求和

文章目录 1.求n的阶乘。(不考虑溢出)2.求第n个斐波那契数。&#xff08;不考虑溢出&#xff09;3.屏幕上输出9*9乘法口诀表4.字符串逆序(递归实现)5.计算一个数的每位之和(递归实现) 1.求n的阶乘。(不考虑溢出) #include <stdio.h>int fac(int n);int main() {int n 0;…

8节点空间壳单元Matlab有限元编程 | 曲壳单元 | 模态分析 | 3D壳单元 | 板壳理论| 【源代码+理论文本】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…