一、概述
1、为什么使用Argo CD
Jenkins采用推的形式进行部署,ArgoCD采用拉的方式,更为高效
Jenkins部署更新需要保存k8s的集群认证信息,以及无法感知应用的状态,argocd为原生部署在k8s集群内,
2、什么是Argo CD
Argo CD是Kubernetes的声明式GitOps持续交付工具
3、什么是Git Ops
Git Ops:Git 作为唯一的事实来源来管理基础设施操作。
4、如何运行
Argo CD遵循Git Ops模式,使用Git存储库作为定义所需使用应用程序状态的事实来源。
k8s清单可以通过多种方式进行制定:
- kustomize application
- helm charts
- jsonnet files
- YAML/Json
Argo CD可在指定的目标环境中自动部署所需的应用状态。应用程序可以跟踪分支、标签的更新,或是git提交的清单进行更新容器的状态。
二、架构
Argo CD被实现为k8s的控制器,它持续监控正在运行的程序,并将当前状态与所需的目标状态(git仓库中)进行比较,并报告实时差异。可以通过自动或者手动的方式将实时状态与目标状态进行同步。
如上图所示,Argo CD主要由核心组件、web UI、CLI、通知系统构成
1、核心组件
API server
API server是一个gRPC/REST服务器,公开web UI 、CLI以及CI/CD使用的API
- 应用程序管理和状态报告
- 应用程序的操作管理(同步、回滚)
- 存储库和k8s集群凭证管理
- RBAC
- git webhook 事件侦听
Repository Server(仓库服务器-默认3分钟轮训一次)
将git仓库缓存到本地,用于维护本地缓存,
根据以下信息生成并返回k8s资源的yaml文件,
- git仓库的地址
- git revison(提交、标签、分支)
- 应用路径
- 模板的特定参数
Application Controller(应用控制器)
他是一个k8s的控制器,它持续监控正在运行的程序,并将当前的实时状态与gitRepo所需的目标状态进行比较,确保当前状态不断逼近或等同于期望状态。
2、其他组件
notifications controller
为application提供通用的通知引擎,支持trigger和template,语序用户通过自定义的方式进行通知
redis、Dex-server
redis提供缓存服务
Dex-server则主要用于提供in-memory database
三、核心功能
- 可以协同使用各种配置管理工具(helm、kustomize)确保应用程序的真实状态与gitrepo中定义的期望状态保持一致
- 将应用程序部署到指定的目标环境
- 持续监控已经部署的应用程序
- 基于web ui、CLI的操作接口,以及应用程序可视化
- 部署或者回滚到gitRepo仓库中提交的应用程序的任何状态
- Presync、sync、Psotsync以支持复杂的应用程序部署和策略
- sso集成
- webhook集成