持续交付工具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.hqwc.cn/news/597851.html

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

相关文章

YOLOv8改进 | 细节涨点篇 | 利用YOLOv8自带的RayTune进行超参数调优

一、本文介绍 本文给大家带来的改进机制是利用Ray Tune进行超参数调优,在YOLOv8的项目中目前已经自带了该超参数调优的代码,我们无需进行任何的改动,只需要调用该方法输入我们的一些指令即可,当然了,这些超参数的设置还是比较又学问的,本文的内容也是应群友的需求进行发…

(学习日记)2024.04.05:UCOSIII第三十三节:互斥量

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

吴恩达2022机器学习专项课程(一) 第二周课程实验:多元线性回归(Lab_02)

1.训练集 使用Numpy数组存储数据集。 2.打印数组 打印两个数组的形状和数据。 3.初始化w&#xff0c;b 为了演示&#xff0c;w&#xff0c;b预设出接近最优解的值。w是一个一维数组&#xff0c;w个数对应特征个数。 4.非向量化计算多元线性回归函数 使用for循环&…

通过自动化部署消除人为操作:不断提高提交部署比率

三十年后&#xff0c;我仍然热爱成为一名软件工程师。事实上&#xff0c;我最近读了威尔拉森&#xff08;Will Larson&#xff09;的《员工工程师&#xff1a;超越管理轨道的领导力》&#xff0c;这进一步点燃了我以编程方式解决复杂问题的热情。知道雇主继续照顾员工、原则和杰…

网络基础知识入门

目录 一、局域网与广域网 1、局域网 2、广域网 二、协议 1、概念 2、协议的理解 3、协议的分层 1、分层 2、OSI七层模型 三、网络传输基本流程 1、报头 2、局域网通信原理 3、跨网络传输流程 四、IP地址和MAC地址 1、IP地址 2、MAC地址 3、两者的区别 一、局域…

浮点数在内存中的存储【详解】

浮点数在内存中的存储 浮点数存储规则小数点后数值的二进制转换float和double存储图示优化存储方案E不全为0或不全为1E全为0E全为1 浮点数存储规则 大家都知道整型数据是以补码的方式存放在内存中。以下几个概念是需要知道的&#xff1a; 原码&#xff0c;补码&#xff0c;反…

数据结构——二叉树链式结构的实现

大家好我是小锋&#xff0c;今天我们来学习的是二叉树链式结构的实现 首先我们来学习一下二叉树的基本操作 在看二叉树基本操作前我们来回顾下二叉树的概念&#xff0c; 二叉树是&#xff1a; 1. 空树 2. 非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右…

Android Studio学习4——gradle文件

视频讲解 https://developer.android.google.cn/studio/releases/gradle-plugin.htmIl#updating-gradle

最具有影响力的三个视觉平台 | 3D高斯、场景重建、三维点云、工业3D视觉、SLAM、三维重建、自动驾驶

大家好&#xff0c;我是小柠檬 这里给大家推荐三个国内具有影响力的3D视觉方向平台&#xff01; 原文&#xff1a;最具有影响力的三个视觉平台 | 3D高斯、场景重建、三维点云、工业3D视觉、SLAM、三维重建、自动驾驶

桌面便签电脑版哪个好?好用便签是哪款

在快节奏的现代生活中&#xff0c;桌面便签软件成为了我们不可或缺的助手。它们轻便、灵活&#xff0c;能够随时记录重要事项&#xff0c;提醒我们按时完成各项任务。面对市面上众多的便签软件&#xff0c;选择一款既实用又好用的便签显得尤为重要。经过深入体验&#xff0c;我…

Redis数据库——主从、哨兵、群集

目录 前言 一、主从复制 1.基本原理 2.作用 3.流程 4.搭建主动复制 4.1环境准备 4.2修改主服务器配置 4.3从服务器配置&#xff08;Slave1和Slave2&#xff09; 4.4查看主从复制信息 4.5验证主从复制 二、哨兵模式——Sentinel 1.定义 2.原理 3.作用 4.组成 5.…

最好的桌面监控系统

最好的桌面监控系统 桌面监控为什么重要&#xff0c;因为内鬼泄密对企业的危害要远远大于黑客和病毒的攻击&#xff0c;因为内鬼可以直接接触到重要文件&#xff0c;也知道重要文件放置在哪里&#xff0c;所以需要对员工的桌面进行监控。 域智盾是市面上最好的监控软件。 域智…