2. Argo CD 核心原理回顾:GitOps 工作流、Application 与 AppProject 模型、同步策略与钩子

2.1 GitOps 工作流:声明式驱动的闭环

Argo CD 的核心是 GitOps 模式,它将 Git 仓库作为集群状态的“唯一事实来源”。整个工作流围绕“期望状态”与“实际状态”的持续调谐展开。

核心闭环: 开发者推送代码 → Git 仓库变更 → Argo CD 检测差异 → 自动/手动同步 → 集群状态收敛至期望状态。
GitOps 工作流闭环 开发者 推送代码 Git 仓库 期望状态 Argo CD 差异检测 Kubernetes 集群 实际状态 持续调谐循环:Argo CD 定期对比 Git 期望状态与集群实际状态 检测到漂移时触发同步(自动或手动),确保集群收敛
关键理解: GitOps 不是简单的“从 Git 部署”,而是“Git 驱动状态收敛”。Argo CD 作为调谐器,持续确保集群不会偏离 Git 中定义的清单。

2.2 Application 与 AppProject 模型

Argo CD 通过两个核心 CRD(Custom Resource Definition)来组织和管理部署:Application 和 AppProject。

2.2.1 Application:单个部署单元

一个 Application 资源定义了从哪个 Git 仓库、哪个路径、同步到哪个目标集群和命名空间。它是 Argo CD 管理的最小粒度。

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.2 AppProject:逻辑隔离与安全边界

AppProject 用于对 Application 进行分组,并施加访问控制、资源限制和部署策略。一个 Application 必须属于一个 Project。

特性 Application AppProject
粒度 单个应用/微服务 应用组/团队/环境
职责 定义来源、目标、同步策略 定义允许的来源仓库、目标集群、命名空间、资源配额
安全控制 继承 Project 策略 RBAC、Sync Windows、白名单
典型场景 部署一个 Web 服务 隔离开发/生产环境,限制团队权限
运维注意: 在治理集群生命周期时,AppProject 是实施“环境隔离”和“多租户”的关键工具。务必为每个环境(dev/staging/prod)创建独立的 Project,并严格限制其目标集群和命名空间。

2.3 同步策略与钩子

同步策略决定了 Argo CD 如何将 Git 中的期望状态应用到集群;同步钩子则允许在同步流程中插入自定义操作。

2.3.1 同步策略对比

策略 模式 自动修复漂移 适用场景
手动同步 人工点击 Sync 按钮或 CLI 否 生产环境严格审批、变更窗口控制
自动同步 检测到差异即自动同步 是(需开启 selfHeal) 开发环境、CI/CD 流水线、快速迭代
自动同步 + Prune 自动同步并删除集群中多余资源 是 声明式环境重置、资源回收
自动同步 + SelfHeal 自动同步并自动修复手动修改 是(最强) 对抗运维漂移、集群生命周期治理

2.3.2 同步钩子(Sync Hooks)

钩子是在同步生命周期的特定阶段执行的 Job 或 Pod,用于执行数据库迁移、预检查、通知等任务。

同步钩子生命周期 PreSync 钩子执行 Sync 资源应用 PostSync 钩子执行 SyncFail 失败处理 钩子 Job 默认在同步完成后自动删除(ttlSecondsAfterFinished) 常用于:数据库迁移、缓存预热、金丝雀验证、通知发送
钩子类型速查:
  • PreSync: 在资源应用前执行,常用于数据库备份、Schema 检查。
  • Sync: 替代默认资源应用,用于自定义同步逻辑(较少使用)。
  • PostSync: 在资源应用成功后执行,常用于索引重建、健康检查通知。
  • SyncFail: 在同步失败时执行,常用于回滚、告警、清理。
治理场景建议: 在集群生命周期复测中,建议在 PreSync 阶段插入“集群状态快照”钩子,在 PostSync 阶段插入“合规性验证”钩子,确保每次同步都经过可审计的检查点。