2. Argo CD 基础回顾:核心概念与架构
在深入标准模板移植适配之前,必须先牢固掌握 Argo CD 的核心概念与架构。Argo CD 本质上是一个为 Kubernetes 设计的声明式 GitOps 持续交付工具。它遵循“Git 仓库作为单一事实来源”的原则,自动将集群状态与 Git 仓库中定义的期望状态保持同步。
2.1 核心概念
Argo CD 围绕四个核心概念构建:Application、Project、Repository 和 Sync Policy。理解它们之间的关系是使用 Argo CD 的基础。
| 概念 | 定义 | 关键作用 |
|---|---|---|
| Application | 代表一个 Kubernetes 应用的完整部署单元。它定义了从哪个 Repository 拉取清单、目标集群和命名空间,以及同步策略。 | 将 Git 仓库中的配置映射到集群中的实际资源。 |
| Project | 逻辑分组和隔离单元,用于管理多个 Application。提供 RBAC 边界、资源配额和部署源限制。 | 实现多租户安全隔离和资源管控。 |
| Repository | 存储 Kubernetes 清单(YAML/JSON/Helm/Kustomize)的 Git 仓库地址及访问凭证。 | 作为声明式配置的单一事实来源。 |
| Sync Policy | 定义 Argo CD 如何将集群状态与 Git 仓库同步的策略。包括自动/手动、自愈、修剪等选项。 | 控制 GitOps 工作流的自动化程度与安全边界。 |
关键理解: Application 是“执行者”,Project 是“管理者”,Repository 是“配置源”,Sync Policy 是“工作模式”。四者缺一不可。
2.2 架构组件与工作流
Argo CD 采用 Controller + API Server + CLI/UI 的经典架构。核心组件包括:
- API Server:暴露 gRPC/REST API,处理 Application 的 CRUD、同步触发、仓库凭证管理等。所有外部交互(CLI、UI、CI/CD 系统)都通过 API Server。
- Repository Server:负责克隆 Git 仓库、生成 Kubernetes 清单(渲染 Helm Chart、处理 Kustomize overlay)。内部服务,不对外暴露。
- Application Controller:核心控制器,持续监控集群中 Application 的实时状态,并与 Repository Server 生成的期望状态对比。当检测到偏差时,根据 Sync Policy 执行同步操作。
- Redis:缓存 Repository Server 生成的清单和 Application 状态,提升性能。
- argocd CLI / Web UI:用户交互界面,用于管理 Application、查看同步状态、执行手动操作。
2.3 Sync Policy 详解
Sync Policy 是 GitOps 工作流的核心控制点。它决定了 Argo CD 在检测到配置漂移时的响应行为。
| 策略选项 | 值 | 行为描述 | 适用场景 |
|---|---|---|---|
| 自动同步 | true / false | 启用后,Argo CD 会自动将集群状态同步到 Git 仓库中的期望状态,无需手动触发。 | 开发环境、需要快速收敛的 CI/CD 流水线。 |
| 自愈 | true / false | 启用后,即使集群状态被外部工具(如 kubectl)手动修改,Argo CD 也会自动将其恢复。 | 生产环境,确保集群状态始终与 Git 一致。 |
| 修剪资源 | true / false | 启用后,如果 Git 仓库中删除了某个资源定义,Argo CD 会自动删除集群中对应的资源。 | 需要严格清理废弃资源的场景。 |
| 同步窗口 | 时间范围 | 限制自动同步只能在指定的时间窗口内执行,避免在业务高峰期触发变更。 | 生产环境变更管控。 |
生产环境建议: 对于生产集群,建议启用 自愈 和 修剪,但将 自动同步 设置为
false,改为通过 CI/CD 流水线或手动审批后触发同步,以增加变更控制的安全层。
2.4 Application 定义示例
一个典型的 Argo CD Application 定义如下,它清晰地表达了核心概念之间的关系:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default # 关联到 Project
source:
repoURL: https://github.com/org/repo.git # 关联到 Repository
targetRevision: HEAD
path: k8s-manifests
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
在这个示例中:
- project 字段将 Application 绑定到
defaultProject,继承其 RBAC 和资源配额。 - source 字段指向 Git 仓库中的具体路径,定义了期望状态的来源。
- syncPolicy 字段启用了自动修剪和自愈,确保集群状态与 Git 仓库严格一致。
移植适配启示: 标准模板移植到 Argo CD 时,核心工作就是正确填充 Application 的
source 和 syncPolicy 字段,并确保 Project 的权限和资源限制与模板的预期行为匹配。