ArgoCD的设计和功能

GitOps

基础设施即代码

在理解GitOps前,我们需要先理解什么是基础设施即代码(Infrastructure as Code, IaC)。基础设施即代码表示使用代码来定义基础设施,研发人员可以像对待应用软件一样对待基础设施,例如:

  • 可以创建包含基础架构规范的声明式配置文件,从而便于编辑和分发配置
  • 可以确保每次配置的环境都完全相同
  • 可以进行版本控制
  • 可以将基础设施划分未若干个模块化组件。,并通过自动化以不同的方式进行组合

什么是GitOps

GitOps = IaC + Git + CI/CD,即基于IaC的版本化CD/CD。它的核心是使用Git仓库管理基础设施和应用的配置,并且以Git仓库作为基础设施和应用的单一事实来源。Git仓库中的声明式配置描述了目标环境当前所需基础设施地期望状态,借助于GitOps,如果集群地市级状态与Git仓库中的定义与期望状态不匹配,Kubernetes reconcilers会根据期望撞他ilai调整当前地状态,最终使实际状态符合期望状态。

GitOps vs DevOps

从广义上来看,GitOps与DevOps并不冲突,GitOps是一种技术手段,而DevOps是一种文化。GitOps是一种实现持续交付、持续部署和基础设施即代码地工具和框架,它是支持DevOps文化的。 GitOps和DevOps主要区别

  • GitOps以目标为导向,使用Git维护期望状态,并不断调整实际状态,最终与期望状态相匹配。而DevOps更多关注的是最佳实践,这些实践可以应用于企业每一个流程。
  • GitOps采取声明式的操作方法,而DevOps同时接受声明式和命令式的方法。

ArgoCD的优势

  • Git作为应用的唯一真实来源:期望状态的唯一存储
  • 快速回滚:通过Git History切换commit将应用状态快速恢复到上一个可用的状态
  • 集群灾备:若集群A出现故障,可以直接创建新集群,然后将ArgoCD连接到包含集群A所有配置声明的Git仓库,最终新集群B的状态会与旧集群状态一致,无需人工干预

ArgoCD架构

image
从功能架构来看,Argo CD 主要有三个组件:API Server、Repository Server 和 Application Controller。从 GitOps 工作流的角度来看,总共分为 3 个阶段:检索、调谐和呈现

检索 - Repo Server

检索阶段会克隆应用声明式配置清单所在的 Git 仓库,并将其缓存到本地存储。包含 Kubernetes 原生的配置清单、Helm Chart 以及 Kustomize 配置清单。履行这些职责的组件就是 Repository Server。

调谐 - Application Controller

调谐(Reconcile)阶段是最复杂的,这个阶段会将 Repository Server 获得的配置清单与反映集群当前状态的实时配置清单进行对比,一旦检测到应用处于 OutOfSync 状态,Application Controller 就会采取修正措施,使集群的实际状态与期望状态保持一致。

呈现 API Server

最后一个阶段是呈现阶段,由 Argo CD 的 API Server 负责,它本质上是一个 gRPC/REST Server,提供了一个无状态的可视化界面,用于展示调谐阶段的结果