1. GitOps 基础概念

1.1 GitOps 定义

GitOps 是一种以 Git 仓库作为单一事实来源(Single Source of Truth)的运维与交付模式。它将声明式基础设施与版本控制工作流相结合,通过自动化机制确保集群的实际状态始终与 Git 仓库中定义的期望状态保持一致。在 Kubernetes 生态中,GitOps 已成为管理复杂集群配置与持续交付的事实标准。

核心思想: 一切皆声明,一切皆入 Git,一切皆自动化。

1.2 核心原则

GitOps 建立在三条不可动摇的支柱之上,三者缺一不可:

原则 说明 关键要求
声明式(Declarative) 系统期望状态由配置文件完整描述,而非通过命令式指令逐步构建 所有资源(Deployment、Service、ConfigMap 等)必须使用 YAML/JSON 定义
版本控制(Version Controlled) 所有声明式配置存储在 Git 仓库中,每次变更产生可追溯的提交记录 分支策略、PR 审查、标签与回滚机制
自动化(Automated) 通过 Operator 或 Agent 自动将集群状态同步至 Git 中定义的期望状态 持续检测偏差、自动应用变更、失败告警
实践提示: 声明式配置是 GitOps 的基石。如果团队仍在使用 kubectl run 或 kubectl edit 直接修改集群,则尚未进入 GitOps 模式。

1.3 GitOps 与传统 CI/CD 的区别

传统 CI/CD 流水线以“构建-测试-部署”的推送模式为主,而 GitOps 采用“拉取模式”与“持续协调”机制。以下对比表清晰展示了两者的核心差异:

维度 传统 CI/CD GitOps
部署触发方式 CI 流水线完成后主动推送至目标环境 Git 仓库变更触发 Operator 从仓库拉取期望状态
状态管理 部署工具维护状态,易出现配置漂移 Git 仓库作为唯一事实来源,持续协调消除漂移
回滚策略 重新运行旧版本流水线或手动恢复 git revert 提交即可触发自动回滚
权限模型 CI 系统持有集群凭证,风险集中 Operator 持有最小权限,变更需通过 Git PR 审查
环境一致性 依赖流水线脚本,不同环境可能产生差异 所有环境使用同一套声明式配置,差异仅通过 Overlay 管理
故障恢复 需要人工介入排查并修复 Operator 自动检测偏差并尝试恢复至期望状态

1.4 GitOps 工作流架构

下图展示了 GitOps 的核心工作流:开发人员通过 Pull Request 修改 Git 仓库中的声明式配置,GitOps Operator(如 Argo CD 或 Flux)持续监控仓库变更,并将期望状态同步至 Kubernetes 集群。

GitOps 核心工作流架构 GitOps 核心工作流架构 开发者 提交 / PR Git 仓库 单一事实来源 git push GitOps Operator Argo CD / Flux 持续监控 / 拉取 Kubernetes 集群 同步 / 协调 状态反馈 / 偏差检测 关键流程: 1. 开发者修改 Git 配置 2. Operator 自动检测变更 3. 集群状态被协调至期望状态

1.5 GitOps 与传统 CI/CD 流水线对比图

以下图示从流水线结构角度对比两种模式:传统 CI/CD 采用“构建 → 测试 → 部署”的线性推送链,而 GitOps 将部署阶段解耦为 Git 提交与 Operator 协调两个独立环节。

传统 CI/CD 与 GitOps 流水线对比 传统 CI/CD 与 GitOps 流水线对比 传统 CI/CD(推送模式) 代码提交 CI 构建 + 测试 推送部署 目标环境 CI 系统持有集群凭证,直接推送变更 GitOps(拉取模式) 代码提交 CI 构建 + 测试 Git 仓库 (期望状态) GitOps Operator 目标环境 Operator 从 Git 拉取期望状态,持续协调集群 核心差异: 传统模式将部署视为 CI 流水线的终点;GitOps 将部署拆分为“配置入 Git”和“Operator 协调”两个独立阶段,实现更安全的变更管理。

1.6 为什么 GitOps 适合 K8s 调度优化

GitOps 与 Kubernetes 的结合为调度优化提供了天然的基础设施:

  • 声明式调度策略: 节点亲和性、Pod 拓扑分布约束、资源配额等调度配置全部以声明式方式纳入 Git 管理,避免配置漂移。
  • 可追溯的调度变更: 每次调度策略调整都对应一次 Git 提交,便于审计与回滚。
  • 自动化同步窗口: 通过 GitOps Operator 的同步策略,可以精确控制调度变更的生效时间窗口,避免在业务高峰期触发大规模 Pod 重调度。
  • 多集群一致性: 同一套调度配置可以跨集群复用,通过 GitOps 确保多集群调度行为一致。