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

在深入发布质量门禁与事故响应阈值策略之前,必须牢固掌握 Argo CD 的底层运行机制。本章将系统回顾其四大核心概念、整体架构以及一次完整的 GitOps 同步工作流程,为后续的阈值配置与故障排查奠定基础。

2.1 四大核心概念

Argo CD 围绕四个关键组件构建,理解它们之间的职责划分是使用 Argo CD 的第一步。

概念 职责 关键说明
Application 定义了一个 Kubernetes 应用实例的完整声明式状态。 包含 source(Git 仓库路径)、destination(目标集群/命名空间)、syncPolicy(自动/手动同步策略)。它是用户操作的主要对象。
Project 提供逻辑分组与访问控制边界,用于管理多个 Application。 限制可用的目标集群、允许的 Git 仓库来源、资源类型以及同步权限。常用于多租户隔离。
Repo Server 负责从 Git 仓库拉取清单文件,并执行模板化(如 Helm、Kustomize、Jsonnet)。 生成最终的 Kubernetes 原生 YAML 清单。它是连接 Git 与 Kubernetes 的“编译”层。
Application Controller 持续监控集群中运行的应用状态,并与 Repo Server 生成的“期望状态”进行对比。 检测配置漂移,触发自动或手动同步,并报告应用健康状态(Healthy、Degraded、Progressing)。
💡 核心关系: Application 是“用户意图”,Project 是“管理边界”,Repo Server 是“配置编译器”,Application Controller 是“状态监督员”。

2.2 系统架构图

下图展示了 Argo CD 各组件的交互关系,重点关注数据流与控制流的方向。

Argo CD 核心架构与数据流 Git 仓库 (期望状态) Repo Server (模板渲染) Application Controller (状态对比与同步) Kubernetes 集群 (运行时状态) API Server 用户 / CI 工具 拉取清单 期望状态 同步/对比 运行时状态 控制指令 CLI/UI/API 📦 数据流说明 1. Repo Server 从 Git 获取原始配置 2. 渲染后生成期望状态清单 3. Controller 对比期望与运行时状态

2.3 工作流程:从 Git Push 到应用同步

一次标准的 GitOps 同步流程包含以下步骤,理解此流程有助于定位同步失败或状态漂移问题。

  1. 代码提交(Git Push): 开发人员将更新后的 Kubernetes 清单(或 Helm/Kustomize 配置)推送到 Git 仓库。
  2. 配置拉取(Repo Server): Argo CD Repo Server 检测到仓库变更(通过 Webhook 或轮询),拉取最新代码,并执行模板渲染,生成最终的 Kubernetes 原生 YAML 清单。
  3. 状态对比(Application Controller): Application Controller 将 Repo Server 生成的“期望状态”与目标 Kubernetes 集群中运行的“实际状态”进行对比。
  4. 触发同步(Sync): 如果检测到差异,根据 Application 的 syncPolicy 配置:
    • 自动同步: Controller 自动执行同步操作,将集群状态修正为期望状态。
    • 手动同步: 用户通过 Argo CD UI、CLI 或 API 手动触发同步。
  5. 应用更新(Kubernetes): Argo CD 调用 Kubernetes API 更新资源(如 Deployment、Service、ConfigMap),完成应用发布。
  6. 健康评估(Health Check): 同步完成后,Controller 对应用进行健康检查(如 Pod 是否 Ready、Deployment 是否完成滚动更新),并更新应用的健康状态。
🔍 关键观察点: 在步骤 3(状态对比)和步骤 6(健康评估)中,Argo CD 会生成详细的同步状态与健康状态。这些状态是后续设置发布质量门禁(如“同步失败自动回滚”、“健康检查超时告警”)的原始数据来源。

2.4 核心对象关系总结

下表总结了 Application、Project 与底层组件之间的依赖关系,帮助理解配置的生效范围。

对象 关联组件 配置示例
Application Repo Server(source)、Application Controller(destination)
source:
  repoURL: 'https://github.com/example/repo.git'
  path: 'environments/prod'
destination:
  server: 'https://kubernetes.default.svc'
  namespace: 'production'
Project API Server(RBAC)、Application(分组)
spec:
  sourceRepos:
  - 'https://github.com/example/*'
  destinations:
  - namespace: 'production'
    server: 'https://kubernetes.default.svc'
⚠️ 常见陷阱: 如果 Application 的同步状态显示 OutOfSync 但健康状态为 Healthy,通常意味着集群中存在未被 Git 管理的额外资源(配置漂移),或者 Argo CD 的权限不足以清理这些资源。这是设置“强制同步”或“自愈”策略时需要重点评估的场景。