3. 多集群架构基础:Hub Cluster 与 Managed Cluster 模型、Argo CD 多集群注册方式

在开始检测 Deployment 版本漂移之前,必须先理解 Argo CD 的多集群管理模型。Argo CD 采用 Hub-Spoke(中心-辐射) 架构,其中 Hub Cluster 作为控制平面,负责管理一个或多个 Managed Cluster。这种架构将控制逻辑与工作负载分离,是版本漂移检测的基础设施前提。

3.1 Hub Cluster 与 Managed Cluster 模型

角色 职责 关键特征
Hub Cluster 运行 Argo CD 控制平面组件(API Server、Repo Server、Application Controller、Redis) 存储 Application/AppProject CRD、管理 Git 仓库连接、维护集群注册信息、执行同步策略
Managed Cluster 运行实际工作负载(Deployment、Service、ConfigMap 等) 不运行 Argo CD 控制平面;仅暴露 Kubernetes API Server 供 Hub 访问;通过 kubeconfig 或 Service Account 注册
核心原则: Hub Cluster 不直接部署业务应用,而是作为“大脑”集中管理所有集群的期望状态。Managed Cluster 只负责执行,不参与决策。这种分离使得版本漂移检测可以在 Hub 侧统一进行,无需在每个集群上安装额外代理。
Hub-Spoke 多集群架构图 Hub Cluster(控制平面) Argo CD API Server Repo Server Application Controller Redis(缓存/状态) 集群注册表(Secrets) 存储所有 Managed Cluster 凭证 Managed Cluster 1 Deployment A v1.0 Deployment B v2.1 Managed Cluster 2 Deployment A v1.0 Deployment B v2.0 Managed Cluster 3 Deployment A v1.1 Deployment B v2.1 Managed Cluster 4 Deployment A v1.0 Deployment B v2.1 ⚠ Deployment A 在 Cluster 3 出现 v1.1 漂移;Deployment B 在 Cluster 2 出现 v2.0 漂移

3.2 Argo CD 多集群注册方式

Argo CD 支持两种方式将 Managed Cluster 注册到 Hub Cluster:kubeconfig 注入 和 Service Account 自动创建。两种方式最终都会在 Hub Cluster 的 argocd 命名空间下生成一个 Secret,其中包含访问 Managed Cluster 所需的凭证。

3.2.1 方式一:kubeconfig 注入

管理员手动提供 Managed Cluster 的 kubeconfig 文件,Argo CD 直接使用该文件中的 server 地址和 certificate-authority-data 建立连接。适用于已有 kubeconfig 的场景,例如从云厂商直接下载的集群凭证。

# 使用 argocd CLI 注册集群(kubeconfig 方式)
argocd cluster add <context-name> \
  --name my-production-cluster \
  --kubeconfig /path/to/kubeconfig \
  --namespace argocd
适用场景: 管理员已有现成 kubeconfig;集群不在同一 VPC 或需要自定义证书;需要保留集群原有的 RBAC 配置。

3.2.2 方式二:Service Account 自动创建

Argo CD 通过 argocd cluster add 命令(不带 --kubeconfig 参数)自动在目标集群中创建 Service Account、ClusterRole 和 ClusterRoleBinding,然后将 Service Account 的 和 CA 证书存储到 Hub Cluster 的 Secret 中。这是最推荐的方式,因为 Argo CD 会自动管理 RBAC 权限。

# 使用 argocd CLI 注册集群(Service Account 方式)
# 前提:当前 kubeconfig 的 context 已切换到目标集群
argocd cluster add <context-name> \
  --name my-staging-cluster \
  --namespace argocd

# 验证注册结果
argocd cluster list
对比维度 kubeconfig 注入 Service Account 自动创建
凭证来源 管理员提供的 kubeconfig 文件 Argo CD 自动生成的 Service Account
RBAC 管理 手动维护,需自行创建 ClusterRole/Binding 自动创建,默认绑定 cluster-admin 角色
证书处理 使用 kubeconfig 中的 CA 数据 自动获取集群 CA 证书
轮换 需手动更新 kubeconfig 支持 自动轮换(Kubernetes 1.24+)
安全风险 kubeconfig 可能包含长期有效的管理员凭证 可绑定最小权限,且可设置过期时间
推荐等级 ⭐ 临时/测试环境 ⭐⭐⭐ 生产环境首选
Argo CD 多集群注册方式对比 方式一:kubeconfig 注入 管理员提供 kubeconfig 文件 argocd cluster add --kubeconfig Hub 创建 Secret(含 kubeconfig 内容) Argo CD 直接连接 Managed Cluster 方式二:Service Account 自动创建 argocd cluster add <context> Argo CD 连接 Managed Cluster API 自动创建 SA / ClusterRole / Binding Hub 创建 Secret(含 + CA) 两种方式最终都在 Hub Cluster 的 argocd 命名空间下生成 Secret,Argo CD 通过该 Secret 中的凭证访问 Managed Cluster

3.3 注册后的 Secret 结构

无论使用哪种方式注册,Argo CD 都会在 argocd 命名空间下创建一个名为 cluster-<cluster-name>-<hash> 的 Secret。理解这个 Secret 的结构对于后续调试版本漂移检测至关重要。

# 查看已注册集群的 Secret
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster

# 查看某个集群 Secret 的详细内容
kubectl get secret cluster-my-cluster-xxxxx -n argocd -o yaml

# Secret 关键字段说明(解码后):
#   server: https://api.managed-cluster.example.com:6443
#   config: |
#     {
#       "bearerToken": "eyJhbGciOiJSUzI1NiIs...",   # Service Account 
#       "tlsClientConfig": {
#         "caData": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..."  # CA 证书
#       }
#     }
#   name: my-cluster
#   namespaces: ["default", "production"]
安全注意事项: 如果使用 kubeconfig 方式且 kubeconfig 中包含 client-certificate-data 和 client-key-data,这些敏感信息也会被存储在 Secret 中。建议在生产环境中优先使用 Service Account 方式,并启用 自动轮换(Kubernetes v1.24+ 默认开启)。定期审计 argocd cluster list 的输出,移除不再使用的集群注册。

3.4 多集群注册的版本漂移检测意义

理解 Hub-Managed 模型和注册方式后,可以明确版本漂移检测的数据流:

  1. Hub Cluster 通过注册的 Secret 定期轮询每个 Managed Cluster 的 Kubernetes API。
  2. Argo CD 的 Application Controller 将每个集群中 Deployment 的实际状态与 Git 仓库中的期望状态进行对比。
  3. 当发现某个 Managed Cluster 中的 Deployment 镜像标签、副本数或配置与期望状态不一致时,即产生 OutOfSync 状态。
  4. 版本漂移检测正是利用这一机制,通过比较 同一 Application 在不同 Managed Cluster 上的实际运行版本,发现跨集群的不一致。
关键洞察: 多集群版本漂移检测不依赖额外的 Agent 或 Sidecar,完全基于 Argo CD 已有的 Hub-Spoke 轮询机制。只要集群注册正确,Argo CD 就能自动获取每个集群的实时状态,为漂移检测提供数据基础。