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、查看同步状态、执行手动操作。
Argo CD 核心架构与工作流 用户 / CI 系统 Git 仓库 API Server Repo Server App Controller Redis 缓存 Kubernetes 集群(目标状态) 工作流说明: 1. 用户/CI 通过 API Server 创建/更新 Application。 2. Repo Server 从 Git 仓库拉取配置并渲染为 Kubernetes 清单,存入 Redis 缓存。 3. App Controller 对比 Redis 中的期望状态与集群实时状态,按 Sync Policy 执行同步。

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 绑定到 default Project,继承其 RBAC 和资源配额。
  • source 字段指向 Git 仓库中的具体路径,定义了期望状态的来源。
  • syncPolicy 字段启用了自动修剪和自愈,确保集群状态与 Git 仓库严格一致。
移植适配启示: 标准模板移植到 Argo CD 时,核心工作就是正确填充 Application 的 source 和 syncPolicy 字段,并确保 Project 的权限和资源限制与模板的预期行为匹配。