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

news/2024/7/5 4:04:06

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和端口需要修改成你自己的。

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


http://lihuaxi.xjx100.cn/news/2161758.html

相关文章

中科软面试题

1、用户注册登录这一块用了哪些技术&#xff1f;数据库主要涉及那些表&#xff1f; 用了BCrypt加密算法&#xff0c;jwt生成token&#xff0c;网关实现全局过滤器校验token&#xff0c;还用了拦截器&#xff0c;获取在网关是指到请求头的userid存到threadlocal里面&#xff0c…

SOCKS代理是如何提高网络性能和兼容性的?

SOCKS代理作为一种网络协议中间件&#xff0c;不仅在提升网络隐私和安全性方面发挥着重要作用&#xff0c;也在提高网络性能和兼容性方面有着不容忽视的影响&#x1f680;。本文将深入探讨SOCKS代理如何通过减少网络延迟&#x1f680;、优化数据传输&#x1f504;、提高跨平台兼…

SpringBoot日志打印控制

按包控制日志输出&#xff1a; 我们有时候想在项目中控制某个包下面日志的输出等级&#xff0c;可以在yaml文件中这么写&#xff1a; #日志级别TRACE < DEBUG < INFO < WARN < ERROR < FATAL。 logging:level:com.atomikos: WARN

Quanto: PyTorch 量化工具包

量化技术通过用低精度数据类型 (如 8 位整型 (int8)) 来表示深度学习模型的权重和激活&#xff0c;以减少传统深度学习模型使用 32 位浮点 (float32) 表示权重和激活所带来的计算和内存开销。 减少位宽意味着模型的内存占用更低&#xff0c;这对在消费设备上部署大语言模型至关…

问题解决四步法

一、界定问题 1.问题陈述表 1.问题的定义&#xff1a;smart原则 2.背景信息&#xff1a;对解决问题的影响 3.决策人&#xff1a; 4.利益相关者&#xff1a; 5.成功标准&#xff1a; 6.约束条件&#xff1a; 7.问题边界&#xff1a;包含范围不包含问题&#xff0c;地域范…

你还不懂MYSQL正则表达式?

正则表达式匹配的字符类 .:匹配任意单个字符^:匹配字符串的开始$:匹配字符串的结束*:匹配0个或多个前面的元素&#xff0c;尽可能多的:匹配1个或多个前面的元素&#xff0c;尽可能多的?:匹配0个或1个前面的元素&#xff0c;尽可能多的*?:匹配0个或多个前面的元素&#xff0c…

记一次IP访问MySQL失败多次被自动锁定导致无法连接问题,解决方法一条SQL足以。

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 前言 今天下午还在带着耳机摸鱼&#xff…

如何将PHP的Webman框架打包成二进制文件运行

看了看webman的官方文档&#xff0c;发现居然还能打包为二进制&#xff0c;这样太厉害了吧&#xff01; 先执行这个 composer require webman/console ^1.2.24 安装这个console的包&#xff0c;然后 执行 php webman build:bin 8.1 结果谁想到它报错提示&#xff1a; 好…