2. Argo CD 基础回顾:架构、核心组件与工作流程
在深入同步窗口治理之前,必须牢固掌握 Argo CD 的底层架构与核心组件。同步窗口本质上是对 Application Controller 行为的定时约束,理解组件间的数据流是配置正确策略的前提。
2.1 整体架构概览
Argo CD 采用 控制循环(Reconciliation Loop) 模式,由三个核心组件协作完成从 Git 仓库到 Kubernetes 集群的状态同步。下图展示了组件间的通信关系与数据流向:
架构要点:同步窗口只约束 Application Controller 的同步行为,不影响 Repo Server 的清单拉取和 API Server 的查询操作。这意味着在窗口关闭期间,用户仍可通过 UI 查看应用状态差异,但无法触发同步。
2.2 核心组件详解
三个组件各司其职,形成完整的 GitOps 闭环:
| 组件 | 职责 | 关键行为 | 与同步窗口的关系 |
|---|---|---|---|
| API Server | 暴露 REST/gRPC 接口,处理认证、RBAC、Web UI 和 CLI 请求 | 接收同步请求、存储 Application CRD、暴露指标 | 窗口关闭时拒绝手动同步请求(返回 403) |
| Repo Server | 克隆 Git 仓库,生成最终 Kubernetes 清单(Helm/Kustomize 渲染) | 缓存仓库内容、生成清单、返回给 API Server | 不受窗口影响,始终可拉取最新清单 |
| Application Controller | 核心控制循环,比较期望状态与实际状态,执行同步操作 | 定期轮询、自动同步、健康检查、Prune 资源 | 同步窗口直接作用对象,窗口关闭时跳过自动同步 |
2.3 工作流程:从 Git 提交到集群同步
一个完整的同步周期包含以下步骤,同步窗口在 第 5 步 介入:
- 提交触发: 开发者向 Git 仓库推送应用清单变更。
- Repo Server 拉取: 检测到仓库变更(通过 Webhook 或轮询),克隆仓库并生成最终 Kubernetes 清单。
- API Server 存储: 将生成的清单与 Application CRD 关联,存入缓存。
- Application Controller 轮询: 每 3 分钟(默认)检查所有 Application 的期望状态与实际状态差异。
- 同步窗口检查: 若检测到状态漂移,Controller 检查当前时间是否在允许的同步窗口内。
- 窗口内: 执行同步操作(Apply / Prune)。
- 窗口外: 跳过同步,标记应用为
OutOfSync,等待下一个窗口。
- 同步执行: 调用目标集群 API,应用期望状态,删除多余资源(Prune)。
- 健康检查: 监控资源状态,更新 Application 健康状态(Healthy / Degraded / Progressing)。
2.4 关键概念:期望状态 vs 实际状态
Argo CD 的核心价值在于持续保证两个状态一致,同步窗口则是在此基础上增加时间维度的控制:
| 状态类型 | 来源 | 更新方式 | 窗口影响 |
|---|---|---|---|
| 期望状态(Desired State) | Git 仓库中的应用清单 | Repo Server 持续拉取并缓存 | 不受窗口影响,始终更新 |
| 实际状态(Actual State) | 目标 Kubernetes 集群实时资源 | Application Controller 轮询 K8s API | 不受窗口影响,始终可读 |
| 同步操作(Sync) | Controller 执行 Apply/Prune | 将期望状态写入集群 | 受窗口严格约束 |
实践要点:即使同步窗口关闭,Argo CD 仍然会持续比较状态并更新
OutOfSync 标记。运维人员可以通过 argocd app get <app> 随时查看差异,只是无法执行同步。这种设计保证了 可见性不中断,变更执行受控。
2.5 组件通信协议与端口
理解组件间的通信方式有助于排查同步窗口相关的网络问题:
- API Server → Repo Server: 内部 gRPC 调用(端口 8081),请求清单生成结果。
- Repo Server → Git 仓库: HTTPS/SSH(端口 443/22),拉取仓库内容。
- Application Controller → K8s API: HTTPS(端口 6443),执行同步和状态查询。
- Application Controller → API Server: 通过 Kubernetes 事件机制获取 Application CRD 变更通知。
注意:如果 Argo CD 部署在受限网络环境,确保 Repo Server 能够访问 Git 仓库,Application Controller 能够访问目标集群 API Server。同步窗口本身不涉及网络策略变更,但窗口关闭期间自动同步被跳过,可能掩盖网络连通性问题。