Argo CD基础原理
一、Argo CD简介
- 主要是为k8s而生,遵循声明式GitOps理念的持续部署CD工具,自带一个简单的dashboard页面,支持多种配置管理/模版工具(eg:kustomize、helm、kscnnet、jsconnet、plain-yaml)
- argo被称k8s控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(例如git仓库中的配置)进行比较,在git仓库更改时自动同步和部署应用程序
二、架构图

1.API Server:
argocd的api入口,提供了外部接口以便用户或外部工具与argocd进行交互。api server同时也是webui的后台服务
2.Repository Server:
负责与git仓库交互。它从仓库中拉取应用定义,并将这些定义转化为k8s清单文件。会缓存从git仓库中获取的文件
3.Controller:
核心控制器,持续监控k8s集群的当前状态与期望状态(定义在给i他仓库中)之间的差异。controller负责将集群的状态与git中的期望状态保持一致
4.Application Controller:
负责处理用户定义的ArgoCD Application资源。它会检查git仓库中的定义,并确保这些定义与k8s集群中的应用状态保持同步
5.Redis Server:
用于缓存数据和提升系统性能,尤其在处理大量应用和频繁同步操作时很重要
6.Web UI:
提供一个友好的图形化界面,用户可以通过webui查看应用状态,同步状态以及进行手动操作
三、ArgoCD的工作原理
Argo CD的核心理念是GitOps,即以git仓库作为单一的真理源,通过自动化的方式将仓库中的应用配置同步到k8s
1、定义应用:用户在git仓库中定义应用的k8s资源清单,并将这些清单文件提交到git仓库
2、创建Argocd application:在argocd创建一个application资源,资源描述了应用在git仓库中的位置,以及在kubernetes集群中部署的位置
3、同步状态监控:Argocd controller持续监控git仓库中的配置,并于当前集群状态进行对比。每次检测到git仓库中的应用配置发生变化时,controller会自动更新集群中的资源,保持与git仓库的一致性
4、自动同步与手动同步:一种是检测到git仓库有变化,argocd会自动更新k8s集群的资源
5、回滚功能:如果应用更新导致问题,一键回滚
四、ArgoCD自动拉取更新的机制
argocd通过持续监控git仓库的变更来实现自动拉取和更新机制
工作机制
- 定时轮询:Argocd controller会定期轮询指定的git仓库,以检查是否有新的提交。默认周期3min
- webhook触发:支持通过Git仓库的webhook来触发同步操作。当仓库中发生提交或合并请求时,gitlab、github等平台可以通过webhook通知argocd进行同步
- 状态对比:每次拉取到最新的git仓库状态后,argocde会与当前集群中应用状态进行比对,如果发现差异,argocd会自动执行同步操作,确保集群与git仓库的配置一致
五、与gitlab集成
1、配置gitlab项目
在gitlab中创建或选择一个项目,确保项目中包含k8s资源清单文件,并将这些文件存储在仓库的一个目录中,例如manifests/
2、配置argocd application
在argocd中创建一个application资源,指向gitlab仓库,并设置好相关路径和目标集群。例如:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: 'https://gitlab.com/your-username/your-repo.git'
path: 'manifests'
targetRevision: HEAD
destination:
server: 'https://kubernetes.default.svc'
namespace: my-namespace
syncPolicy:
automated:
prune: true
selfHeal: true
3、配置gitlab webhook
进入gitlab项目中的Settings -> Webhooks,添加一个新的 Webhook,URL 填写 ArgoCD 的 Webhook 地址,通常为 https://argocd.example.com/api/webhook,选择 Push events 或 Merge request events 触发器。
4、验证集成
每当gitlab仓库有新的提交或合并请求时,argocd会收到webhook通知,并立即触发同步操作。可以通过argocd的webui查看
5、示例代码
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo-app
namespace: argocd
spec:
project: default
source:
repoURL: 'https://gitlab.com/your-username/demo-app.git'
path: 'k8s-manifests'
targetRevision: HEAD
destination:
server: 'https://kubernetes.default.svc'
namespace: demo
syncPolicy:
automated:
prune: true
selfHeal: true
webhook:
gitlab:
- url: https://argocd.example.com/api/webhook
secret: your-webhook-secret
【在上述配置中,syncPolicy中的automated参数启用了自动同步和自动修复功能,这意味着argocd会自动拉取gitlab的最新配置,并将其应用到k8s集群中】