news 2026/9/28 19:25:49

GitOps 多集群声明式配置同步:基于 ApplicationSet 插件与环境覆盖矩阵

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GitOps 多集群声明式配置同步:基于 ApplicationSet 插件与环境覆盖矩阵

当业务从单一 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注解与集群分组,实现阶梯式发布:

  1. Wave 1:先同步更新 Canary/Staging 集群,运行自动化测试用例验证 15 分钟;
  2. Wave 2:同步更新杭州生产主集群;
  3. Wave 3:等待主集群指标健康度正常,最后同步容灾集群与海外节点。

通过这一套声明式多集群矩阵体系,我们将跨集群发布的配置错误率降到了 0,单次全集群版本发布的人力投入从原本的 2 人天缩短至 15 分钟。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 19:23:04

电控简历没项目?10个开源项目从零到面试通关实战指南

每年秋招,我都能见到一批简历包装得很整齐、却一投出去就没回音的电控方向同学。关键词一查,STM32没有、电机控制没有、电路设计没有,只有课程设计和几个校级比赛奖项,招聘方确实没法判断你能不能上手干活。电控岗要的是什么&…

作者头像 李华