Argo CD核心概念及架构设计

Argo CD的核心概念

Application(应用):一组Kubernetes资源清单的统一定义,属于CRD(Custom Resource Definition,定制资源定义)资源。

Application source type(应用的源仓库类型):目前Argo CD支持Git和Helm两种源仓库类型。

Target state(目标状态):用户在源仓库中声明的应用状态。

Live state(实时状态):当前环境中应用的实际运行状态。

Sync status(同步状态):应用的实际运行状态与声明的目标状态是否一致,OutOfSync表示未同步,Synced表示已同步。

Sync(同步或部署):使应用更新为目标状态的过程,如下发Kubernetes应用到集群的过程。

Repository(源码仓库):配置连接源码仓库需要提供仓库地址、仓库类型、仓库访问凭证等信息。

Credentials(访问凭证):用于访问源码仓库的凭证。

Clusters(集群):配置可以连接和管理的Kubernetes集群。

Argo CD架构设计与工作原理

Argo CD本质上是一个Kubernetes Operator,设计和定义了一系列Kubernetes CRD描述的自定义资源。Argo CD会持续监听当前应用的运行状态并对比当前应用运行态与Git仓库中声明态的区别,当被监听的应用运行态与声明态有差异时,Argo CD会在UI页面上可视化展示差异部分,同时提供手动或者自动同步应用至所需目标状态的选项设置。如果你在Git仓库中对目标状态做了任何修改,Argo CD都可以自动将修改同步部署到指定目标环境中。从功能上看,Argo CD包括以下主要功能。

  • 自动部署应用到指定目标集群上。
  • 支持多种应用配置或编排工具,如Kustomize、Helm、Ksonnet等。
  • 支持在多集群环境中管理和部署应用。
  • 支持多种单点登录方式的集成,如OICD、OAuth2、LDAP、SAML 2.0、GitHub、GitLab等。
  • 支持多租户和基于角色访问控制(RBAC)的身份验证。
  • 回滚应用到指定的历史版本。
  • 应用资源的健康状态分析。
  • 自动化和可视化检测应用状态的差异。
  • 支持自动化或手动同步策略。
  • Web UI界面可以展示应用实时运行状态。
  • 提供CLI用于第三方工具持续集成。
  • 集成Webhook,如GitHub、GitLab或BitBucket。
  • 提供用于远程访问或触发的令牌功能。
  • 提供PreSync、Sync、PostSync等钩子能力,帮助用户更好地处理复杂的应用发布,如蓝绿发布、金丝雀发布等。
  • 支持应用事件或者API调用的审计和跟踪。
  • 支持Prometheus指标采集。
  • 支持ksonnet/helm类型应用编排的参数覆盖。

Argo CD架构主要由3个组件组成,如下所示。

 

1. API Server组件

Argo CD的API Server是一个gRPC/REST风格的API组件,暴露出来的API用于Web UI、CLI或者其他CI/CD系统调用,主要负责以下工作。

  • 管理应用和上报应用状态。
  • 执行与应用管理相关的操作,如同步操作、回滚操作等。
  • 管理源码仓库或集群访问凭证(将其保存为Kubernetes集群中的Secret资源)。
  • 对外部身份提供者进行身份验证以及委派身份。
  • 执行基于角色的访问权限控制策略。
  • 监听和转发Git webhook事件。

2. Repository Server组件

Argo CD的Repository Server是一个内部服务组件,负责维护从Git仓库中拉取的应用编排文件的本地缓存。Repository Server会基于用户提供的以下信息,生成应用的Kubernetes资源清单。

  • 仓库地址:如https://github.com/haoshuwei/appcenter-samples.git。
  • 修订版本:如master分支(还支持commit id、tag等)。
  • 应用路径:如指定子目录examples/demo。
  • 应用模板相关参数设置:如helm类型应用的values.yaml文件的设置。

3. Application Controller组件

Argo CD的Application Controller是一个标准的Kubernetes CRD组件,持续监听应用的实时运行状态并与Git仓库中声明的期望状态进行对比,如果有不一致的状态,会根据用户设置的同步策略决定是否自动修复应用。

posted @ 2023-01-25 11:45  muzinan110  阅读(259)  评论(0编辑  收藏  举报