持续交付工具Argo CD的部署使用

Background

  • CI/CD(Continuous Integration/Continuous Deployment)是一种软件开发流程,旨在通过自动化和持续集成的方式提高软件交付的效率和质量。它包括持续集成(CI)和持续部署(CD)两个主要阶段。
  • 这里介绍一种开源的持续交付工具Argo CD
  • Argo CD官方文档地址:https://argo-cd.readthedocs.io
  • Argo CD源码地址:https://github.com/argoproj/argo-cd

在这里插入图片描述

1、关于Argo

Argo是一个开源的项目,主要是扩展Kubernetes的原生功能,更好地把应用运行在Kubernetes平台。
Github地址:https://github.com/argoproj
目前Argo包含多个子项目:

  • Argo Workflows:基于容器的任务编排工具。
  • Argo CD:基于GitOps声明的持续交付工具。
  • Argo Events:事件驱动工具。
  • Argo Rollouts:支持金丝雀以及蓝绿发布的应用渐进式发布工具。

本文主要介绍持续交付工具Argo CD的部署使用。

2、Argo CD简介

  • Argo CD 是一种开源的持续交付工具,用于自动化和管理应用程序的部署、更新和回滚。它是一个声明式的工具,专为在 Kubernetes 集群中进行应用程序部署而设计。
  • Argo CD 的主要功能包括:
    持续交付:Argo CD 允许用户将应用程序的配置和清单文件定义为 Git 存储库中的声明式资源,从而实现持续交付。它能够自动检测 Git 存储库中的更改,并将这些更改应用于目标 Kubernetes 集群。
    健康监测和回滚:Argo CD 能够监测应用程序的健康状态,并在检测到问题时触发回滚操作。这有助于确保应用程序在部署期间和运行时保持稳定和可靠。
    多环境管理:Argo CD 支持多个环境(例如开发、测试、生产)的管理。它可以帮助用户在不同环境中进行应用程序的部署和配置管理,并确保这些环境之间的一致性。
    基于 GitOps 的操作:Argo CD 采用了 GitOps 的操作模式,即将应用程序的状态和配置定义为 Git 存储库中的声明式资源。这使得团队可以使用版本控制和代码审查等软件工程实践来管理应用程序的生命周期。
  • Kubernetes 清单可以通过以下几种方式指定:
    – kustomize 应用程序
    – helm chart
    – jsonnet 文件
    – YAML/json 清单的普通目录
    – 配置为配置管理插件的任何自定义配置管理工具

3、Argo CD的原理

Argocd通过一个 Kubernetes 控制器来实现的,它持续 watch 正在运行的应用程序并将当前的实时状态与所需的目标状态( Git 存储库中指定的)进行比较。已经部署的应用程序的实际状态与目标状态有差异,则被认为是 状态,Argo CD 会报告显示这些差异,同时提供工具来自动或手动将状态同步到期望的目标状态。在 Git 仓库中对期望目标状态所做的任何修改都可以自动应用反馈到指定的目标环境中去。
在这里插入图片描述

4、Argo CD在 CI/CD 流程中的位置

在这里插入图片描述
具体步骤:

  1. 将应用的 Git 仓库分为 Application Deployment file 和 Docker file 两个库。Docker file 用于存放应用的核心代码以及 Docker build file,后续将会直接打包成 Docker image;Application Deployment file 可以 Kustomize、Helm、Ksconnet、Jsonnet 等 多种 Kubernetes 包管理工具来定义;以 Helm 为例,Chart 中所使用到的 Image 由 Docker file Code 打包完成后提供;
  2. 使用 Jenkins 或 Gitlab 等 CI 工具进行自动化构建打包,并将 Docker image push 到 Harbor 镜像仓库;
  3. 使用 Argo CD 部署应用。Argo CD 可以独立于集群之外,并且支持管理多个 Kubernetes 集群。在 Argo CD 上配置好应用部署的相关信息后 Argo CD 便可以正常工作,Argo CD 会自动和代码仓库 Application deployment file 的内容进行校验,当代码仓库中应用属性等信息发生变化时,Argo CD 会自动同步更新 Kubernetes 集群中的应用;应用启动时,会从 Harbor 镜像仓库拉取 Docker image。

