1. GitOps 核心概念回顾:声明式配置、状态同步、Git 作为单一事实来源
GitOps 是一种以 Git 仓库作为系统状态唯一权威来源的运维模式。它通过声明式配置和自动化同步机制,将集群的期望状态与实际运行状态对齐。理解这三个核心概念是掌握后续排障与优化技巧的基础。
1.1 声明式配置:描述“要什么”,而非“怎么做”
声明式配置的核心在于:你只需在 Git 中定义集群的期望状态(Desired State),而不需要编写具体的执行步骤。ArgoCD 等 GitOps 工具会自动将集群的实际状态向期望状态收敛。
| 对比维度 | 声明式配置 | 命令式配置 |
|---|---|---|
| 定义方式 | YAML/JSON 描述最终状态 | CLI 命令描述操作步骤 |
| 幂等性 | 天然幂等,重复应用结果一致 | 非幂等,重复执行可能产生副作用 |
| 可审计性 | 所有变更记录在 Git 历史中 | 依赖操作日志,难以追溯 |
| 回滚方式 | Git revert 后自动同步 | 手动执行反向操作 |
排障要点: 当集群出现状态漂移时,首先检查 Git 仓库中的声明式配置是否被意外修改。ArgoCD 的
Diff 功能可以直观对比期望状态与实际状态的差异。
1.2 Git 作为单一事实来源:集群的“源代码”
在 GitOps 模型中,Git 仓库不仅是代码存储库,更是整个集群的单一事实来源(Single Source of Truth)。所有对集群的变更——包括部署、配置、策略——都必须通过 Pull Request 合并到 Git 仓库,再由同步机制应用到集群。
- 不可变历史: Git 的 commit 历史提供了完整的变更审计链。
- 分支策略: 通过分支管理环境差异(如
main对应生产,staging对应预发)。 - 协作基础: 团队成员通过 Code Review 确保变更质量。
- 灾难恢复: 集群完全损坏时,可从 Git 仓库重建所有资源。
常见陷阱: 不要通过
kubectl apply 或 ArgoCD UI 直接修改集群资源。这种“旁路操作”会导致 Git 仓库与集群状态不一致,破坏单一事实来源原则。
1.3 状态同步:从期望状态到实际状态
状态同步是 GitOps 的核心执行机制。ArgoCD 作为同步引擎,持续对比 Git 仓库中的期望状态与集群中的实际状态,并在检测到差异时触发同步操作。
1.4 同步模式与策略对比
ArgoCD 支持多种同步模式,不同模式在自动化程度和风险控制上各有侧重。在生产环境中,通常需要根据业务场景选择合适的同步策略。
| 同步模式 | 触发方式 | 自动回滚 | 适用场景 |
|---|---|---|---|
| 自动同步 | Git 变更后自动触发 | 支持(可配置 Prune) | 开发/测试环境,变更频繁且风险可控 |
| 手动同步 | 人工在 UI/CLI 触发 | 需手动操作 | 生产环境,需要审批和变更窗口 |
| 定时同步 | Cron 表达式定时执行 | 需手动操作 | 非高峰时段批量更新,降低影响面 |
| 同步窗口 | 仅在指定时间窗口内自动同步 | 窗口内自动回滚 | 生产环境,限制变更时间范围 |
实战建议: 生产环境推荐使用“手动同步 + 同步窗口”组合。在窗口外发生的 Git 变更会被 ArgoCD 检测到(OutOfSync),但不会自动应用,直到下一个窗口开启。这为排障和审批留出了缓冲时间。
1.5 核心概念关系图
以下 SVG 图展示了 GitOps 三个核心概念之间的依赖与协作关系,帮助理解它们在集群排障中的定位。
1.6 排障视角下的核心概念检查清单
当集群出现异常时,可以按照以下清单快速定位问题根因:
- 检查 Git 仓库状态: 确认期望配置是否被意外修改或删除。
- 检查 ArgoCD 同步状态: 查看
Application的Sync Status和Health Status。 - 检查同步窗口配置: 确认当前时间是否在允许的同步窗口内。
- 检查权限与网络: 确保 ArgoCD 可以正常访问 Git 仓库和 Kubernetes API。
- 检查资源冲突: 确认是否有其他控制器(如 Helm Operator)修改了同一资源。
核心原则: 任何集群异常,第一步永远是“对比 Git 仓库中的期望状态与集群中的实际状态”。ArgoCD 的
argocd app diff 命令是排障利器。