当前位置: 首页 > news >正文

Argo CD

文章目录

    • 一、什么是 Argo CD
    • 二、为什么选择 Argo CD
    • 三、Argo CD 架构
      • 1、API服务器
      • 2、存储库服务器
      • 3、应用程序控制器
    • 四、Argo CD 的使用
      • 1、要求
      • 2、安装 Argo CD
        • 2.1、创建 argocd 命名空间
        • 2.2、部署 Argo CD
        • 2.3、验证部署是否成功
      • 3、下载 Argo CD CLI
      • 4、发布 Argo CD 服务器
      • 5、获取 Argo CD 密码
      • 6、准备 Git 仓库
        • 6.1、创建开源仓库
        • 6.2、创建资源清单
      • 7、使用 Argo CD 部署应用
        • 7.1、通过 UI 界面创建应用程序
          • 7.1.1、点击 + NEW APP
          • 7.1.2、配置 GENERAL
          • 7.1.3、配置 SOURCE
          • 7.1.4、配置 DESTINATION
          • 7.1.5、单击 CREATE
          • 7.1.6、手动同步
          • 7.1.7、同步完成
          • 7.1.8、应用创建详情
        • 7.2、通过 CLI 创建应用程序
          • 7.2.1、登录 Argo CD 服务器
          • 7.2.2、使用argocd命令查看创建的应用
          • 7.2.3、通过 Argo CD CLI 同步状态
        • 7.3、使用 yaml 文件创建应用程序
          • 7.3.1、创建资源清单
      • 8、版本升级
        • 8.1、手动同步更改为自动同步
        • 8.2、修改 git 仓库中资源清单
      • 9、版本回滚
        • 9.1、查看历史版本
        • 9.2、回滚 v1 版本

Argo CD 官方文档

一、什么是 Argo CD

Argo CD 是一款基于 GitOps 模式 的 Kubernetes 声明式持续交付工具,专为自动化应用程序的部署、更新和回滚而设计。其核心目标是通过将 Git 仓库作为唯一可信源,确保 Kubernetes 集群的实时状态与版本控制的配置始终保持一致。

二、为什么选择 Argo CD

应用程序的定义、配置和环境应该是声明式的,并受版本控制。 应用程序的部署和生命周期管理应该是自动化的、可审计的,并易于理解。

三、Argo CD 架构

argocd_architecture

1、API服务器

API 服务器是一个 gRPC/REST 服务器,用于公开 Web UI、CLI 和 CI/CD 系统使用的 API。 它的职责如下:

  • 应用程序管理和状态报告
  • 调用应用程序操作(如同步、回滚、用户自定义操作)
  • 存储库和集群凭证管理(存储为 k8s secret)
  • 外部身份 Provider 的认证和认证授权
  • RBAC 执行
  • Git webhook 事件的监听器/转发器

2、存储库服务器

配置清单服务器是一个内部服务,负责维护一个本地缓存,缓存中包含应用程序配置清单的 Git 仓库。 它负责在提供以下输入时生成并返回 Kubernetes 配置清单:

  • 版本库 URL
  • 修订(提交、标记、分支)
  • 应用程序路径
  • 模板特定设置:参数、helm values.yaml

3、应用程序控制器

应用程序控制器是一个 Kubernetes 控制器,它能持续监控运行中的应用程序,并将当前的实时状态与所需的目标状态(在软件仓库中指定)进行比较。 它能检测到 "OutOfSync "应用程序状态,并有选择地采取纠正措施。 它负责调用任何用户定义的生命周期事件钩子(PreSync、Sync、PostSync)。

四、Argo CD 的使用

1、要求

  • 安装了 kubectl 命令行工具。
  • 拥有 kubeconfig 文件(默认位置为 ~/.kube/config)。
  • CoreDNS.可通过 microk8s enable dns && microk8s stop && microk8s start 为 microk8s 启用。

2、安装 Argo CD

2.1、创建 argocd 命名空间
kubectl create namespace argocd

image-20250420181759321

这样将创建一个新的命名空间 argocd,用于存放 Argo CD 服务和应用程序资源

安装配置清单中包含的 ClusterRoleBinding 资源引用了 argocd 名称空间。 如果您要将 Argo CD 安装到不同的名称空间,请确保更新名称空间引用。