5、Argo CD的安装配置

  • 首先需要确定安装的版本
    访问Argo CD官方文档地址:https://argo-cd.readthedocs.io,查询与你k8s版本对应的Argo CD版本。我这里k8s是v1.24.9,所以选择2.8版本的Argo CD。
    在这里插入图片描述

  • 安装部署

  • 安装方式有很多种,这里直接选择官方提供资源清单文件。
  • 由于需要选择k8s对应的版本,并且github访问受限,建议选择好版本下载下来对应的install.yaml离线安装。
  • 这里安装的标准版本,当然也可以选择高可用的安装方式。
# 没有kubectl的先安装kubectl
kubectl create namespace argocd
kubectl apply -n argocd -f https://github.com/argoproj/argo-cd/tree/release-2.8/manifests/install.yaml
# 或者
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.8.8/manifests/install.yaml

在这里插入图片描述

  • 安装CLI工具

Argo CD CLI 是用于管理 Argo CD 的命令行工具。这里不做详细介绍,后面我们主要使用web ui来操作Argo CD。具体下载地址可以去github地址上去找。

在这里插入图片描述

  • 发布 Argo CD 服务
  • 默认情况下, Argo CD 服务不对外暴露服务,可以通过 LoadBalancer 或者 NodePort 类型的 Service、Ingress、Kubectl 端口转发等方式将 Argo CD 服务发布到 Kubernetes 集群外部。
  • 这里使用以下命令通过 NodePort 服务的方式暴露 Argo CD 到集群外部:
# 修改 Service 类型
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
# 获取随机生成的 NodePort 端口
kubectl get svc -n argocd

在这里插入图片描述

  • 访问Web UI
  • 把名字为 argocd-server 的 Service 改成 NodePort 类型后,就可以在集群外部通过 <节点 IP>:<随机生成的 NodePort 端口> 来访问 Argo CD了;
  • 浏览器输入 https://<节点 IP>:port 访问 Argo CD;
  • 默认情况下 admin 帐号的初始密码是自动生成的,会以明文的形式存储在 Argo CD 安装的命名空间中名为 argocd-initial-admin-secret 的 Secret 对象下的 password 字段下,可以用下面的命令获取:
kubectl get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" -n argocd | base64 -d

登录页面
在这里插入图片描述
在这里插入图片描述

6、Argo CD的使用-Web UI 部署应用

准备git仓库测试项目 argocd-test

这里其实只需要deployment.yaml和service.yaml,Dockerfile和index.html用于构建镜像推送到harbor私服。

在这里插入图片描述

  • 构建私服镜像(这步可选的,不是必须的,我这里是为了后面集成jenkins和harbor)
docker login --username=admin 192.168.19.234:5100
docker build -t nginx:v1 .
docker tag nginx:v1 192.168.19.234:5100/mid-base/nginx:v1
docker push 192.168.19.234:5100/mid-base/nginx:v1
docker rmi nginx:v1 192.168.19.234:5100/mid-base/nginx:v1
  • Dockerfile
FROM nginx:latestCOPY index.html /usr/share/nginx/html
  • index.html
hello world!
  • deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: 192.168.19.234:5100/mid-base/nginx:v1name: nginxports:- containerPort: 80
  • service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx
spec:ports:- port: 80targetPort: 80nodePort: 30001type: NodePortselector:app: nginx
Gitlab创建Access Token

在这里插入图片描述
在这里插入图片描述

配置GitLab 仓库认证信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建 Argo CD App
  • 首先创建一个命名空间 my-apps 用于 Argo CD 部署应用
kubectl create ns my-apps
  • 填写应用基本配置信息
    在这里插入图片描述

  • 仓库源配置
    在这里插入图片描述

  • 目标集群配置
    在这里插入图片描述

  • 点击左上方的CREATE按钮创建应用,创建完成后会自动同步如下图所示,此时处于 Syncing 的状态,如下图所示:
    -

  • 同步完成后如下图所示:
    在这里插入图片描述

