🧩Cluster Applications
What actually runs on the two Kubernetes clusters, and where its manifests live. Cluster mechanics are on Architecture/Kubernetes; first-party source and image builds are on Architecture/Applications.
The tree is the source of truth: each row names a directory under
clusters/. If a row and the directory disagree, the directory wins.Shared —
clusters/base/apps/Referenced by relative path from each cluster's apps kustomization (e.g.
clusters/folly/apps/kustomization.yaml), or wrapped by a thin per-cluster overlay that adds site secrets.Directory What it is arcGitHub Actions runner scale sets ( gha-runner-scale-set) runningghcr.io/jonpulsifer/actions-runner. Each cluster wraps it inclusters/<site>/apps/arc/with its own SOPS secret, driven by a dedicatedarc-runnersFlux Kustomization.deschedulerEvicts pods that violate scheduling constraints after the fact. iperf3Throughput probe, built from ghcr.io/jonpulsifer/netbench.oauth2-proxySSO gate in front of unauthenticated services. Each cluster wraps it in clusters/<site>/apps/oauth2-proxy/and gives it its own Flux Kustomization.reloaderRestarts workloads when a mounted ConfigMap or Secret changes. Platform components that other apps depend on — CloudNativePG, external-secrets, Kyverno, the Valkey operator, the Spindrift target and policy sets — live in
clusters/base/platform/, notbase/apps/.
folly —
clusters/folly/apps/The on-site cluster: media, lab, and household services alongside the AI and load-testing surfaces.
Directory What it is argoArgoCD, installed as a HelmRelease. Owns no applications — Flux does the reconciling. defaultThe defaultnamespace odds and ends:hajimari(the homelab dashboard) andpodinfo.deschedulerCluster-local descheduler release. dump.yamlScratch nginx pod for poking at cluster networking. falcoRuntime security monitoring. hermesNous Research Hermes agent, deployed through the first-party packages/charts/ai-agentchart.jellyfin.yamlMedia server. k6The k6 operator, plus the TestRun scaffolding for lab load tests. netbenchFirst-party network benchmark image. open-webuiChat frontend for local models. pbxAsterisk PBX. postgresCloudNativePG cluster for folly workloads. redisRedis for folly workloads. satisfactoryGame server. Commented out of clusters/folly/apps/kustomization.yaml, so nothing is reconciled today.spindrift-targetThe Gateway and RBAC that let Spindrift place workloads on folly. tronbyttronbyt-serverplus therackstataggregator that feeds the Tidbyt display.vaultOpenBao.
offsite —
clusters/offsite/apps/The remote-site cluster: everything public-facing or upload-heavy, because folly's WAN is asymmetric.
Directory What it is atlantisThe Terraform apply path for every PR — see Architecture/GitOps. dave.yamlAn ai-agentchart release in theagents-sandboxnamespace.deschedulerCluster-local descheduler release. hubapps/hub, deployed through the first-partypackages/charts/appchart.prowlerCloud security posture scanning, via packages/charts/prowler.spindriftThe Spindrift control plane itself — Architecture/Spindrift. spindrift-targetPulled straight from clusters/base/platform/spindrift-target: namespace, RBAC, and network policy for Spindrift-owned workloads.
Reading this yourself
The
kustomization.yamlin each cluster'sapps/directory (clusters/folly/apps/,clusters/offsite/apps/) is the authoritative list of what a cluster reconciles — a directory present on disk but absent from that file (or commented out) is not running.mise run k8s:render-appsrenders both clusters' trees locally if you want the resolved objects rather than the sources.
Linked references 2
The workloads each cluster reconciles: Architecture/Cluster Applications.
What runs on each cluster: Architecture/Cluster Applications