1. GitOps 核心概念:声明式配置、期望状态与当前状态、Git 作为单一事实来源

GitOps 是一种以 Git 仓库为唯一权威来源的运维与交付模式。它要求整个系统的期望状态(Desired State)全部以声明式配置(Declarative Configuration)的形式存储在 Git 仓库中,并通过自动化机制持续将当前状态(Current State)向期望状态收敛。理解这三个核心概念是掌握 Argo CD 回滚验证的前提。

1.1 声明式配置

声明式配置描述的是系统“应该是什么”,而不是“如何去做”。在 Kubernetes 生态中,YAML 或 JSON 清单文件就是声明式配置的典型载体。

对比维度 声明式(Declarative) 命令式(Imperative)
关注点 最终结果(What) 执行步骤(How)
可复现性 高,同一配置产生相同结果 低,依赖执行顺序和环境
审计能力 强,配置即文档 弱,操作日志易丢失
GitOps 适配 原生支持 不推荐
关键认知: 声明式配置是 GitOps 的“语言”。只有将系统状态描述为可版本化的配置文件,Git 才能成为单一事实来源。

1.2 期望状态与当前状态

GitOps 的核心循环围绕两个状态展开:

  • 期望状态(Desired State):存储在 Git 仓库中的声明式配置集合,代表团队对系统最终形态的共识。
  • 当前状态(Current State):集群中实际运行的资源实例,可能因手动变更、故障、升级中断等原因偏离期望状态。

Argo CD 作为 GitOps 控制器,持续执行“差异检测 → 自动/手动同步 → 状态收敛”的闭环。

# 期望状态示例(Git 仓库中的 Deployment 配置)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: production
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: app
        image: myregistry/my-app:v1.2.3
        ports:
        - containerPort: 8080
回滚视角: 回滚的本质是将期望状态“重置”为 Git 历史中的某个旧提交,Argo CD 随后自动将当前状态收敛到该旧期望状态。

1.3 Git 作为单一事实来源

在 GitOps 模型中,Git 仓库是唯一被信任的真相源。所有环境(开发、预发布、生产)的配置变更都必须通过 Pull Request 合并到 Git 仓库,再由自动化工具应用到集群。

这一原则带来的核心优势:

  • 完整审计轨迹:每一次变更都有作者、时间戳、变更说明。
  • 快速回滚:只需执行 git revert 或切换到历史提交,即可触发全局状态恢复。
  • 灾难恢复:集群完全损毁时,可从 Git 仓库重建所有资源。
  • 协作基础:团队通过代码审查(Code Review)控制变更质量。
GitOps 核心概念关系图 Git 仓库 单一事实来源 声明式配置 YAML / 清单文件 期望状态 Desired State 当前状态 Current State 存储为 定义 Argo CD 持续收敛 差异反馈 核心闭环:声明式配置 → Git 仓库(期望状态)→ Argo CD 同步 → 集群(当前状态)→ 差异反馈

1.4 三者的协同关系

在回滚场景中,三个概念协同工作:

  1. 声明式配置 提供了可版本化的回滚单元。
  2. 期望状态 通过 Git 历史提交实现“时间旅行”。
  3. 当前状态 在 Argo CD 驱动下自动跟随期望状态变化。
常见误区: 不要将 Git 仓库仅当作备份存储。GitOps 要求所有变更必须经过 Git,任何绕过 Git 的集群手动修改都会导致“配置漂移”(Configuration Drift),破坏单一事实来源原则。
回滚场景下的状态转换 时间 v1 v2 v3 v2' 期望状态 v1 期望状态 v2 期望状态 v3(故障) 期望状态 v2(回滚) 当前状态 → v2 git revert / 重置 回滚验证关键点 1. 回滚后期望状态(v2')与原始 v2 的声明式配置完全一致 2. Argo CD 自动检测差异并将当前状态收敛到 v2' 3. 验证当前状态是否与期望状态完全匹配(无漂移)

1.5 本章小结

  • 声明式配置 是 GitOps 的输入格式,确保系统描述可版本化、可审计。
  • 期望状态 vs 当前状态 的差异驱动了 GitOps 的自动化收敛循环。
  • Git 作为单一事实来源 是回滚操作的基础——回滚即是将期望状态指向历史提交。