ArgoCD

App of Apps

28 question(s)

What is the App of Apps pattern?

Beginner
App of Apps is a pattern where a single parent (root) Application deploys other Application resources instead of workloads. The parent points at a Git path containing child Application manifests, so syncing the parent creates/updates all the children. It bootstraps and manages many apps from one entry point.
kind: Application
metadata: { name: root }
spec:
  source:
    repoURL: https://github.com/org/gitops
    path: apps          # directory of child Application manifests
  destination: { server: https://kubernetes.default.svc, namespace: argocd }
Real-world example A root app points at an 'apps/' directory; syncing it creates Applications for monitoring, ingress, and each service.

Common follow-ups: What does the parent app deploy? | Where do child Applications live?

Applications Multi-cluster App of Apps

Why use the App of Apps pattern?

Beginner
It centralizes bootstrapping: one root app installs and manages a whole platform or environment's set of applications, giving a single sync point, easy disaster recovery (recreate everything by applying the root), and organized structure. It's a simple way to manage many related apps declaratively before or instead of ApplicationSets.
Real-world example To rebuild a cluster, the team applies just the root app and ArgoCD recreates every child Application automatically.

Common follow-ups: How does it help disaster recovery? | What's the single sync point benefit?

GitOps Principles Multi-cluster App of Apps

How does App of Apps differ from ApplicationSets?

Intermediate
App of Apps stores an explicit Application manifest per child in Git (static list you maintain). ApplicationSets generate Applications dynamically from generators (clusters, Git dirs, PRs), reducing boilerplate and auto-updating as inputs change. App of Apps is simpler for a fixed set; ApplicationSets scale better for many/variable targets.
Real-world example A fixed platform stack uses App of Apps, while deploying one app to N clusters uses an ApplicationSet cluster generator.

Common follow-ups: When is App of Apps simpler? | When do ApplicationSets scale better?

Applications Multi-cluster App of Apps

How do you order child application deployment in App of Apps?

Intermediate
Annotate the child Application resources with sync waves so the parent applies them in order (e.g., infra/CRDs before workloads). Since the parent sync applies the Application CRs, waves on those CRs sequence when each child is created and begins syncing, letting prerequisites come up first.
# child Application manifest
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"   # infra first, apps later
Real-world example The ingress-controller child app (wave 0) is created before the services (wave 1) that depend on it.

Common follow-ups: What do waves order in App of Apps? | How are prerequisites handled?

Sync Waves & Hooks Applications App of Apps

How do you bootstrap a whole cluster with App of Apps?

Intermediate
Install ArgoCD, then apply a single root Application that references a Git directory of child apps covering platform components (ingress, monitoring, cert-manager, secrets) and workloads. Syncing the root cascades to create everything. This 'bootstrap app' is the one manual step; from there GitOps manages the cluster.
kubectl apply -n argocd -f root-app.yaml   # the only manual step
Real-world example A new cluster is fully provisioned by installing ArgoCD and applying one root app that pulls in the entire platform.

Common follow-ups: What's the single manual step? | What components go in the bootstrap set?

Multi-cluster GitOps Principles App of Apps

What are the risks of App of Apps and how do you mitigate them?

Advanced
Risks: a broad blast radius (a bad parent change affects many apps), accidental pruning cascading deletes, and manually maintaining child manifests. Mitigate with careful prune settings and finalizers, PR review on the parent repo, splitting into scoped roots per domain, and using Projects to constrain what children can deploy.
Real-world example The team splits one giant root into per-domain roots and disables prune on critical children to limit blast radius.

Common follow-ups: Why is blast radius a concern? | How do Projects reduce risk?

RBAC Applications App of Apps

How does cascading deletion work with App of Apps?

Intermediate
Deleting the parent Application can delete its children (and their resources) if finalizers/prune are set for cascading deletion. The resources-finalizer on an Application causes ArgoCD to delete the app's managed resources when the app is removed. Understanding this prevents accidental teardown of whole environments.
metadata:
  finalizers:
    - resources-finalizer.argocd.argoproj.io
Real-world example Removing the root app with the resources finalizer tears down every child app and its workloads—useful for env teardown, dangerous by accident.

Common follow-ups: What does the resources-finalizer do? | How do you prevent accidental cascade deletes?

Applications Sync & Health App of Apps

How do you combine App of Apps with ApplicationSets?

Advanced
A common pattern is a root App of Apps that deploys one or more ApplicationSets, getting both a single bootstrap entry point and dynamic generation. The root manages a handful of ApplicationSets, each of which generates many Applications, combining simple bootstrapping with scalable, templated app creation.
Real-world example The root app deploys an ApplicationSet per team; each set then generates that team's per-cluster applications automatically.

Common follow-ups: Why nest ApplicationSets under a root? | What does each layer manage?

Multi-cluster Applications App of Apps

What does the parent Application's source point to in App of Apps?

Beginner
It points to a Git repo/path containing the child Application YAML files (or a Helm/Kustomize setup that renders them). When synced, ArgoCD applies those Application resources into the argocd namespace, and each child then syncs its own workloads from its own source.
Real-world example The parent's path is 'clusters/prod/apps', a directory of Application manifests that become the prod cluster's apps.

Common follow-ups: What namespace do child Applications live in? | Can the parent render children with Helm?

Applications GitOps Principles App of Apps

How do you manage environment promotion using App of Apps?

Advanced
Structure per-environment roots (dev/staging/prod), each pointing at env-specific child app configs pinned to revisions/tags. Promotion is a PR that updates the target env's config (e.g., bump the image tag or child app revision), which the env's root syncs. This keeps promotion auditable and environment-scoped.
Real-world example Promoting a release is a PR bumping the tag in the prod root's child configs, which prod's ArgoCD then rolls out.

Common follow-ups: How is promotion made auditable? | Why separate roots per environment?

Multi-cluster GitOps Principles App of Apps