📁 kubernetes/ # Kubernetes cluster defined as code
├── 📁 apps # Apps deployed into my cluster grouped by namespace
├── 📁 components # Re-usable kustomize components
└── 📁 flux # Flux system configThe dependency structure of the core Flux Kustomizations in this cluster, specifically focusing on the storage (Rook-Ceph) and observability (Prometheus) stack.
The following diagram illustrates how the Kustomizations are ordered and the HelmReleases they manage.
graph TD
subgraph Kustomizations
KS_PROM[kube-prometheus-stack]
KS_ROOK_CLUSTER[rook-ceph-cluster]
KS_ROOK_OPERATOR[rook-ceph-operator]
end
subgraph HelmReleases
HR_PROM[kube-prometheus-stack]
HR_ROOK_CLUSTER[rook-ceph-cluster]
HR_ROOK_OPERATOR[rook-ceph-operator]
end
KS_PROM -- dependsOn --> KS_ROOK_CLUSTER
KS_ROOK_CLUSTER -- dependsOn --> KS_ROOK_OPERATOR
KS_PROM -. creates .-> HR_PROM
KS_ROOK_CLUSTER -. creates .-> HR_ROOK_CLUSTER
KS_ROOK_OPERATOR -. creates .-> HR_ROOK_OPERATOR
- rook-ceph-operator: The base Kustomization that installs the Rook-Ceph operator.
- rook-ceph-cluster: Depends on the operator being ready. It configures the actual Ceph cluster, pools, and storage classes.
- kube-prometheus-stack: Depends on the storage cluster being ready, as it uses Ceph block storage (RBD) for persistent data (Prometheus and Alertmanager metrics/state).
Each Kustomization points to a directory containing a HelmRelease resource, which Flux's Helm Controller then reconciles to install the respective applications.
Thanks to the home-operations community for providing tons of insight and huge shoutout to the @onedr0p for his awesome cluster template a great starting point anyone wishing to run some k8s at home.