1. GitOps 核心理念:声明式配置、不可变基础设施、Git 作为单一事实来源

GitOps 是一套以 Git 仓库为运维中心的持续交付与基础设施管理范式。其核心由三大支柱构成:声明式配置、不可变基础设施、Git 作为单一事实来源。理解这三者之间的协同关系,是构建可靠 GitOps 流水线的第一步。

1.1 三大核心理念对比

核心理念 定义 关键特征 反模式
声明式配置 用户描述系统的期望状态(What),而非执行步骤(How)。 幂等性、可重复、版本化 命令式脚本、手动 kubectl apply
不可变基础设施 基础设施组件在部署后不被修改,替换而非修补。 一致性、可追溯、快速回滚 SSH 登录修改、配置漂移
Git 单一事实来源 Git 仓库是集群期望状态的唯一权威存储与变更入口。 审计日志、协作基础、自动同步 直接操作集群、多源配置

1.2 核心理念关系图

下图展示了三大理念如何形成闭环:声明式配置定义期望状态,不可变基础设施保证状态一致性,Git 仓库作为两者之间的持久化锚点与变更驱动源。

GitOps 三大核心理念协同关系 Git 仓库 单一事实来源 声明式配置 期望状态(YAML/Helm/Kustomize) 不可变基础设施 替换而非修补 自动同步控制器 ArgoCD / Flux 变更流程: PR → 审核 → Merge → 自动同步

1.3 声明式配置详解

声明式配置是 GitOps 的语言基础。团队只需在 Git 中维护一组描述系统最终状态的文件(如 Kubernetes Deployment、Service、ConfigMap),控制器负责将集群实际状态收敛至期望状态。

关键优势:
  • 幂等性:同一份配置多次应用,结果始终一致。
  • 可审查:所有变更通过 Pull Request 进行代码审查。
  • 可回滚:回退到上一个 Git commit 即可恢复集群状态。
# 声明式配置示例:nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80

1.4 不可变基础设施

不可变基础设施要求:一旦部署,组件不再被修改。若需变更,则通过 Git 提交新配置,控制器销毁旧实例并创建新实例。这彻底消除了配置漂移和雪花服务器问题。

对比维度 可变基础设施 不可变基础设施
变更方式 SSH 登录、手动修改 替换整个实例
一致性 随时间退化 始终与 Git 一致
回滚速度 慢(需逆向操作) 快(直接切换镜像版本)
审计能力 弱(依赖操作日志) 强(Git 历史即审计日志)

1.5 Git 作为单一事实来源

在 GitOps 模型中,Git 仓库不仅是代码存储,更是集群状态的权威数据库。所有对基础设施和应用的变更,都必须通过 Git 提交来驱动。控制器持续对比 Git 中的期望状态与集群实际状态,自动纠正偏差。

实践要点:
  • 每个环境(dev/staging/prod)应有独立的 Git 分支或目录。
  • 禁止直接通过 kubectl 或云控制台修改集群资源。
  • 所有变更必须经过 Pull Request 流程,确保可追溯。

1.6 多团队协作中的理念落地

当多个团队共享同一 GitOps 流水线时,三大理念提供了协作基础:

  • 声明式配置:每个团队维护自己的配置目录,通过清晰的目录结构避免冲突。
  • 不可变基础设施:团队 A 的回滚不会影响团队 B 的服务,因为每个部署单元都是独立的不可变实例。
  • Git 单一事实来源:所有团队的变更历史集中存储在 Git 中,便于跨团队审计和问题排查。
常见误区: 部分团队将 Git 仅当作“备份仓库”,仍然通过 CI 脚本直接修改集群。这违背了 GitOps 的核心理念——Git 必须是变更的唯一入口,而非事后记录。