当业务从单一 Kubernetes 集群演进为跨地域、跨可用区的多集群架构(如杭州生产区、北京异地区、海外机房及独立的预发与测试集群)时,运维团队面临的最大挑战就是“配置漂移与管理爆炸”。如果针对每个集群手工编写一份 ArgoCD Application,不仅有上百个 YAML 文件需要维护,而且在升级镜像版本或调整公共配置时极易发生遗漏。
为了实现“一份代码库、一套规则、跨数十个集群全自动声明式同步”,我们深度引入了 ArgoCD ApplicationSet 的 Matrix(矩阵)生成器与 Kustomize 环境覆盖体系。
flowchart TD GitRepo[统一 Git 基础仓库] --> AppSet[ArgoCD ApplicationSet 控制器] subgraph 矩阵生成维度 ClusterGen[Cluster 生成器: 发现动态纳管的 20+ 集群] EnvGen[Git 目录生成器: 遍历 dev / staging / prod overlays] end AppSet --> ClusterGen AppSet --> EnvGen subgraph 动态生成与差异化分发 AppSet --> App1[自动生成: 集群A - Prod - 部署] AppSet --> App2[自动生成: 集群B - Prod - 部署] AppSet --> App3[自动生成: 集群C - Staging - 部署] end App1 --> TargetK8sA[杭州生产集群 K8s] App2 --> TargetK8sB[北京容灾集群 K8s] App3 --> TargetK8sC[预发测试集群 K8s]1. 基于 Matrix 生成器的多维笛卡尔积编排
ApplicationSet 的 Matrix 生成器允许将两个不同的生成器结合使用(例如:Git 目录生成器 × Cluster 集群生成器),自动计算笛卡尔积并生成对应的 Application 实例:
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: core-services-matrix-sync namespace: argocd spec: generators: - matrix: generators: # 1. 动态过滤集群标签:仅选择包含 env=prod 标签的生产集群 - clusters: selector: matchLabels: tier: production # 2. 扫描 Git 仓库中所有基础服务的 overlay 目录 - git: repoURL: https://git.internal/infra/gitops-manifests.git revision: HEAD directories: - path: apps/core/*/overlays/prod template: metadata: name: '{{path.basename}}-{{name}}' spec: project: default source: repoURL: https://git.internal/infra/gitops-manifests.git targetRevision: HEAD path: '{{path}}' kustomize: # 支持根据目标集群动态覆盖环境变量 commonLabels: deployed-by: argocd-matrix target-cluster: '{{name}}' destination: server: '{{server}}' namespace: 'core-system' syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true当我们在基础平台中通过一条命令纳管了一个新的 Kubernetes 边缘集群并打上tier: production标签后,ApplicationSet 会在 10 秒内自动探测到新集群,并将全套核心微服务自动声明式同步部署到新集群中,全程无需人工干预。
2. Kustomize 环境覆盖(Overlays)差异化设计
虽然矩阵生成器统一了同步入口,但不同地域的集群往往存在细微差异(例如:不同机房使用的数据库连接串、不同的副本数、不同的存储 Class 名称)。
我们采用标准的 Kustomize Base/Overlays 架构来管理这种差异:
gitops-manifests/ ├── apps/core/order-center/ │ ├── base/ │ │ ├── deployment.yaml │ │ ├── service.yaml │ │ └── kustomization.yaml │ └── overlays/ │ ├── staging/ │ │ ├── replica-patch.yaml # 预发副本缩减为 2 │ │ └── kustomization.yaml │ └── prod/ │ ├── resources-patch.yaml # 生产资源配额调大 │ └── kustomization.yaml在overlays/prod/kustomization.yaml中,结合patchesStrategicMerge仅定义与 Base 不同的差异化字段,彻底消除了 YAML 冗余拷贝。
3. 生产发布安全防线与同步波次(Sync Waves)
在多集群发布时,最忌讳“所有集群同时全量更新”,必须有灰度顺序。
我们利用 ArgoCD 的argocd.argoproj.io/sync-wave注解与集群分组,实现阶梯式发布:
- Wave 1:先同步更新 Canary/Staging 集群,运行自动化测试用例验证 15 分钟;
- Wave 2:同步更新杭州生产主集群;
- Wave 3:等待主集群指标健康度正常,最后同步容灾集群与海外节点。
通过这一套声明式多集群矩阵体系,我们将跨集群发布的配置错误率降到了 0,单次全集群版本发布的人力投入从原本的 2 人天缩短至 15 分钟。