东湖之滨 发表于 5 天前

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 架构

https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190825641-641229018.png
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 argocdhttps://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190825072-1484840439.png
这样将创建一个新的命名空间 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.yamlhttps://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190824586-295244560.png
2.3、验证摆设是否乐成

# 检查Argo CD CRD
kubectl get crd | grep argoproj.io

# 查看 pod 状态
kubectl get pods -n argocdhttps://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190823971-1858214200.png
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-amd64https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190823488-2044848526.png
下载最新版本
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-amd644、发布 Argo CD 服务器

默认环境下,Argo CD API 服务器不公开外部 IP。
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190822841-1363341510.png
现在可以通过:30954 访问 Argo CD
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190822063-712528645.png
5、获取 Argo CD 密码

admin 账户的初始密码会主动天生,并以明文情势存储在 Argo CD 安装命名空间中名为 argocd-initial-admin-secret 的 secret 中的 password字段中。可以通过以下命令获取
kubectl -n argocd get secret \
argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -dhttps://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190820655-181731094.png
登录后的界面
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190820277-385563498.png
6、准备 Git 仓库

6.1、创建开源仓库

在 Gitee 上创建项目,名为 Myapp ,开源
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190819768-1381974571.png
6.2、创建资源清单

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

[*]目录结构
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190819238-1120161061.png

[*]myapp-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
namespace: devops
labels:
    app: myapp
spec:
replicas: 1
selector:
    matchLabels:
      app: myapp
template:
    metadata:
      labels:
      app: myapp
    spec:
      containers:
      - name: nginx
          image: nginx:latest# 使用官方 Nginx 镜像
          ports:
            - containerPort: 80# Nginx 默认监听 80 端口
          resources:
            limits:
            memory: "128Mi"
            cpu: "100m"
          livenessProbe:
            httpGet:
            path: /# 检查根路径
            port: 80
            initialDelaySeconds: 5
            periodSeconds: 10
          readinessProbe:
            httpGet:
            path: /
            port: 80
            initialDelaySeconds: 5
            periodSeconds: 10

[*]myapp-service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
namespace: devops
labels:
    app: myapp
spec:
type: NodePort
ports:
    - port: 80
      targetPort: 80
      nodePort: 30080
      protocol: TCP
selector:
    app: myapp
sessionAffinity: None7、利用 Argo CD 摆设应用

7.1、通过 UI 界面创建应用程序

7.1.1、点击 + NEW APP

https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190818752-1746495299.png
7.1.2、配置 GENERAL


[*]Application Name:自定义的应用名
[*]Project Name:可以选择默认创建好的 default 项目
[*]SYNC POLICY:同步方式,可以选择主动/手动
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190818236-1652329818.png
7.1.3、配置 SOURCE


[*]Repository URL: 项目标 Git 地址
[*]Revision: 分支名
[*]Path: yaml 资源文件所在的相对路径
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190817686-139963126.png
7.1.4、配置 DESTINATION


[*]Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同一个,因此可以直接利用 http://kubernetes.default.svc 来访问。
[*]Namespace: 摆设应用的命名空间
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190816860-401895778.png
7.1.5、单击 CREATE

单击 CREATE 后界面如下,状态处于 OutOfSync:
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190816227-1709885216.png
7.1.6、手动同步

由于设置的是手动同步,因此必要点一下 SYNC 进行同步,在弹出的界面中单击 SYNCHRONIZE 确认同步:
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190815548-475537791.png
7.1.7、同步完成

https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190814836-1760749109.png
7.1.8、应用创建详情

https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190814247-2138363381.png
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 devopshttps://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190813638-1767337524.png
7.2.2、利用argocd命令查看创建的应用

argocd app list
argocd app get myapp2https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190813132-1318960907.png
应用程序状态最初处于 OutOfSync 状态,因为应用程序尚未摆设,也未创建任何 Kubernetes 资源。
7.2.3、通过 Argo CD CLI 同步状态

argocd app sync myapp2https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190812558-451774313.png
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190811568-557127576.png
7.3、利用 yaml 文件创建应用程序

7.3.1、创建资源清单

必要指定摆设应用程序的命名空间、API Server 地址、项目名、资源文件路径、Git 仓库地址、分支名等信息
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp3
namespace: 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.yamlhttps://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190810858-1153832278.png
这里同步的操作还是和之前一样的,要么是UI点击,要么是CLI命令行配置https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190810194-293866556.png
8、版本升级

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

DETAILS --> SYNC POLICY --> ENABLE AUTO-SYNC
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190809682-787199039.png
8.2、修改 git 仓库中资源清单

修改 nginx 镜像版本
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190809225-2035854833.png
等候一会 Argo CD 会主动更新应用,也可以直接点击REFRESH,Argo CD 会去立即获取最新的资源文件。可以看到此时 myapp3 Deployment 会新创建 v3 版本的 Replicaset,v3 版本的 Replicaset 会创建并管理 v3 版本的 Pod(我这里之所以不是v2版本是因为之前有一次摆设失败了)。
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190808571-1589431949.png
9、版本回滚

9.1、查看历史版本

升级到v3后会发现剩余的两个版本的 rs 并没有被删除,这是为了方便我们进行回滚
单击 HISTORY AND ROLLBACK 查看历史记录
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190807907-1173764887.png
9.2、回滚 v1 版本

选择 v1 版本右上角,单击 Rollback
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190807075-1152958158.png
在回滚的时间必要禁用 AUTO-SYNC 主动同步,点击 OK 确认即可:
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190806522-101679890.png
等候一会可以看到此时已经回滚乐成,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓库中最新的版本,因此此时同步状态是 OutOfSync:
https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190806025-37111665.png
kubectl get pod myapp-deployment-7797ffb9d5-m2zx7 -n devops -o jsonpath='{.spec.containers[*].image}'https://img2023.cnblogs.com/blog/3332572/202504/3332572-20250421190805259-1242194289.png
至此最基础的Argo CD 已经过了一遍,后面有更深入理解了再更新

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Argo CD