timeline
How this cluster got built
Every date here comes from the repository log, with the commit beside it. Two entries carry fire because they took the platform down. The rest are steps, plus the wins that changed how everything after them works.
The repository starts
A handful of virtual machines on one host, Talos installed by hand, and a journal written next to the manifests.
Rook and a single-node Ceph
The Rook charts were copied into the repository so a one-node cluster could run storage before anything else existed.
Gitea and Argo CD
The forge and the first reconciler arrived in the same commit. Six days later the cluster deployed its first workload from git.
- breakthrough
Cilium becomes the CNI
Installed from Terraform. Every later network decision, from Gateway API to KubeSpan, builds on this layer.
Tailscale joins the sites
Remote access stopped being a port forward, and a second site became practical.
- outage
A cluster ruined and rebuilt
The KubeSpan rollout destroyed the cluster and I rebuilt it. Recreating Ceph took the storage classes with it, and two volumes came back empty.
Oracle joins as a second site
The first node outside the house, provisioned by hand-written OCI Terraform.
Multi-site routing
One entry point served three sites: Oracle, worker-infra and worker-svt.
- breakthrough
Native routing with KubeSpan
Cilium dropped VXLAN and Talos carried WireGuard. The two only coexist with bpf.hostLegacyRouting set, which is why the cluster died the first time.
- breakthrough
DNS follows the objects
external-dns wrote Cloudflare records from Gateway and HTTPRoute objects. The last chore I had been doing outside git disappeared.
- breakthrough
Argo CD out, Flux in
Three layers, one dependency graph, one opinionated layout. Velocity and consistency both improved that week.
- outage
One line deleted every namespace
The configs Kustomization listed the application namespaces, so force-deleting it pruned them and Kubernetes removed everything inside. The rules about namespace ownership date from this week.
- breakthrough
Terraform moves into the cluster
The Flux OpenTofu controller replaced fourteen PaC-fired apply pipelines. Credentials stopped leaving the cluster and drift correction became automatic.
The site renders from the same repository
A Rust server reads the documentation and quotes the manifests it documents, so a page cannot cite a file that is not there.
Why the stack stays this small: price efficiency decides what runs here. The GPUs reindex every repository push and run photogrammetry, and a hosted API covers the model work for 10 EUR a month. The arithmetic is on the about page.