Argo CD

打印 上一主题 下一主题

主题 1718|帖子 1718|积分 5158

目录

Argo CD 官方文档
一、什么是 Argo CD

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

应用程序的定义、配置和环境应该是声明式的,并受版本控制。 应用程序的摆设和生命周期管理应该是主动化的、可审计的,并易于理解。
三、Argo CD 架构


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 命名空间
  1. kubectl create namespace argocd
复制代码

这样将创建一个新的命名空间 argocd,用于存放 Argo CD 服务和应用程序资源
安装配置清单中包含的 ClusterRoleBinding 资源引用了 argocd 名称空间。 如果您要将 Argo CD 安装到不同的名称空间,请确保更新名称空间引用。
2.2、摆设 Argo CD
  1. wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
  2. kubectl apply -n argocd -f install.yaml
复制代码

2.3、验证摆设是否乐成
  1. # 检查Argo CD CRD
  2. kubectl get crd | grep argoproj.io
  3. # 查看 pod 状态
  4. kubectl get pods -n argocd
复制代码

3、下载 Argo CD CLI

这边仅展示下载最新稳定版本
  1. VERSION=$(curl -L -s https://raw.githubusercontent.com/argoproj/argo-cd/stable/VERSION)
  2. curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/v$VERSION/argocd-linux-amd64
  3. sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
  4. rm argocd-linux-amd64
复制代码

下载最新版本
  1. curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
  2. sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
  3. rm argocd-linux-amd64
复制代码
下载具体版本
  1. VERSION=<TAG> # Select desired TAG from https://github.com/argoproj/argo-cd/releases
  2. curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
  3. sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
  4. rm argocd-linux-amd64
复制代码
4、发布 Argo CD 服务器

默认环境下,Argo CD API 服务器不公开外部 IP。
  1. kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
复制代码

现在可以通过:30954 访问 Argo CD

5、获取 Argo CD 密码

admin 账户的初始密码会主动天生,并以明文情势存储在 Argo CD 安装命名空间中名为 argocd-initial-admin-secret 的 secret 中的 password字段中。可以通过以下命令获取
  1. kubectl -n argocd get secret \
  2. argocd-initial-admin-secret \
  3. -o jsonpath="{.data.password}" | base64 -d
复制代码

登录后的界面

6、准备 Git 仓库

6.1、创建开源仓库

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

6.2、创建资源清单

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

  • 目录结构


  • myapp-deployment.yaml
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: myapp-deployment
  5.   namespace: devops
  6.   labels:
  7.     app: myapp
  8. spec:
  9.   replicas: 1
  10.   selector:
  11.     matchLabels:
  12.       app: myapp
  13.   template:
  14.     metadata:
  15.       labels:
  16.         app: myapp
  17.     spec:
  18.       containers:
  19.         - name: nginx
  20.           image: nginx:latest  # 使用官方 Nginx 镜像
  21.           ports:
  22.             - containerPort: 80  # Nginx 默认监听 80 端口
  23.           resources:
  24.             limits:
  25.               memory: "128Mi"
  26.               cpu: "100m"
  27.           livenessProbe:
  28.             httpGet:
  29.               path: /  # 检查根路径
  30.               port: 80
  31.             initialDelaySeconds: 5
  32.             periodSeconds: 10
  33.           readinessProbe:
  34.             httpGet:
  35.               path: /
  36.               port: 80
  37.             initialDelaySeconds: 5
  38.             periodSeconds: 10
复制代码

  • myapp-service.yaml
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   name: myapp-service
  5.   namespace: devops
  6.   labels:
  7.     app: myapp
  8. spec:
  9.   type: NodePort
  10.   ports:
  11.     - port: 80
  12.       targetPort: 80
  13.       nodePort: 30080
  14.       protocol: TCP
  15.   selector:
  16.     app: myapp
  17.   sessionAffinity: None
复制代码
7、利用 Argo CD 摆设应用

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

7.1.1、点击 + NEW APP


7.1.2、配置 GENERAL


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

7.1.3、配置 SOURCE


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

7.1.4、配置 DESTINATION


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

7.1.5、单击 CREATE

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

7.1.6、手动同步

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

7.1.7、同步完成


7.1.8、应用创建详情


7.2、通过 CLI 创建应用程序

7.2.1、登录 Argo CD 服务器
  1. # 例如我的环境<ArgoCD_Server_Address>就是192.168.112.10:30954
  2. argocd login <ArgoCD_Server_Address>
复制代码
  1. argocd app create myapp2 \
  2. --repo https://gitee.com/kurosaki01/myapp.git \
  3. --path yaml --dest-server \
  4. https://kubernetes.default.svc \
  5. --dest-namespace devops
复制代码

7.2.2、利用argocd命令查看创建的应用
  1. argocd app list
  2. argocd app get myapp2
复制代码

应用程序状态最初处于 OutOfSync 状态,因为应用程序尚未摆设,也未创建任何 Kubernetes 资源。
7.2.3、通过 Argo CD CLI 同步状态
  1. argocd app sync myapp2
复制代码


7.3、利用 yaml 文件创建应用程序

7.3.1、创建资源清单

必要指定摆设应用程序的命名空间、API Server 地址、项目名、资源文件路径、Git 仓库地址、分支名等信息
  1. apiVersion: argoproj.io/v1alpha1
  2. kind: Application
  3. metadata:
  4.   name: myapp3
  5.   namespace: argocd
  6. spec:
  7.   destination:
  8.     namespace: devops # 部署应用的命名空间
  9.     server: https://kubernetes.default.svc # API Server 地址
  10.   project: default # 项目名
  11.   source:
  12.     path: yaml # 资源文件路径
  13.     repoURL: https://gitee.com/kurosaki01/myapp.git # Git 仓库地址
  14.     targetRevision: master # 分支名
复制代码
  1. kubectl apply -f Argocd-Myapp3.yaml
复制代码
  1. 这里同步的操作还是和之前一样的,要么是UI点击,要么是CLI命令行配置
复制代码

8、版本升级

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

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

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

修改 nginx 镜像版本

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

9、版本回滚

9.1、查看历史版本

升级到v3后会发现剩余的两个版本的 rs 并没有被删除,这是为了方便我们进行回滚
单击 HISTORY AND ROLLBACK 查看历史记录

9.2、回滚 v1 版本

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

在回滚的时间必要禁用 AUTO-SYNC 主动同步,点击 OK 确认即可:

等候一会可以看到此时已经回滚乐成,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓库中最新的版本,因此此时同步状态是 OutOfSync:
  1. kubectl get pod myapp-deployment-7797ffb9d5-m2zx7 -n devops -o jsonpath='{.spec.containers[*].image}'
复制代码

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表