持续交付工具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:latest

COPY index.html /usr/share/nginx/html
  • index.html
hello world!
  • deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: 192.168.19.234:5100/mid-base/nginx:v1
        name: nginx
        ports:
        - containerPort: 80
  • service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30001
  type: NodePort
  selector:
    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和端口需要修改成你自己的。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自然语言处理技术(Natural Language Processing)知识点

自然语言处理知识点 自然语言处理1. word2vec是什么2. 常用的NLP工具和软件3. 朴素贝叶斯分类器4. BiLSTM-CRF模型怎么去实现5. Bert模型实现NER6. 命名实体识别任务中&#xff0c;怎么去处理数据分布不均的问题&#xff1f;7. 用户问题检索相关文本时&#xff0c;具体都用了哪…

Mac下用adb命令安装apk到android设备笔记

查询了些资料记录备用。以下是在Mac上使用命令行安装APK文件的步骤&#xff1a; 1. 下载并安装ADB&#xff1a; 如果您的Mac上没有安装ADB&#xff0c;请从官方的Android开发者网站下载Android SDK Platform Tools&#xff1a;Android SDK Platform Tools。将下载的ZIP文件解…

KylinOS银河麒麟安装部署AI服务

KylinOS银河麒麟安装部署AI服务&#xff08;CPU版本&#xff09; 查看操作系统 [jnapp8160fcc7cf1b ~]$ nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Lance)Kernel: 6.2.0-36-genericBuild: Kylin Linux…

数据挖掘及其近年来研究热点介绍

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

什么是mka音频格式?mp3与mka音频的区别 如何把mp3转成mka格式?

一&#xff0c;什么是mka音频格式 mka音频是一种音频文件格式&#xff0c;它是Matroska多媒体容器格式的一种变体&#xff0c;专门用于存储音频数据。mka文件通常包含压缩的音频流&#xff0c;如MP3、AAC或FLAC等&#xff0c;以及其他可能的元数据&#xff0c;如专辑封面、艺术…

24 个Intellij IDEA好用插件

24 个Intellij IDEA好用插件 一. 安装插件 Codota 代码智能提示插件 只要打出首字母就能联想出一整条语句&#xff0c;这也太智能了&#xff0c;还显示了每条语句使用频率。 原因是它学习了我的项目代码&#xff0c;总结出了我的代码偏好。 Key Promoter X 快捷键提示插件 …

基于ARM内核的智能手环(day7)

RTC&#xff08;实时时钟&#xff09; 什么是RTC&#xff1f; RTC是指实时时钟&#xff08;Real-Time Clock&#xff09;&#xff0c;是一种能够持续跟踪时间的计时器&#xff0c;即使在设备断电的情况下也能保持时间的准确性。它通常用于需要准确时间记录的应用&#xff0c;…

[每日算法 - 阿里机试] leetcode739. 每日温度

入口 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/daily-temperatures/descr…

深度学习理论基础(七)Transformer编码器和解码器

学习目录&#xff1a; 深度学习理论基础&#xff08;一&#xff09;Python及Torch基础篇 深度学习理论基础&#xff08;二&#xff09;深度神经网络DNN 深度学习理论基础&#xff08;三&#xff09;封装数据集及手写数字识别 深度学习理论基础&#xff08;四&#xff09;Parse…

UE5、CesiumForUnreal实现加载建筑轮廓GeoJson数据生成白模功能

1.实现目标 在UE5.3中,通过加载本地建筑边界轮廓面GeoJson数据,获取底面轮廓和楼高数据,拉伸生成白模,并支持点选高亮。为防止阻塞Game线程,使用了异步任务进行优化,GIF动图如下所示: 其中建筑数量:128871,顶点索引数量:6695748,三角面数量:2231916,顶点数量:165…

golang 归并回源策略

前言 下面是我根据业务需求画了一个架构图&#xff0c;没有特别之处&#xff0c;很普通&#xff0c;都是我们常见的中间件&#xff0c;都是一些幂等性GET 请求。有一个地方很有意思&#xff0c;从service 分别有10000 qps 请求到Redis&#xff0c;并且它们的key 是一样的。这样…

CSS - 你遇到过动画卡顿的问题吗

难度级别:中高级及以上 提问概率:70% 回答这道题,首先要说的就是,浏览器在每一帧动画里大概做了什么事情。首先浏览器会执行Javascript,或是操作DOM元素,紧接着需要对DOM元素进行样式计算,当计算完成后,就需要针对DOM元素的位置以及大小…

2024年MathorCup妈妈杯数学建模思路D题思路解析+参考成品

1 赛题思路 (赛题出来以后第一时间在群内分享&#xff0c;点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间&#xff1a;2024年4月11日&#xff08;周四&#xff09;12:00 比赛开始时间&#xff1a;2024年4月12日&#xff08;周五&#xff09;8:00 比赛结束时间&…

oracle hang分析使用

oracle hang分析测试 使用hang分析大部分原因在于产生锁资源的争用 1-2:只有hanganalyze输出&#xff0c;不dump任何进程 3&#xff1a;Level2Dump出在IN_HANG状态的进程 4&#xff1a;Level3Dump出在等待链里面的blockers(状态为LLEAF/LEAF_NW/IGN_DMP&#xff09; 5&…

软件设计师29--并发控制

软件设计师29--并发控制 考点1&#xff1a;事务的特性例题&#xff1a; 考点2&#xff1a;并发问题并发产生的问题丢失更新不可重复读问题读“脏”数据 考点3&#xff1a;封锁协议例题&#xff1a; 考点1&#xff1a;事务的特性 原子性&#xff08;Atomicity&#xff09;&…

好文阅读-数据库-CREATE TABLE AS

添加链接描述 收获如下&#xff1a; 1 DROP DELETE TRUNCATE对比 2 CREATE TABLE AS 这种方式创建表不会复制表的索引&#xff0c;主键&#xff0c;外键约束&#xff0c;包括自增ID。因此应该使用 CREATE TABLE LIKE。 3 数据的处理可以通过建立临时表的方式&#xff0c;之后还…

【实战解析】YOLOv9全流程训练至优化终极指南

【实战解析】YOLOv9全流程训练至优化终极指南 0.引言1.环境准备2.数据预处理&#xff08;1&#xff09;数据准备&#xff08;2&#xff09;按比例划分数据集&#xff08;3&#xff09;xml转txt脚本&#xff08;4&#xff09;配置文件 3.模型训练&#xff08;1&#xff09;单GPU…

超越基准 | 基于每个高斯变形的3D高斯溅射方法及其高效训练策略

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程&#xff1a;…

ctfshow web入门 命令执行 web53--web77

web53 日常查看文件 怎么回事不让我看十八 弄了半天发现并不是很对劲&#xff0c;原来我发现他会先回显我输入的命令再进行命令的回显 ?cnl${IFS}flag.php||web54 绕过了很多东西 基本上没有什么命令可以用了但是 grep和?通配符还可以用 ?cgrep${IFS}ctfshow${IFS}???…

JavaCollection集合--单列集合——JavaCollections类

目录 集合--->容器 代码 运行 Java集合API 单列集合 Collectio接口 List接口实现类 ArrayList 数组实现 概念 代码 运行 代码 ArrayList方法 代码 运行 LinkedList 链表实现 概念 代码 运行 Vector 数组实现 概念 代码 运行 List接口集合…