2. Argo CD 核心概念深度解析
在深入 Argo CD 驱动 CRI 接口进行集群节点扩容状态同步之前,必须透彻理解 Argo CD 的五大核心概念:Application、Project、Repository、Sync Policy 与 Health Status。这五个概念构成了 Argo CD 声明式 GitOps 工作流的基础骨架,也是后续实战中配置扩容策略、监控节点状态、处理同步异常的必备知识。
2.1 核心概念关系总览
下图展示了 Argo CD 五大核心概念之间的层级与依赖关系。理解这张图,就能把握 Argo CD 的整体运作逻辑。
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 配置,加深理解。