ArgoCD App of Apps 模式实战:多应用声明式管理与 ApplicationSet 自动化
ArgoCD App of Apps 模式实战多应用声明式管理与 ApplicationSet 自动化GitOps 的核心理念是以 Git 仓库作为唯一可信数据源。ArgoCD 在基础安装之后面对真实生产场景时往往需要管理数十乃至上百个应用跨越 dev、staging、prod 多个环境。本文在基础 ArgoCD 安装的基础上深入讲解 App of Apps 设计模式——用一个父 Application 声明式管理所有子 Application并结合 ApplicationSet 实现多集群、多环境的自动化部署彻底告别手动点击创建应用的低效工作方式。服务器配置本教程推荐使用雨云服务器 rainyun-com搭建 K3s 集群作为实验与生产环境。注册填优惠码2026off领 5 折优惠券多节点集群成本可大幅降低。推荐配置K3s 集群控制节点使用4 核 8GB机型。ArgoCD 本身占用资源不多但结合多个 ApplicationSet 控制器和应用同步任务4 核 8GB 可确保调度器和控制器稳定运行避免内存压力触发 OOM。角色CPU内存磁盘控制节点含 ArgoCD4 核8 GB60 GB SSD工作节点 × 22 核4 GB40 GB SSD操作系统Ubuntu 22.04 LTS--前置准备K3s 集群已运行# 控制节点安装 K3scurl-sfLhttps://get.k3s.io|sh-s- server\--cluster-init\--tls-sanYOUR_SERVER_IP# 获取 kubeconfigexportKUBECONFIG/etc/rancher/k3s/k3s.yaml kubectl get nodesArgoCD 已安装kubectl create namespace argocd kubectl apply-nargocd-f\https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml# 等待 Pod 就绪kubectlwait--forconditionReady pod-lapp.kubernetes.io/nameargocd-server\-nargocd--timeout120sGit 仓库已初始化本文以https://github.com/your-org/gitops-repo为例实际替换为你的仓库地址。ArgoCD CLI 已安装curl-sSL-o/usr/local/bin/argocd\https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64chmodx /usr/local/bin/argocd部署步骤第一步设计 GitOps 仓库目录结构App of Apps 的关键在于仓库结构的合理设计。推荐结构如下gitops-repo/ ├── apps/ # 父 App 目录App of Apps 根 │ ├── dev/ │ │ ├── kustomization.yaml │ │ ├── nginx.yaml │ │ ├── redis.yaml │ │ └── backend-api.yaml │ ├── staging/ │ │ ├── kustomization.yaml │ │ ├── nginx.yaml │ │ └── backend-api.yaml │ └── prod/ │ ├── kustomization.yaml │ ├── nginx.yaml │ └── backend-api.yaml ├── applicationsets/ # ApplicationSet 定义 │ ├── backend-api-appset.yaml │ └── nginx-appset.yaml ├── charts/ # Helm Chart 源文件 │ ├── backend-api/ │ └── nginx/ └── envs/ # 环境差异化配置 ├── dev/ │ └── values-backend-api.yaml ├── staging/ │ └── values-backend-api.yaml └── prod/ └── values-backend-api.yaml第二步创建根 ApplicationApp of Apps 父节点# apps-root.yamlapiVersion:argoproj.io/v1alpha1kind:Applicationmetadata:name:apps-rootnamespace:argocdfinalizers:-resources-finalizer.argocd.argoproj.iospec:project:defaultsource:repoURL:https://github.com/your-org/gitops-repotargetRevision:HEADpath:apps/prod# 指向包含子 Application 定义的目录destination:server:https://kubernetes.default.svcnamespace:argocdsyncPolicy:automated:prune:trueselfHeal:truesyncOptions:-CreateNamespacetrue应用此根 Applicationkubectl apply-fapps-root.yaml第三步定义子 Application在apps/prod/目录下每个应用一个 YAML 文件# apps/prod/backend-api.yamlapiVersion:argoproj.io/v1alpha1kind:Applicationmetadata:name:backend-api-prodnamespace:argocdlabels:environment:prodteam:backendspec:project:defaultsource:repoURL:https://github.com/your-org/gitops-repotargetRevision:HEADpath:charts/backend-apihelm:valueFiles:-../../envs/prod/values-backend-api.yamldestination:server:https://kubernetes.default.svcnamespace:backend-prodsyncPolicy:automated:prune:trueselfHeal:truesyncOptions:-CreateNamespacetruerevisionHistoryLimit:5第四步使用 ApplicationSet 实现多环境自动化ApplicationSet 可以根据模板自动为多个环境生成 Application避免重复书写# applicationsets/backend-api-appset.yamlapiVersion:argoproj.io/v1alpha1kind:ApplicationSetmetadata:name:backend-api-appsetnamespace:argocdspec:generators:-list:elements:-env:devnamespace:backend-devreplicaCount:1imageTag:latest-env:stagingnamespace:backend-stagingreplicaCount:2imageTag:v1.2.0-rc1-env:prodnamespace:backend-prodreplicaCount:3imageTag:v1.2.0template:metadata:name:backend-api-{{env}}labels:environment:{{env}}spec:project:defaultsource:repoURL:https://github.com/your-org/gitops-repotargetRevision:HEADpath:charts/backend-apihelm:parameters:-name:replicaCountvalue:{{replicaCount}}-name:image.tagvalue:{{imageTag}}-name:environmentvalue:{{env}}destination:server:https://kubernetes.default.svcnamespace:{{namespace}}syncPolicy:automated:prune:trueselfHeal:truesyncOptions:-CreateNamespacetrue应用 ApplicationSetkubectl apply-fapplicationsets/backend-api-appset.yamlArgoCD 会自动创建backend-api-dev、backend-api-staging、backend-api-prod三个 Application。核心功能多集群部署ApplicationSet 的 Cluster Generator 可自动为所有注册集群生成 Applicationspec:generators:-clusters:selector:matchLabels:environment:productiontemplate:spec:destination:server:{{server}}namespace:backend-prod注册新集群argocd clusteraddmy-remote-cluster--nameprod-cluster-us-east为集群打标签后ApplicationSet 会自动在该集群创建对应应用。环境差异化管理通过 Helm values 文件实现环境隔离# envs/prod/values-backend-api.yamlreplicaCount:3resources:requests:memory:512Micpu:250mlimits:memory:1Gicpu:500mingress:enabled:truehost:api.example.comtls:trueautoscaling:enabled:trueminReplicas:3maxReplicas:10# envs/dev/values-backend-api.yamlreplicaCount:1resources:requests:memory:128Micpu:50mingress:enabled:truehost:api.dev.example.comtls:falseautoscaling:enabled:false进阶配置ArgoCD Projects 权限隔离为不同团队创建 ArgoCD Project限制其只能操作特定仓库和命名空间apiVersion:argoproj.io/v1alpha1kind:AppProjectmetadata:name:backend-teamnamespace:argocdspec:description:Backend Team ProjectsourceRepos:-https://github.com/your-org/backend-servicesdestinations:-namespace:backend-*server:https://kubernetes.default.svcclusterResourceWhitelist:-group:kind:NamespacenamespaceResourceWhitelist:-group:appskind:Deployment-group:kind:ServiceSync Waves 控制部署顺序通过 annotation 控制多个应用的同步顺序确保依赖关系metadata:annotations:argocd.argoproj.io/sync-wave:1# 数字越小越先同步例如数据库wave: 0→ 配置wave: 1→ 应用wave: 2→ Ingresswave: 3。Git Generator 自动发现应用generators:-git:repoURL:https://github.com/your-org/gitops-reporevision:HEADdirectories:-path:apps/*/prodArgoCD 会自动扫描仓库中匹配路径的目录为每个目录创建 Application新增服务只需在仓库中创建目录即可无需手动配置。常见问题Q根 Application 同步成功但子 Application 没有被创建。A检查子 Application 的 YAML 是否有语法错误以及destination.namespace是否设为argocd子 Application 必须创建在 argocd 命名空间中否则不会被 ArgoCD 识别管理。QApplicationSet 修改了 elements 列表删除某个环境后对应 Application 没有被删除。A需要在 ApplicationSet 中启用自动删除策略spec:syncPolicy:applicationsSync:create-update-deleteQ多集群部署时远程集群的应用一直显示 Unknown。A检查 ArgoCD 到远程集群的网络连通性argocd cluster list argocd cluster get https://remote-cluster-api:6443确认 ArgoCD Server 的 Service Account 在远程集群有足够权限并检查防火墙是否开放 6443 端口。Q如何回滚某个应用到历史版本# 查看历史argocd apphistorybackend-api-prod# 回滚到指定版本argocd app rollback backend-api-prodrevision-idApp of Apps 模式将 GitOps 的声明式理念贯彻到底使整个集群的应用状态都可以从 Git 仓库完整还原。在雨云服务器 rainyun-com的 4 核 8GB 控制节点上部署 ArgoCD 与完整的 ApplicationSet 体系优惠码2026off五折优惠让你以极低成本构建起企业级 GitOps 平台实现从代码提交到生产部署的全自动化闭环。