A GitOps reference platform using ArgoCD and the app-of-apps pattern to declaratively deliver workloads to Kubernetes. The Git repository is the single source of truth — ArgoCD continuously reconciles the cluster to match what's committed here.
Runs end to end on a local kind or minikube cluster, so you can see real GitOps without a cloud
account.
graph TD
Git[(This Git repo)] -->|watched by| Argo[ArgoCD]
Argo -->|app-of-apps| Root[Root Application]
Root --> A1[sample-app Application]
Root --> A2[future apps...]
A1 -->|Helm chart| K8s[(Kubernetes cluster)]
- ArgoCD watches this repo.
- A single root
Application(bootstrap/root-app.yaml) points atapps/. - Each file in
apps/is itself an ArgoCDApplicationpointing at a Helm chart incharts/. - Commit a change → ArgoCD syncs it to the cluster automatically.
.
├── bootstrap/
│ └── root-app.yaml # The "app of apps" — install this once
├── apps/
│ └── sample-app.yaml # ArgoCD Application for the sample app
├── charts/
│ └── sample-app/ # Helm chart (Deployment, Service, values)
└── scripts/
└── setup-kind.sh # Create a kind cluster + install ArgoCD
# 1. Create a cluster and install ArgoCD
./scripts/setup-kind.sh
# 2. Point ArgoCD at this repo (edit repoURL in the manifests to your fork first)
kubectl apply -f bootstrap/root-app.yaml
# 3. Watch ArgoCD reconcile
kubectl -n argocd get applications -w
# 4. Get the ArgoCD admin password and UI
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d; echo
kubectl -n argocd port-forward svc/argocd-server 8080:443
# open https://localhost:8080 (user: admin)- The app-of-apps pattern for scalable, declarative delivery
- ArgoCD
ApplicationCRDs with automated sync, self-heal, and pruning - Helm charts delivered through GitOps rather than
helm installby hand - A reproducible local environment via kind
- Before applying, change
repoURLinbootstrap/root-app.yamlandapps/*.yamlto your fork. syncPolicy.automatedwithpruneandselfHealmakes the cluster self-correct toward Git.
MIT