commit b3c9539eaff25d63956fc2bb226419411e400899 Author: duynguyen Date: Wed Jul 29 23:30:45 2026 +0700 chore: scaffold cluster-platform repo (root app-of-apps for platform services) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..55fc006 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.env + +# OS/editor +.DS_Store +*.swp +CLAUDE.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..bbb6e77 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# K8s Cluster Platform — Services + +Bootstraps platform/application services (vault, external-secrets, harbor, jenkins, +sonarqube, etc.) onto the cluster using ArgoCD app-of-apps pattern. + +Run this after `cluster-bootstrap` finishes (ArgoCD, MetalLB, Envoy Gateway, NFS +storage must already be up). + +## Architecture + +``` +Git repo (cluster-platform) + └── ArgoCD watches platform/apps/ → syncs all Applications + +platform-app.yaml ← root Application, applied once by hand (kubectl apply) +platform/apps/ ← ArgoCD watches this path; one Application CRD per service +manifests/ ← Helm values referenced by those Applications +``` + +## Bootstrap Sequence + +**Apply the root platform Application** + +```bash +kubectl apply -f platform-app.yaml +``` + +Everything else is reached by ArgoCD syncing `platform/apps/` from here. diff --git a/platform-app.yaml b/platform-app.yaml new file mode 100644 index 0000000..9d63d2e --- /dev/null +++ b/platform-app.yaml @@ -0,0 +1,18 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: platform + namespace: argocd +spec: + project: default + source: + repoURL: https://gitea.fireflylab.cc/duynguyen/cluster-platform.git + targetRevision: main + path: platform/apps + destination: + server: https://kubernetes.default.svc + namespace: argocd + syncPolicy: + automated: + prune: true + selfHeal: true