2. Argo CD 核心概念回顾:Application、Project、Repository、Sync Policy、Health Status
在深入自助目录可靠性评审之前,必须统一团队对 Argo CD 核心概念的理解。本章将围绕五个关键抽象——Application、Project、Repository、Sync Policy 和 Health Status——展开,为后续的评审规则与自动化策略奠定基础。
2.1 核心概念关系总览
下图展示了 Argo CD 中五个核心概念之间的逻辑关系与数据流向:
2.2 Application(应用)
Application 是 Argo CD 中最核心的部署单元,它定义了一个 Kubernetes 资源集合的期望状态。每个 Application 包含以下关键字段:
| 字段 | 说明 | 示例值 |
|---|---|---|
source |
配置来源(仓库、路径、Helm values 等) | https://github.com/team-a/gitops-config |
destination |
目标集群与命名空间 | server: https://k8s-prod.example.comnamespace: 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 级 | 实时评估 | 健康检查覆盖率、自定义检查脚本质量 |