解决Argo CD自动同步延迟的问题
  • ArgoCD 默认每 3 分钟会拉取仓库检查是否有新的提交,你也可以在 ArgoCD 控制台手动点击 Sync 按钮来触发同步。
  • 为了消除轮询延迟,API 服务端可以配置为接收 webhook 事件,从而实时获取 Git 存储库中的变化。当然也可以通过修改argocd-server的配置timeout.reconciliation: 180s,然后重启这个容器 argocd-repo-server(不是很推荐,因为设置的间隔小,会一直轮训,没必要)。
  • Argo CD 支持来自 GitHub、GitLab、Bitbucket、Bitbucket Server 和 Gogs 的 Git webhook 事件。
  • 这里我们以 GitLab 为例,配置 webhook 来实现这一功能,具体操作如下图所示:

Webhook 的地址填写 Argo CD 的 API 接口地址 https://192.168.19.42:31263/api/webhook,IP和端口需要修改成你自己的。

在这里插入图片描述
这样我们的问题就解决了,每次提交代码就会触发同步,不会再等那漫长的三分钟了!

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

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

相关文章

自定义gitlog格式

git log命令非常强大而好用&#xff0c;在复杂系统的版本管理中扮演着重要的角色&#xff0c;但默认的git log命令显示出的东西实在太丑&#xff0c;不好好打扮一下根本没法见人&#xff0c;打扮好了用alias命令拍个照片&#xff0c;就正式出道了&#xff01; 在使用git查看lo…

【御控物联】JavaScript JSON结构转换(16):对象To数组——综合应用

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

php反序列化题目

[NewStarCTF 公开赛赛道]UnserializeOne 分析代码&#xff0c;最终需要调用到 file_get_contents 即可获得flag 从后往前分析 触发 __invoke 需要 以调用函数的方式调用一个对象 可以找到Start类 里的__isset中可以将类当作函数调用 所以需要调用到 __isset 就需要 isset()…

提示工程中的10个设计模式

