App-of-apps & ApplicationSets
Manage many apps/clusters.
Managing dozens of Applications one YAML at a time does not scale, so Argo CD has two patterns for managing apps at scale. App-of-apps is a single parent Application whose source is a Git directory full of Application manifests — Argo CD syncs the parent, which creates all the child apps, so one bootstrap app manages a whole platform. It is simple and powerful: your entire set of apps is declared in Git and rolled out by syncing one root.
spec:source:repoURL: https://git.acme.internal/platform/apps.gitpath: applications/ # a directory of Application YAMLsdestination: { server: https://kubernetes.default.svc, namespace: argocd }syncPolicy: { automated: { prune: true, selfHeal: true } }# syncing this one app creates/manages every child Application in the directory
ApplicationSets
ApplicationSets go further: a controller that generates Applications from a template plus a generator. The list generator makes one app per entry; the cluster generator makes one per registered cluster; the Git generator makes one per directory or file in a repo; the matrix/merge generators combine them. This is how you deploy the same app to twenty clusters, or every team’s app from a monorepo, from a single templated definition — the answer to fleet-scale GitOps.
apiVersion: argoproj.io/v1alpha1kind: ApplicationSetspec:generators:- clusters: {} # one Application per registered clustertemplate:metadata: { name: "monitoring-{{name}}" }spec:source: { repoURL: ..., path: monitoring, targetRevision: v2.1.0 }destination: { server: "{{server}}", namespace: monitoring }syncPolicy: { automated: { selfHeal: true } }