2.2、部署 Argo CD
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f install.yaml

image-20250420183855662

2.3、验证部署是否成功
# 检查Argo CD CRD
kubectl get crd | grep argoproj.io# 查看 pod 状态
kubectl get pods -n argocd

image-20250420190540443

3、下载 Argo CD CLI

这边仅展示下载最新稳定版本

VERSION=$(curl -L -s https://raw.githubusercontent.com/argoproj/argo-cd/stable/VERSION)
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/v$VERSION/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

image-20250420213108621

下载最新版本

curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

下载具体版本

VERSION=<TAG> # Select desired TAG from https://github.com/argoproj/argo-cd/releases
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

4、发布 Argo CD 服务器

默认情况下,Argo CD API 服务器不公开外部 IP。

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

image-20250420220311426

现在可以通过<节点 IP>:30954 访问 Argo CD

image-20250420220640267

5、获取 Argo CD 密码

admin 账户的初始密码会自动生成,并以明文形式存储在 Argo CD 安装命名空间中名为 argocd-initial-admin-secretsecret 中的 password字段中。可以通过以下命令获取

kubectl -n argocd get secret \
argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d

image-20250420221224493

登录后的界面

image-20250420222003700

6、准备 Git 仓库

6.1、创建开源仓库

Gitee 上创建项目,名为 Myapp ,开源

image-20250420225250731

6.2、创建资源清单

仓库中创建 yaml 目录,两个子文件分别为 myapp-deployment.yamlmyapp-service.yaml

  • 目录结构

image-20250420230258134

  • myapp-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deploymentnamespace: devopslabels:app: myapp
spec:replicas: 1selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: nginximage: nginx:latest  # 使用官方 Nginx 镜像ports:- containerPort: 80  # Nginx 默认监听 80 端口resources:limits:memory: "128Mi"cpu: "100m"livenessProbe:httpGet:path: /  # 检查根路径port: 80initialDelaySeconds: 5periodSeconds: 10readinessProbe:httpGet:path: /port: 80initialDelaySeconds: 5periodSeconds: 10
  • myapp-service.yaml
apiVersion: v1
kind: Service
metadata:name: myapp-servicenamespace: devopslabels:app: myapp
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30080protocol: TCPselector:app: myappsessionAffinity: None

7、使用 Argo CD 部署应用

7.1、通过 UI 界面创建应用程序
7.1.1、点击 + NEW APP

image-20250420231354637

7.1.2、配置 GENERAL
  • Application Name:自定义的应用名
  • Project Name:可以选择默认创建好的 default 项目
  • SYNC POLICY:同步方式,可以选择自动/手动

image-20250420232053602

7.1.3、配置 SOURCE
  • Repository URL: 项目的 Git 地址
  • Revision: 分支名
  • Path: yaml 资源文件所在的相对路径

image-20250420232431144

7.1.4、配置 DESTINATION
  • Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同一个,因此可以直接使用 http://kubernetes.default.svc 来访问。
  • Namespace: 部署应用的命名空间

image-20250420232710246

7.1.5、单击 CREATE

单击 CREATE 后界面如下,状态处于 OutOfSync

image-20250420232905109

7.1.6、手动同步

由于设置的是手动同步,因此需要点一下 SYNC 进行同步,在弹出的界面中单击 SYNCHRONIZE 确认同步:

image-20250420233334299

7.1.7、同步完成

image-20250420233820312

7.1.8、应用创建详情

image-20250420234149089

7.2、通过 CLI 创建应用程序
7.2.1、登录 Argo CD 服务器
# 例如我的环境<ArgoCD_Server_Address>就是192.168.112.10:30954
argocd login <ArgoCD_Server_Address>
argocd app create myapp2 \
--repo https://gitee.com/kurosaki01/myapp.git \
--path yaml --dest-server \
https://kubernetes.default.svc \
--dest-namespace devops

image-20250421153235559

7.2.2、使用argocd命令查看创建的应用
argocd app list
argocd app get myapp2

image-20250421153723847

应用程序状态最初处于 OutOfSync 状态,因为应用程序尚未部署,也未创建任何 Kubernetes 资源。

7.2.3、通过 Argo CD CLI 同步状态
argocd app sync myapp2

image-20250421154058170

image-20250421154144719

7.3、使用 yaml 文件创建应用程序
7.3.1、创建资源清单

需要指定部署应用程序的命名空间、API Server 地址、项目名、资源文件路径、Git 仓库地址、分支名等信息

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: myapp3namespace: argocd
spec:destination:namespace: devops # 部署应用的命名空间server: https://kubernetes.default.svc # API Server 地址project: default # 项目名source:path: yaml # 资源文件路径repoURL: https://gitee.com/kurosaki01/myapp.git # Git 仓库地址targetRevision: master # 分支名
kubectl apply -f Argocd-Myapp3.yaml

image-20250421160636924

这里同步的操作还是和之前一样的,要么是UI点击,要么是CLI命令行配置

image-20250421160741747

8、版本升级

8.1、手动同步更改为自动同步

DETAILS --> SYNC POLICY --> ENABLE AUTO-SYNC

image-20250421161950692

8.2、修改 git 仓库中资源清单

修改 nginx 镜像版本

image-20250421182220291

等待一会 Argo CD 会自动更新应用,也可以直接点击REFRESH,Argo CD 会去立即获取最新的资源文件。可以看到此时 myapp3 Deployment 会新创建 v3 版本的 Replicaset,v3 版本的 Replicaset 会创建并管理 v3 版本的 Pod(我这里之所以不是v2版本是因为之前有一次部署失败了)。

image-20250421182459330

9、版本回滚

9.1、查看历史版本

升级到v3后会发现剩余的两个版本的 rs 并没有被删除,这是为了方便我们进行回滚

单击 HISTORY AND ROLLBACK 查看历史记录

image-20250421185225116

9.2、回滚 v1 版本

选择 v1 版本右上角,单击 Rollback

image-20250421185503277

在回滚的时候需要禁用 AUTO-SYNC 自动同步,点击 OK 确认即可:

image-20250421185732270

等待一会可以看到此时已经回滚成功,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓库中最新的版本,因此此时同步状态是 OutOfSync:

image-20250421190050894

kubectl get pod myapp-deployment-7797ffb9d5-m2zx7 -n devops -o jsonpath='{.spec.containers[*].image}'

image-20250421190611897

至此最基础的Argo CD 已经过了一遍,后面有更深入理解了再更新

相关文章:

  • 递归神经网络
  • 栈和队列--数据结构初阶(2)(C/C++)
  • 大数据系列 | 详解基于Zookeeper或ClickHouse Keeper的ClickHouse集群部署--完结
  • 查看MAC 地址以及简单了解
  • jvm-描述符与特征签名的区别
  • JavaScript-原型、原型链详解
  • Office文件内容提取 | 获取Word文件内容 |Javascript提取PDF文字内容 |PPT文档文字内容提取
  • 聊透多线程编程-线程互斥与同步-13. C# Mutex类实现线程互斥
  • 图片压缩工具,多种压缩方案可选
  • requestAnimationFrame是什么?【前端】
  • 基于瑞芯微RK3576国产ARM八核2.2GHz A72 工业评估板——ROS2系统使用说明
  • MH2103系列coremark1.0跑分数据和优化,及基于arm2d的优化应用
  • 鸿蒙NEXT开发LRUCache缓存工具类(单例模式)(ArkTs)
  • Gmssl实战
  • OpenSSL1.1.1d windows安装包资源使用
  • 【C++编程入门】:从零开始掌握基础语法
  • Python常用的第三方模块【openpyxl库】读写Excel文件
  • Vue路由传参的几种方式-案例
  • 系统分析师知识点:访问控制模型OBAC、RBAC、TBAC与ABAC的对比与应用
  • ONLYOFFICE协作空间3.1发布:虚拟数据房间中基于角色的表单填写、房间模板、改进访客管理等
  • 上海又一住宅新盘“日光”!今年已有9个新房项目触发积分
  • 万斯偕印裔妻子访问印度,4天行程能否推进美印贸易谈判?
  • 甘肃古浪县发生3.0级地震,未接到人员伤亡和财产损失报告
  • 科普|一名肿瘤医生眼中的肺癌诊疗变化:从谈癌色变到与癌共存
  • 我国成功发射试验二十七号卫星01星~06星
  • 恒安集团创始人许连捷逝世:白手起家缔造百亿纸品巨头,个人曾捐赠超10亿