GitOps 核心理念与优势
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read586 words

GitOps 核心理念与优势

核心问题:什么是 GitOps?它和传统 CI/CD 有什么不同?为什么说"Git 是唯一真相来源"?


什么是 GitOps

GitOps 是一种以 Git 仓库为基础设施和应用配置唯一来源的运维范式,核心原则:

  1. 声明式:用 YAML / HCL 描述期望状态,而不是写操作步骤
  2. 版本化:所有配置提交到 Git,有完整历史记录
  3. 自动同步:GitOps Agent 持续监测 Git 与集群差异,自动协调
  4. 可观测:任何偏差(配置漂移)都能被检测和告警

GitOps vs 传统 CI/CD

graph TB subgraph "传统 Push 模型" DEV1[开发者推送代码] CI1[CI 构建镜像] CD1[CD Pipeline
kubectl apply / helm upgrade] K8S1[Kubernetes 集群] DEV1 --> CI1 --> CD1 -->|推送变更| K8S1 end subgraph "GitOps Pull 模型" DEV2[开发者 PR → 合并到 Git] GIT2[Git 仓库
(唯一真相来源)] ARGO[ArgoCD Agent
持续 Reconcile] K8S2[Kubernetes 集群] DEV2 -->|更新 Git| GIT2 ARGO -->|拉取 Git 变更| GIT2 ARGO -->|自动同步| K8S2 K8S2 -->|检测到漂移| ARGO end
维度 传统 Push CI/CD GitOps Pull 模型
访问集群的主体 CI/CD 系统 集群内 Agent(ArgoCD)
密钥管理 CI 需要 kubeconfig 只有 Agent 有集群权限
配置漂移 无法检测 自动检测并可自动修复
回滚方式 重新跑 Pipeline git revert 或修改 Git
审计追踪 CI 日志 Git 提交历史
声明式程度 部分(命令式部署) 完全声明式

GitOps 两种仓库策略

单仓库策略(Monorepo)

my-monorepo/
├── apps/
│   ├── api/                    # 应用代码
│   └── web/
└── deploy/                     # 部署配置(GitOps 部分)
├── base/                   # 公共配置(Kustomize base)
│   ├── api/
│   └── web/
└── overlays/               # 环境差异(Kustomize overlays)
├── dev/
├── staging/
└── production/

✅ 简单,代码和配置一起审查 ⚠️ 应用代码变更会触发配置 CI,反之亦然

app-repo/                       # 应用代码仓库(开发者日常工作)
├── src/
├── Dockerfile
└── .github/workflows/
└── ci.yml                  # 构建镜像,更新 infra-repo 中的 image tag
infra-repo/                     # 基础设施配置仓库(GitOps 唯一真相)
├── apps/
│   ├── api/
│   │   ├── base/
│   │   └── overlays/
│   └── web/
└── clusters/
├── staging/
└── production/

✅ 职责分离,更安全 ✅ 代码 CI 和基础设施 GitOps 流程解耦


Kustomize:无模板的 YAML 覆盖

Kustomize 是 GitOps 中常配合使用的 YAML 管理工具(kubectl 内置支持):

apps/api/
├── base/                          # 基础配置
│   ├── kustomization.yaml
│   ├── deployment.yaml
│   └── service.yaml
└── overlays/
├── dev/
│   ├── kustomization.yaml     # 引用 base + 覆盖差异
│   └── replica-patch.yaml
└── production/
├── kustomization.yaml
└── production-patch.yaml
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
commonLabels:
app: api
# overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
namespace: production
images:
- name: myorg/api
newTag: v1.3.0     # CI 自动更新这里的 tag
patches:
- path: production-patch.yaml
# overlays/production/production-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
replicas: 3          # 覆盖 base 中的 replicas

GitOps 工具对比

工具 类型 特点 适用场景
ArgoCD GitOps Controller 功能最全、UI 直观、App of Apps 主流选择,本书重点
Flux v2 GitOps Controller 更轻量,kubectl 风格,Helm Controller 偏好 CLI 操作
Weave GitOps ArgoCD + 商业封装 更好的 UI 和策略管理 企业级
Jenkins X 完整平台 集成 CI + CD + GitOps 大型工程团队

配置漂移检测与自动修复

graph LR GIT["Git 仓库
期望状态:replicas=3"] ARGO["ArgoCD
持续 Reconcile"] K8S["集群
实际状态:replicas=1
(有人手动改了!)"] GIT -->|拉取| ARGO ARGO -->|检测| K8S K8S -->|发现漂移| ARGO ARGO -->|自动恢复
或告警| K8S

ArgoCD 有三种同步策略:

策略 行为 适用场景
Manual 只检测差异,不自动修复,需人工审批 生产环境(推荐)
Automated 检测到差异自动同步,可加自愈 开发/测试环境
Automated + SelfHeal 任何漂移都立即恢复 强一致性要求的生产环境

下一节ArgoCD 安装与 Application 配置