ArgoCD
Topics in this category
ArgoCD
App of Apps
The root (parent) application is the single Application you apply manually that points at a directory of child Application manifests. Syncing it creates all the children, which in turn deploy the actual workloads—making the root the one entry point for a whole environment.
Real-world example
Applying one root app spins up child apps for ingress, monitoring, and every service.
Applications
Multi-cluster
App of Apps
After installing ArgoCD, apply the root Application manifest (kubectl apply -f root.yaml or argocd app create). ArgoCD then syncs it, creating the child Applications. This single command bootstraps the environment declaratively.
kubectl apply -n argocd -f root-app.yaml
Real-world example
A fresh cluster is bootstrapped by installing ArgoCD and applying the root app once.
GitOps Principles
Multi-cluster
App of Apps
Each child Application manifest has its own source (repoURL/path/targetRevision), so children can point at entirely different repos, chart paths, or revisions. The parent just aggregates the child manifests; each child independently defines where its manifests come from.
Real-world example
One child pulls a Helm chart from a chart repo while another pulls Kustomize overlays from a Git monorepo.
Applications
GitOps Principles
App of Apps
Commit a new child Application manifest into the directory the root watches; on the next sync the root creates the new child, which then deploys its workloads. Adding an app is thus a simple Git commit, keeping the process GitOps-native.
Real-world example
Onboarding a new service is just adding its Application YAML to the apps directory and merging.
Applications
GitOps Principles
App of Apps
Be cautious with the resources-finalizer and prune on the root. Omit the cascading finalizer if you don't want deleting the root to delete children, protect critical children with Prune=false, review parent changes via PR, and scope roots per domain to limit blast radius.
# Omit this on the root if you don't want cascade deletes:
finalizers: [ resources-finalizer.argocd.argoproj.io ]
Real-world example
The root omits the resources finalizer so removing it doesn't wipe every child environment by accident.
Applications
RBAC
App of Apps
A common layout has a root app pointing at an apps/ (or per-environment) directory of child Application manifests, with each child referencing its own manifests path. Separate directories per environment/cluster let one root per env manage that env's apps cleanly.
gitops/
root-app.yaml
apps/
ingress.yaml
monitoring.yaml
service-a.yaml
Real-world example
The prod root watches clusters/prod/apps/, a folder of that cluster's child Application manifests.
Multi-cluster
GitOps Principles
App of Apps
Migrate when you're hand-maintaining many near-identical child manifests, deploying to many clusters, or need dynamic generation (per-PR, per-directory). ApplicationSets template these automatically. Keep App of Apps for a small, static, curated set where explicit manifests are clearer.
Real-world example
Growing from 5 to 50 clusters, the team replaces per-cluster child manifests with a cluster-generator ApplicationSet.
Applications
Multi-cluster
App of Apps
Secrets are handled the same as any GitOps app—via Sealed Secrets, External Secrets, or SOPS—referenced by child apps, not stored plaintext in the parent or children. The App of Apps structure doesn't change secret handling; each child pulls secrets through the chosen mechanism.
Real-world example
Child apps reference External Secrets that resolve from Vault, so no secrets sit in the App of Apps repo.
GitOps Principles
RBAC
App of Apps
Annotate child Application resources with sync waves so the parent creates foundational apps first (CRDs, ingress, cert-manager in low waves) before dependent workloads (higher waves). This ensures the platform layer is Healthy before apps that rely on it are created.
# child app
metadata:
annotations:
argocd.argoproj.io/sync-wave: "0" # platform before wave 1 apps
Real-world example
cert-manager and ingress (wave 0) become Healthy before the workloads (wave 1) that need TLS and routing.
Sync Waves & Hooks
Multi-cluster
App of Apps
A single root gives one place to see and control an environment's whole app set: sync all children together, get an overview of status, and recreate everything from one manifest. It simplifies operations and disaster recovery compared to managing dozens of apps individually.
Real-world example
The team monitors and re-syncs the entire environment from the one root app in the ArgoCD UI.
GitOps Principles
Multi-cluster
App of Apps