第1章 GitOps 的核心理念
以 Git 为唯一真相源的声明式运维范式
什么是 GitOps?
GitOps 是一种以 Git 仓库作为基础设施和应用程序唯一真相源(Single Source of Truth)的运维范式。所有变更通过 Git 提交触发,由自动化控制器将集群状态收敛到 Git 中声明的期望状态。
GitOps 四大原则
- 声明式描述:系统期望状态用声明式方式(YAML/Helm/Kustomize)描述
- 版本化与不可变:所有声明存储在 Git 中,版本化、可审计、可回滚
- 自动拉取:软件代理自动从 Git 拉取期望状态并与实际状态对比
- 持续调和:控制器持续监控并修正偏差,确保实际状态 = 期望状态
GitOps vs 传统 CI/CD
| 维度 | 传统 CI/CD (Push) | GitOps (Pull) |
|---|---|---|
| 部署触发 | CI 推送变更到集群 | CD 控制器从 Git 拉取 |
| 权限模型 | CI 需要集群写权限 | 集群内控制器有权限,CI 只需写 Git |
| 状态管理 | 依赖 CI 记录部署状态 | Git 即为状态,天然可审计 |
| 回滚方式 | 重新触发 CI 部署旧版本 | Git revert 即可回滚 |
| 安全边界 | CI 系统暴露集群凭据 | 集群不暴露外部访问入口 |
核心优势:GitOps 将部署权限从 CI 系统转移到集群内部,大幅缩小攻击面。
第2章 ArgoCD 深度实践
企业级 GitOps 控制器的部署与配置
ArgoCD 架构
┌──────────┐ ┌──────────────┐ ┌─────────────┐
│ Git │────▶│ ArgoCD │────▶│ Kubernetes │
│ Repo │ │ Controller │ │ Cluster │
└──────────┘ └──────────────┘ └─────────────
│
┌──────┴──────┐
│ ArgoCD UI │
│ (Web/Dashboard)│
└─────────────┘
安装与配置
# Application 资源定义
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/org/k8s-manifests.git
targetRevision: HEAD
path: overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
关键特性
- 多集群管理:一个 ArgoCD 实例管理多个目标集群
- Helm + Kustomize:支持多种清单渲染方式
- Sync Waves:控制资源同步顺序(先 Namespace,再 ConfigMap,最后 Deployment)
- 健康检查:自定义资源健康评估逻辑
生产建议:开启
selfHeal: true确保集群状态自动收敛;使用 App-of-Apps 模式管理多应用。
第3章 Flux CD 对比与选型
两大 GitOps 方案的差异化分析
Flux CD 架构
Flux 采用模块化设计,每个组件负责特定职责:
| 组件 | 职责 |
|---|---|
| source-controller | 管理 Git/Helm/OCI 仓库源 |
| kustomize-controller | 渲染 Kustomize 清单 |
| helm-controller | 管理 Helm Release 生命周期 |
| notification-controller | 发送告警和通知 |
| image-reflector / updater | 自动追踪和更新镜像版本 |
ArgoCD vs Flux 选型指南
| 维度 | ArgoCD | Flux |
|---|---|---|
| UI 界面 | 丰富的 Web UI | 无原生 UI(依赖 Weave GitOps) |
| 多集群 | 原生支持 | 需要额外配置 |
| 多租户 | 项目隔离 + RBAC | Namespace 隔离 |
| 镜像更新 | 需配合外部工具 | 原生 image updater |
| 社区生态 | CNCF 毕业项目 | CNCF 毕业项目 |
| 适用场景 | 需要可视化管理的团队 | 偏好 CLI 和 Git 原生的团队 |
选型建议:需要可视化管理和多集群统一视图选 ArgoCD;偏好轻量、Git 原生、镜像自动更新选 Flux。
第4章 GitOps 安全与合规
保障 GitOps 工作流的安全最佳实践
安全模型
最小权限原则
开发人员 → 提交 PR → Code Review → Merge → Git
↓
集群 ← ArgoCD 同步 ← Git Webhook 通知
- 开发人员不需要集群访问权限
- ArgoCD ServiceAccount 仅拥有目标 Namespace 的权限
- Git 仓库配置 Branch Protection 防止未授权变更
密钥管理
| 方案 | 适用场景 |
|---|---|
| Sealed Secrets | 简单场景,加密后存入 Git |
| External Secrets Operator | 对接 Vault/AWS Secrets Manager |
| SOPS + Age | 文件级加密,支持多密钥 |
| ArgoCD Vault Plugin | 直接从 Vault 读取密钥 |
合规审计
- Git 历史即审计日志:每次变更都有作者、时间、审批记录
- ArgoCD Audit Log:记录所有同步操作和手动干预
- Policy as Code:使用 OPA/Gatekeeper 在同步前验证清单合规性
核心原则:Git 是审计的起点,但不是终点。结合运行时安全监控形成完整的安全闭环。
💡 每天阅读一个章节,循序渐进掌握知识体系