2. GitOps 核心概念回顾:声明式配置、状态同步、Pull vs Push 模式、ArgoCD/Flux 简介

在深入 DNS 故障导致回滚的流水线集成案例之前,必须统一团队对 GitOps 核心概念的认知。本章将围绕四个支柱展开:声明式配置、状态同步、Pull 与 Push 模式,以及两大主流工具 ArgoCD 与 Flux 的定位差异。这些概念是后续理解“同步窗口”与“回滚触发”的基础。

2.1 声明式配置:期望状态即真理

GitOps 的第一原则是声明式配置。运维人员不再编写“如何做”的脚本(如:先执行 A 命令,再检查 B 端口),而是直接描述“系统应该长什么样”。

  • 声明式文件:Kubernetes YAML、Helm values、Kustomize overlay 等。
  • 单一事实来源:Git 仓库中存储的声明式配置是唯一的期望状态。
  • 不可变基础设施:任何环境差异都通过修改 Git 中的声明来驱动,而非手动 SSH 登录。
关键区别: 传统运维是“命令式”(如何做),GitOps 是“声明式”(要什么)。例如:命令式会说“运行 kubectl scale deployment nginx --replicas=5”,声明式则是在 Git 中把 replicas 字段改为 5,由工具自动执行。

2.2 状态同步:从 Git 到集群的闭环

状态同步是 GitOps 的核心执行机制。系统持续比较 Git 中的期望状态 与 集群中的实际状态,并自动纠正偏差。

同步阶段 描述 常见触发条件
检测偏差 工具定期或事件驱动地对比 Git 与集群资源 定时轮询、Webhook、Git 提交
生成差异 计算期望状态与实际状态的 diff 资源版本、标签、副本数变化
应用修正 执行 kubectl apply / helm upgrade 等操作 自动同步策略、手动批准
健康检查 验证应用是否达到 Running/Ready 状态 Pod 状态、Deployment 可用性
同步窗口与回滚的关系: 当 DNS 故障导致集群无法拉取镜像时,同步操作会失败。如果配置了“自动回滚”,系统会将集群状态回退到上一个已知的 Git 提交,从而触发回滚流水线。
GitOps 状态同步闭环流程 GitOps 状态同步闭环 Git 仓库 期望状态(YAML/Helm) 同步引擎 ArgoCD / Flux Kubernetes 集群 实际状态 差异检测 Diff 计算 健康检查 Pod Ready / 可用性 反馈修正 闭环:Git → 同步引擎 → 集群 → 差异检测 → 健康检查 → 反馈修正 → Git

2.3 Pull 模式 vs Push 模式

GitOps 工具与集群的交互方式分为两种模式。理解它们的区别,有助于选择适合“同步窗口”场景的架构。

特性 Pull 模式(推荐) Push 模式(传统 CI/CD)
触发方向 集群中的 Operator 主动拉取 Git 状态 CI 流水线将状态推送到集群
安全模型 集群无需暴露 API Server 给外部 需要集群凭证暴露在 CI 系统中
网络依赖 集群出站到 Git(通常更稳定) CI 系统入站到集群(易受 DNS/网络影响)
同步窗口控制 Operator 内置同步窗口、自动回滚策略 依赖 CI 流水线逻辑,实现复杂
典型工具 ArgoCD、Flux Jenkins + kubectl、GitLab CI + 直接部署
DNS 故障场景下的关键差异: 在 Push 模式下,如果 CI 系统无法解析集群域名,整个部署会直接失败且难以自动回滚。而在 Pull 模式下,Operator 在集群内部运行,即使外部 DNS 故障,Operator 仍能通过集群内部 DNS 或缓存访问 Git(如果 Git 也在集群内或使用 IP 直连),从而更可靠地执行回滚。
Pull vs Push 模式架构对比 Pull 模式 vs Push 模式架构对比 Pull 模式(ArgoCD/Flux) Git 仓库 期望状态 K8s 集群 Operator Pull 集群主动拉取 Git 状态 无需暴露 API Server 内置同步窗口与回滚 Push 模式(传统 CI/CD) CI 系统 Jenkins/GitLab CI K8s 集群 API Server Push CI 系统推送状态到集群 需要集群凭证 DNS 故障时易失败 DNS 故障场景:Pull 模式 Operator 在集群内,可依赖内部 DNS 或缓存;Push 模式 CI 系统需解析集群外部域名,故障时部署中断

2.4 ArgoCD 与 Flux 简介

ArgoCD 和 Flux 是当前最主流的两个 GitOps 工具,都采用 Pull 模式。它们在“同步窗口”和“回滚策略”的实现上各有侧重。

特性 ArgoCD Flux
架构 Controller + API Server + UI 单一 Controller(多版本演进)
同步策略 支持自动同步、手动同步、同步窗口(Sync Windows) 自动同步为主,支持 Kustomize/Helm 控制器
回滚机制 内置回滚到历史版本,支持 Prune 资源清理 通过 Git revert 或 Helm rollback 实现
健康检查 丰富的资源健康状态判断(L7 探测) 依赖 Kubernetes 原生健康检查
UI 与可观测性 Web UI 强大,支持应用拓扑图 CLI 为主,社区有第三方 UI
适用场景 多集群管理、复杂同步窗口、审批流程 轻量级、纯 Git 驱动、与 Kustomize 深度集成
本课程选择 ArgoCD 的原因: 后续的 DNS 故障回滚案例中,我们需要演示“同步窗口”配置、自动回滚触发以及 UI 上的状态可视化。ArgoCD 的 Sync Windows 功能可以直接定义“允许同步的时间段”,当 DNS 故障导致同步失败时,ArgoCD 的自动回滚策略能更直观地展示回滚流水线的集成过程。

2.5 核心概念关系图

以下关系图总结了 GitOps 四个核心概念之间的依赖与协作关系,为后续章节的流水线设计奠定理论基础。

  • 声明式配置 是 GitOps 的输入,存储在 Git 仓库中。
  • 状态同步 是 GitOps 的执行引擎,持续对比并修正偏差。
  • Pull 模式 是 GitOps 的推荐架构,由集群内的 Operator 驱动同步。
  • ArgoCD/Flux 是 GitOps 的具体实现,封装了同步、回滚、健康检查等能力。
总结: 在 DNS 故障场景下,声明式配置确保回滚目标明确(Git 历史版本),状态同步机制自动检测失败并触发回滚,Pull 模式保障回滚操作不受外部 DNS 影响,ArgoCD 提供同步窗口和回滚流水线的集成接口。这四个概念环环相扣,构成了本案例的技术骨架。