2. Argo CD 基础回顾:核心概念、架构组件与工作流程

在深入资源配额校准与性能调优之前,必须牢固掌握 Argo CD 的基础知识。本章将系统回顾 Argo CD 的三大核心概念(Application、Project、Repository)、三大架构组件(API Server、Repo Server、Application Controller)以及端到端的工作流程。这些内容是后续所有调优操作的基石。

2.1 核心概念

Argo CD 围绕三个核心抽象构建:Application(应用)、Project(项目)和 Repository(仓库)。理解它们之间的关系是使用 Argo CD 的第一步。

概念 定义 关键属性
Application 代表一个已部署或待部署的 Kubernetes 资源集合。它是 Argo CD 管理的原子单元。 源(Source)、目标(Destination)、同步策略(Sync Policy)
Project 用于对 Application 进行逻辑分组和访问控制的容器。它定义了允许部署的目标集群、命名空间以及资源来源。 源仓库白名单、目标集群白名单、命名空间白名单、角色绑定
Repository 存储 Kubernetes 清单(Manifest)的 Git 仓库地址。Argo CD 通过监听仓库变化来驱动应用状态同步。 Git URL、SSH/HTTPS 凭证、路径(Path)、分支(Branch)

核心关系总结: 一个 Repository 可以包含多个 Application 的清单文件;每个 Application 必须属于且仅属于一个 Project;Project 通过白名单机制约束 Application 可以引用的 Repository 和目标集群。

2.1.1 Application 的声明式定义

一个典型的 Application 资源定义如下,它清晰地描述了“从哪来(Source)、到哪去(Destination)、怎么同步(Sync Policy)”:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

2.2 架构组件

Argo CD 采用微服务架构,由三个核心组件协同工作,确保 Git 仓库中的期望状态与集群中的实际状态保持一致。

Argo CD 核心架构组件关系图 Git Repository 期望状态 API Server REST API / Web UI Repo Server 清单生成 & 缓存 App Controller 状态比较 & 同步 目标 K8s 集群 实际状态 Webhook / Poll 请求生成清单 返回期望清单 同步/比较 说明:API Server 是用户入口,Repo Server 负责从 Git 生成 Kubernetes 清单,App Controller 负责驱动实际状态向期望状态收敛。

2.1.2 组件职责详解

组件 核心职责 关键行为
API Server 暴露 REST API 和 Web UI,处理用户/CI/CD 系统的请求。管理 Application、Project 等 CRD 资源。 认证、授权、请求路由、事件分发
Repo Server 克隆 Git 仓库,生成 Kubernetes 清单(支持 Helm、Kustomize、Jsonnet 等)。维护本地缓存以提升性能。 仓库克隆、清单渲染、缓存管理、LFS 支持
Application Controller 持续监控 Application 的期望状态(来自 Repo Server)与实际状态(来自目标集群),并在检测到差异时触发同步操作。 状态比较、自动/手动同步、Prune、Self-Heal、健康状态评估

2.3 工作流程

Argo CD 遵循“GitOps 闭环”原则,其核心工作流程可以概括为以下五个步骤:

  1. 用户提交变更: 开发人员将 Kubernetes 清单文件的变更推送到 Git 仓库。
  2. Argo CD 检测变更: API Server 通过 Webhook 或轮询机制感知到仓库变更,并更新 Application 状态。
  3. Repo Server 生成清单: Repo Server 根据 Application 定义,从 Git 仓库拉取代码并渲染出最终的 Kubernetes 清单。
  4. Application Controller 比较状态: Controller 将 Repo Server 生成的期望清单与目标集群中的实际运行状态进行对比。
  5. 执行同步操作: 如果检测到差异(OutOfSync),Controller 根据同步策略(自动或手动)执行 kubectl apply 等操作,使集群状态与 Git 仓库保持一致。
Argo CD 端到端工作流程图 1. 提交变更 Git Push 2. 检测变更 Webhook / Poll 3. 生成清单 Repo Server 4. 比较状态 期望 vs 实际 5. 执行同步 kubectl apply 目标集群 实际状态更新 持续监控循环(默认每 3 分钟) 关键点:整个流程的核心是“Git 仓库作为单一事实来源”。任何手动修改集群的行为都会被 Argo CD 自动还原(如果开启了 Self-Heal)。 理解此闭环是后续进行资源配额校准和性能调优的前提。