4. Argo CD 核心概念:Application、Project、Repository、Sync Policy、Health Status
Argo CD 作为声明式 GitOps 引擎,其核心模型围绕五个关键概念构建。理解这些概念是掌握发布自助门户集成的基础。本章将逐一拆解每个概念的定义、职责及相互关系。
4.1 核心概念关系总览
下图展示了 Argo CD 中五个核心概念的逻辑关系与数据流向。Application 是中心实体,它从 Repository 读取期望状态,通过 Sync Policy 控制同步行为,由 Health Status 评估运行状态,并归属于特定的 Project 进行权限隔离。
4.2 Application(应用实例)
Application 是 Argo CD 中最核心的资源对象,代表一个被管理的应用实例。它定义了从哪个仓库、哪个路径、同步到哪个目标集群和命名空间。
关键字段说明:
- source:指定 Git 仓库 URL、目标分支(targetRevision)和清单文件路径(path)。
- destination:指定目标 Kubernetes 集群(server URL 或 name)和命名空间(namespace)。
- syncPolicy:定义自动同步、自动修剪、自愈等行为。
一个典型的 Application YAML 示例如下:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: guestbook
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
4.3 Project(项目/租户)
Project 是 Argo CD 中的逻辑分组和权限隔离单元。它用于管理多个 Application 的访问控制、资源配额和部署约束。
| 功能维度 | 说明 | 典型配置 |
|---|---|---|
| 权限控制 | 限制哪些用户/角色可以操作该 Project 下的 Application | RBAC 策略绑定 |
| 源仓库白名单 | 只允许从指定的 Git 仓库拉取清单 | sourceRepos 列表 |
| 目标集群白名单 | 只允许部署到指定的目标集群 | destinations 列表 |
| 资源配额 | 限制该 Project 下所有 Application 可使用的集群资源上限 | namespaceResourceQuota |
最佳实践:在自助门户中,每个业务线或团队应映射为一个独立的 Project,实现租户级别的隔离。默认的 default Project 通常只用于测试或系统组件。
4.4 Repository(Git 仓库)
Repository 是 Argo CD 连接 Git 仓库的凭证与配置对象。它存储了访问私有仓库所需的 SSH 密钥、HTTPS 用户名密码或 。
Repository 的配置方式有两种:
- 通过 Argo CD CLI 或 UI 添加:交互式输入仓库 URL 和凭证。
- 通过 Repository CRD 声明式管理:直接创建
Secret资源,Argo CD 会自动发现。
Repository 配置示例(Secret 方式):
apiVersion: v1
kind: Secret
metadata:
name: repo-github
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repository
stringData:
type: git
url: https://github.com/myorg/private-repo.git
username: my-git-user
password: my-git-
4.5 Sync Policy(同步策略)
Sync Policy 定义了 Argo CD 如何将 Git 仓库中的期望状态同步到目标集群。它决定了同步的自动化程度和行为模式。
同步策略分为两大模式:
| 策略模式 | 子选项 | 行为描述 |
|---|---|---|
| 自动同步 | prune: true |
自动删除集群中 Git 仓库已移除的资源 |
selfHeal: true |
自动修复集群中与 Git 状态不一致的手动变更 | |
allowEmpty: true |
允许同步空的清单目录(用于清理场景) | |
| 手动同步 | — | 需要人工在 UI 或 CLI 触发同步操作 |
注意:在生产环境中启用 selfHeal 时,务必确保团队已建立严格的 Git 审批流程。否则,自愈机制可能覆盖紧急热修复的手动变更,导致服务中断。
4.6 Health Status(健康状态)
Health Status 是 Argo CD 对已部署应用运行状况的评估结果。它通过内置的 健康检查钩子(Health Checks) 分析 Kubernetes 资源的状态,判断应用是否正常运行。
常见的健康状态枚举值:
- Healthy:应用运行正常,所有资源均处于预期状态。
- Progressing:应用正在部署或更新中,等待资源就绪。
- Degraded:应用部分或全部功能异常,需要人工介入。
- Suspended:应用被暂停或挂起(如 HPA 缩容至 0)。
- Missing:目标集群中未找到 Application 定义的资源。
- Unknown:无法获取健康状态,通常因网络或权限问题。
健康状态与同步状态(Synced/OutOfSync)是独立的两个维度,共同构成 Application 的完整运行视图:
| 同步状态 | 健康状态 | 含义 | 建议操作 |
|---|---|---|---|
| Synced | Healthy | 集群与 Git 一致,且运行正常 | 无需操作 |
| Synced | Degraded | 集群与 Git 一致,但应用异常 | 检查 Pod 日志、事件 |
| OutOfSync | Healthy | 集群与 Git 不一致,但当前运行正常 | 触发同步或排查手动变更 |
| OutOfSync | Degraded | 集群与 Git 不一致,且应用异常 | 优先同步,再排查健康问题 |
4.7 概念总结与自助门户映射
在自助门户的 GitOps 集成中,这五个概念对应着不同的用户操作界面:
- Repository:用户在门户中绑定 Git 仓库凭证。
- Project:管理员创建团队租户,配置权限和约束。
- Application:开发者通过表单或模板创建应用实例,选择仓库、路径和目标集群。
- Sync Policy:用户选择自动或手动同步模式,配置修剪和自愈开关。
- Health Status:门户仪表盘实时展示应用的同步状态和健康状态,支持一键回滚。
核心要点:Application 是连接其他四个概念的枢纽。Repository 提供输入,Sync Policy 控制过程,Health Status 反馈结果,Project 提供边界。掌握这五个概念,就掌握了 Argo CD 的完整工作模型。