2. Argo CD 核心概念深度解析

在深入 Argo CD 驱动 CRI 接口进行集群节点扩容状态同步之前,必须透彻理解 Argo CD 的五大核心概念:Application、Project、Repository、Sync Policy 与 Health Status。这五个概念构成了 Argo CD 声明式 GitOps 工作流的基础骨架,也是后续实战中配置扩容策略、监控节点状态、处理同步异常的必备知识。

2.1 核心概念关系总览

下图展示了 Argo CD 五大核心概念之间的层级与依赖关系。理解这张图,就能把握 Argo CD 的整体运作逻辑。

Argo CD 核心概念关系图 Repository Git 仓库(配置源) Project 逻辑分组与权限边界 Application 部署单元实例 Sync Policy 同步策略配置 Health Status 健康状态评估 说明:Repository 提供配置 → Project 定义权限边界 → Application 实例化部署 → Sync Policy 控制同步行为 → Health Status 反馈运行状态

2.2 Application:部署单元实例

Application 是 Argo CD 中最核心的实体,代表一个完整的部署单元。它定义了“从哪个仓库、哪个路径拉取配置”、“部署到哪个目标集群和命名空间”以及“如何同步”。

关键字段说明:

  • source:指定 Repository URL、目标分支(targetRevision)和路径(path)。
  • destination:指定目标 Kubernetes 集群(server URL 或 name)和命名空间(namespace)。
  • syncPolicy:定义自动/手动同步策略及 Prune、SelfHeal 等行为。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: node-scaler
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://gitlab.example.com/infra/node-scaler.git
    targetRevision: main
    path: manifests
  destination:
    server: https://kubernetes.default.svc
    namespace: node-system
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

2.3 Project:逻辑分组与权限边界

Project 是 Argo CD 中用于隔离和管理多个 Application 的逻辑单元。它定义了哪些 Repository 可以被访问、哪些目标集群和命名空间可以被部署,以及资源配额和权限控制。

Project 属性 作用说明 典型配置示例
sourceRepos 允许引用的 Git 仓库列表 https://gitlab.example.com/infra/*
destinations 允许部署的目标集群与命名空间 server: https://k8s-prod.example.com, namespace: prod-*
clusterResourceWhitelist 允许创建的集群级别资源类型 Namespace, ClusterRole
roles RBAC 角色定义,控制用户/组的操作权限 role: admin, policies: get, sync, update

实战建议:在集群节点扩容场景中,建议为每个环境(开发、预发、生产)创建独立的 Project,并在 Project 级别限制目标集群和命名空间,防止误操作影响生产环境。

2.4 Repository:配置源管理

Repository 是 Argo CD 连接 Git 仓库的配置实体。它存储了仓库的 URL、认证信息(SSH 密钥、 或用户名密码)以及连接状态。

Argo CD 支持两种 Repository 注册方式:

  • 通过 CLI 或 UI 手动添加:使用 argocd repo add 命令或 Web 界面添加。
  • 通过 Application 自动发现:当 Application 引用未注册的 Repository 时,Argo CD 会自动尝试连接并注册。
# 通过 CLI 添加私有 Git 仓库
argocd repo add https://gitlab.example.com/infra/node-scaler.git \
  --ssh-private-key-path ~/.ssh/argocd_rsa \
  --name node-scaler-repo

2.5 Sync Policy:同步策略深度解析

Sync Policy 决定了 Argo CD 如何将 Git 仓库中的期望状态同步到目标 Kubernetes 集群。它分为 手动同步 和 自动同步 两种模式,自动同步模式下可配置以下关键行为:

策略参数 默认值 说明 扩容场景建议
prune false 是否自动删除集群中 Git 仓库已移除的资源 建议开启,避免扩容后残留旧资源
selfHeal false 是否自动修复集群中被手动修改的资源 建议开启,确保节点状态始终与 Git 一致
allowEmpty false 是否允许同步空的资源清单 按需配置,扩容期间建议关闭
syncOptions — 额外同步选项,如 Validate=false, PrunePropagationPolicy=foreground 扩容时建议设置 PrunePropagationPolicy=background

注意:在集群节点扩容场景中,如果同时开启 prune 和 selfHeal,务必确保 Git 仓库中的配置是完整且正确的。否则,Argo CD 可能会自动删除正在扩容的节点资源,导致服务中断。

2.6 Health Status:健康状态评估体系

Health Status 是 Argo CD 对 Application 及其管理的 Kubernetes 资源运行状况的实时评估。它通过内置的 健康检查钩子(Health Check Hooks) 分析资源的状态字段,输出标准化的健康等级。

Argo CD 定义了以下健康状态等级:

状态等级 颜色标识 含义 扩容场景示例
Healthy 绿色 资源运行正常,符合期望状态 节点扩容完成,所有 Pod 正常运行
Progressing 蓝色 资源正在变更中,尚未达到期望状态 节点正在启动,Pod 处于 Pending 状态
Degraded 红色 资源运行异常,部分功能不可用 节点扩容后部分 Pod 崩溃回退
Suspended 灰色 资源被暂停或挂起 节点扩容被手动暂停
Missing 橙色 资源在集群中不存在 节点尚未创建或已被删除
Unknown 灰色 无法获取资源状态 集群 API 不可达

Argo CD 的健康检查机制支持 自定义健康检查,通过 resource.customizations 配置可以覆盖或扩展特定资源类型的健康判断逻辑。在 CRI 接口驱动的节点扩容场景中,自定义健康检查尤为重要——例如,可以编写 Lua 脚本检查节点注册状态或容器运行时就绪情况。

# 自定义健康检查示例:检查 CRI 节点是否就绪
resource.customizations: |
  Node:
    health.lua: |
      hs = {}
      if obj.status.conditions then
        for i, condition in ipairs(obj.status.conditions) do
          if condition.type == "Ready" and condition.status == "True" then
            hs.status = "Healthy"
            hs.message = "Node is ready"
            return hs
          end
        end
      end
      hs.status = "Progressing"
      hs.message = "Node is not ready yet"
      return hs

2.7 核心概念对比总结

下表从 职责、配置位置、生命周期 和 扩容关联 四个维度对比五大核心概念,帮助快速建立知识体系。

概念 职责 配置位置 生命周期 扩容关联
Application 部署单元实例 Kubernetes CR(argocd 命名空间) 创建/更新/删除 直接管理扩容资源清单
Project 逻辑分组与权限边界 Kubernetes CR(argocd 命名空间) 创建/更新/删除 控制扩容目标集群范围
Repository 配置源管理 Argo CD 内部存储 / Secret 添加/更新/移除 提供扩容配置的 Git 源
Sync Policy 同步行为控制 Application 的 spec.syncPolicy 随 Application 变更 决定扩容同步的自动化程度
Health Status 健康状态评估 Application 状态字段 实时计算 反馈节点扩容是否成功

学习路径建议:在后续章节中,我们将基于这五大核心概念,构建一个完整的 CRI 接口节点扩容状态同步流水线。建议先通过 argocd app create 命令亲手创建一个 Application,观察其自动生成的 Project 和 Repository 关系,再逐步调整 Sync Policy 和 Health Status 配置,加深理解。