我们可以将提示词定义为向大型语言模型(Large Language Model&#xff0c;LLM)提供的一个查询或一组指令&#xff0c;这些指令随后使模型能够维持一定程度的自定义或增强&#xff0c;以改进其功能并影响其输出。我们可以通过提供细节、规则和指导来引出更有针对性的输出&#x…

组合数(费马小定理, 快速幂)

给定 n 组询问&#xff0c;每组询问给定两个整数 a&#xff0c;b&#xff0c;请你输出 Cbamod(1097)的值。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一组 a 和 b。 输出格式 共 n 行&#xff0c;每行输出一个询问的解。 数据范围 1≤n≤10000, 1≤…

iOS代码加固与保护方法详解 - 提升iOS应用安全性的关键步骤

憧憬blog主页 在强者的眼中&#xff0c;没有最好&#xff0c;只有更好。我们是移动开发领域的优质创作者&#xff0c;同时也是阿里云专家博主。 ✨ 关注我们的主页&#xff0c;探索iOS开发的无限可能&#xff01; &#x1f525;我们与您分享最新的技术洞察和实战经验&#xff0…

基于大模型的态势认知智能体

源自&#xff1a;指挥控制与仿真 作者&#xff1a;孙怡峰, 廖树范, 吴疆 李福林 “人工智能技术与咨询” 发布 摘要 针对战场态势信息众多、变化趋势认知困难的问题,提出基于大模型的态势认知智能体框架和智能态势认知推演方法。从认知概念出发,结合智能体的抽象性、具…

大厂高频面试题复习JAVA学习笔记-JUC多线程及高并发(上)

目录 0 JUC基础概念 wait/sleep的区别 并发与并行的区别 线程的六个状态 JUC结构 ​编辑 1 请谈谈你对volatile的理解 JMM&#xff08;java内存模型&#xff09; 可见性 不保证原子性 有序性​编辑 指令重排 哪些地方用到volatile&#xff1a; 双端检查机制DLC …

MySQL-6.表的高级查询(多表查询、子查询、表复制、合并查询、表外连接)

6.1 多表查询 基于两个或以上表的查询&#xff0c;默认从表1取出一行&#xff0c;与表2的每一行组合&#xff0c;返回的记录数为表1表2&#xff0c;默认返回的结果为笛卡尔集&#xff0c;需写出正确的WHERE条件进行筛选。 多表查询的条件不能少于表的个数-1&#xff0c;否则会…

LeetCode刷题之105. 从前序与中序遍历序列构造二叉树

文章目录 1.题目描述2. 分析2.1 前序遍历2.1.1 什么是前序遍历&#xff1f;2.1.2 前序遍历有什么特点&#xff1f; 2.2 中序遍历2.2.1 什么是中序遍历2.2.2 中序遍历有什么特点&#xff1f; 2.3 后序遍历2.3.1 什么是后序遍历&#xff1f;2.3.2 特点 2.4 总结 3. 解法 1.题目描…

漏洞挖掘 | 两个src案例分享

案例一 - 存储型XSS 文前废话:某天正在刷着**社区的帖子,突然间评论区的一条评论引起了我的注意,类似于下面这样 其中字体是蓝色的&#xff0c;这种评论在html标签中代码格式是<a>这是文字</a>这样的链接个格式。 同时评论区XSS漏洞的高发区,想着可能会有操作点 …

每日一题|字符迁移【算法赛】|字符数组+前缀和+差分

每日一题|字符迁移【算法赛】 字符迁移 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&#xff0c;希望有朝一日我们积累的滴水可以击穿顽石。 字符迁移 注意&#xff1a; 预习知识&#xf…

【InternLM 实战营第二期笔记】使用茴香豆搭建你的RAG智能助理

RAG RAG是什么 RAG&#xff08;Retrieval Augmented Generation&#xff09;技术&#xff0c;通过检索与用户输入相关的信息片段&#xff0c;并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺乏透明、可追…

C++STL(list类)

文章目录 1.list类的介绍2.list的基本用法2.1 基本用法2.2 迭代器失效2.3 reverse(逆置)2.3 sort(排序)2.4 unique(去重)2.5 splice(转移) 3.list的底层(模拟实现)3.1 list的3.2 修改链表问题3.3 完整代码 1.list类的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列…

vue快速入门(十)v-bind动态属性绑定

注释很详细&#xff0c;直接上代码 上一篇 新增内容 图片切换逻辑动态绑定的完整写法与简写方法 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

【SpringBoot整合系列】SpringBoot整合FastDFS(二)

目录 SpringBoot整合FastDFSJava客户端/依赖常用api接口解释1.uploadFile参数返回值 2.uploadSlaveFile参数返回值 3.getMetadata参数返回值 4.overwriteMetadata参数&#xff1a;返回值&#xff1a;无 5.mergeMetadata参数&#xff1a;返回值&#xff1a;无 6.queryFileInfo参…

Shoplazza闪耀Shoptalk 2024,新零售创新解决方案引领行业新篇章!

在近期举办的全球零售业瞩目盛事——Shoptalk 2024大会上,全球*的零售技术平台-店匠科技(Shoplazza)以其*的创新实力与前瞻的技术理念,成功吸引了与会者的广泛关注。此次盛会于3月17日至20日在拉斯维加斯曼德勒湾隆重举行,汇聚了逾万名行业精英。在这场零售业的盛大聚会上,Shop…

Unity开发一个FPS游戏之三

在前面的两篇博客中&#xff0c;我已实现了一个FPS游戏的大部分功能&#xff0c;包括了第一人称的主角运动控制&#xff0c;武器射击以及敌人的智能行为。这里我将继续完善这个游戏&#xff0c;包括以下几个方面&#xff1a; 增加一个真实的游戏场景&#xff0c;模拟一个废弃的…

谷粒商城实战(011 业务-检索服务)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第173p-第p194的内容 介绍 这些过滤条件都可以写在must里&#xff0c;但是filter不参与评分&#xff0c;速度会快一些&#xff0c;所以一些分类等…

AssetBundle打包

AssetBundle技术的概念 Unity的AssetBundle是一个资源压缩包&#xff0c;包含模型、贴图、预制体、声音甚至整个场景&#xff0c;可以在游戏运行时被加载。   AssetBundle自身保存着相互的依赖关系&#xff0c;压缩包可以使用LZMA和LZ4压缩算法&#xff0c;减少包大小&#x…