2. Argo CD 核心概念回顾:Application、Project、Repository、Sync Policy、Health Status

在深入自助目录可靠性评审之前,必须统一团队对 Argo CD 核心概念的理解。本章将围绕五个关键抽象——Application、Project、Repository、Sync Policy 和 Health Status——展开,为后续的评审规则与自动化策略奠定基础。

2.1 核心概念关系总览

下图展示了 Argo CD 中五个核心概念之间的逻辑关系与数据流向:

Argo CD 核心概念关系图 Repository Git 仓库(配置源) Project 逻辑分组与权限边界 Application 部署单元实例 Sync Policy 同步策略配置 Health Status 健康状态评估 说明 Repository → Project → Application Application 关联 Sync Policy 与 Health Status

2.2 Application(应用)

Application 是 Argo CD 中最核心的部署单元,它定义了一个 Kubernetes 资源集合的期望状态。每个 Application 包含以下关键字段:

字段 说明 示例值
source 配置来源(仓库、路径、Helm values 等) https://github.com/team-a/gitops-config
destination 目标集群与命名空间 server: https://k8s-prod.example.com
namespace: prod
project 所属 Project 名称 platform-team
syncPolicy 自动同步、自愈、Prune 等策略 automated: { prune: true, selfHeal: true }
评审要点:在自助目录场景中,Application 的 source 路径必须遵循目录规范,destination 命名空间必须与 Project 的 RBAC 约束一致。

2.3 Project(项目)

Project 是 Argo CD 中的逻辑分组与安全边界。它控制哪些用户可以访问哪些 Application、哪些目标集群和命名空间可用、以及允许从哪些仓库拉取配置。

Project 的核心配置项:

  • sourceRepos:允许引用的 Git 仓库列表(白名单)
  • destinations:允许部署的目标集群与命名空间
  • roles:RBAC 角色与权限绑定
  • orphanedResources:是否监控并告警孤儿资源
  • namespaceResourceBlacklist/Whitelist:资源类型过滤
最佳实践:每个团队或产品线应使用独立的 Project,并在 Project 级别锁定 sourceRepos 和 destinations,防止跨边界部署。

2.4 Repository(仓库)

Repository 是 Argo CD 连接 Git 仓库的凭证与配置对象。它支持公开仓库和私有仓库(通过 SSH 密钥、HTTPS 用户名密码或 GitHub App 认证)。

Repository 的常见配置方式:

apiVersion: v1
kind: Secret
metadata:
  name: repo-github-team-a
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/team-a/gitops-config
  username: gitops-bot
  password: <personal-access->
安全提醒:Repository 凭证存储在 Kubernetes Secret 中,务必启用 Argo CD 的 secret management 集成(如 Sealed Secrets、External Secrets Operator),避免明文暴露。

2.5 Sync Policy(同步策略)

Sync Policy 决定了 Argo CD 如何将 Git 中的期望状态同步到目标集群。它分为两个层级:

策略类型 子选项 说明 评审关注点
Automated Sync prune: true/false 是否删除集群中 Git 中不存在的资源 生产环境建议开启,但需配合 Prune Last 或 PreSync 钩子
selfHeal: true/false 是否自动修复集群中的手动变更 开启后防止配置漂移,但需配合变更审批流程
allowEmpty: true/false 是否允许同步空资源集 通常设为 false,避免误删除
Manual Sync — 仅通过手动触发同步 适用于变更审批严格的环境
Sync Options Validate, Prune Last, Apply Out of Sync Only 细粒度控制同步行为 评审时需检查是否启用了 Prune Last 避免先删后建
评审规则示例:在自助目录可靠性评审中,要求所有生产环境 Application 必须开启 automated.sync 且 prune: true,同时必须配置 syncOptions: [PruneLast=true]。

2.6 Health Status(健康状态)

Argo CD 通过内置的健康检查机制评估每个资源及整个 Application 的运行状态。健康状态分为以下等级:

  • Healthy:资源运行正常,符合预期
  • Progressing:正在部署或更新中
  • Degraded:部分资源异常,但未完全崩溃
  • Suspended:资源被暂停(如 HPA 缩容到 0)
  • Missing:资源在集群中不存在
  • Unknown:无法获取健康信息

Argo CD 为 Kubernetes 内置资源(Deployment、Service、Ingress 等)提供了默认的健康检查逻辑,同时也支持通过 Lua 脚本自定义健康检查。

# 自定义健康检查示例:检查 Deployment 的可用副本数
health.lua = |
  hs = {}
  if obj.status.availableReplicas < obj.spec.replicas then
    hs.status = "Degraded"
    hs.message = "Available replicas less than desired"
  else
    hs.status = "Healthy"
  end
  return hs
评审价值:健康状态是自助目录可靠性评审的核心数据源。通过聚合所有 Application 的健康状态,可以快速识别异常部署、配置漂移和版本回退事件。

2.7 概念对比速查表

概念 作用域 生命周期 评审关注点
Application 单个部署单元 创建/同步/删除 源路径、目标命名空间、同步策略合规性
Project 多 Application 分组 创建/更新/删除 仓库白名单、目标集群限制、RBAC 配置
Repository 全局或 Project 级 添加/更新/移除 认证方式、URL 合法性、访问权限
Sync Policy Application 级 随 Application 变更 自动同步开关、Prune 策略、自愈策略
Health Status Application 级 实时评估 健康检查覆盖率、自定义检查脚本质量