2. Argo CD 核心原理回顾:GitOps 工作流、Application 与 AppProject 模型、同步策略与钩子
2.1 GitOps 工作流:声明式驱动的闭环
Argo CD 的核心是 GitOps 模式,它将 Git 仓库作为集群状态的“唯一事实来源”。整个工作流围绕“期望状态”与“实际状态”的持续调谐展开。
核心闭环: 开发者推送代码 → Git 仓库变更 → Argo CD 检测差异 → 自动/手动同步 → 集群状态收敛至期望状态。
关键理解: 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: 在资源应用前执行,常用于数据库备份、Schema 检查。
- Sync: 替代默认资源应用,用于自定义同步逻辑(较少使用)。
- PostSync: 在资源应用成功后执行,常用于索引重建、健康检查通知。
- SyncFail: 在同步失败时执行,常用于回滚、告警、清理。
治理场景建议: 在集群生命周期复测中,建议在 PreSync 阶段插入“集群状态快照”钩子,在 PostSync 阶段插入“合规性验证”钩子,确保每次同步都经过可审计的检查点。