Self-Hosted Databricks Alternative: Homelab Data Lakehouse Part of the homelab build series. Trino, Apache Iceberg, Project Nessie, dbt, Spark, MLflow and OpenMetadata on RKE2, with highly available s

Markdown supported · ⌘↵ to post
This is the kind of homelab project that makes you realize how many moving parts are hiding behind a “simple” data platform. I really liked that this isn’t just a list of tools thrown onto Kubernetes—the decisions seem to come from actually running into problems and then simplifying where possible.
The choice to use Ceph, Iceberg, Nessie, Trino, dbt, MLflow and Kubeflow as pieces of one workflow is especially interesting. The “Git for data” approach with Nessie and the emphasis on reproducibility make a lot of sense for ML, where knowing exactly what data produced a model can be just as important as tracking the code.
I also appreciated the honesty around the parts that are not perfect yet. Keeping some bundled databases in Kubeflow, deferring streaming, and having Spark installed but not forcing it into the daily pipeline feels much more realistic than pretending everything needs to be production-ready from day one.
The troubleshooting details around Istio, Vault, oauth2-proxy and Keycloak are probably the most valuable part for anyone attempting something similar. Those are exactly the kinds of issues that don't show up in architecture diagrams but can consume hours in a real deployment.
Really impressive build—and even better that you're documenting the traps along the way, not just the final architecture.
The "one source of truth per concern" principle is what makes this tractable — refusing stateful chart defaults is where most homelab attempts fall apart. The Nessie write-audit-publish workflow reads like Git semantics for data, which is what makes reproducible training believable rather than aspirational. How do you size the ops overhead of keeping this whole stack healthy on a homelab node — is it a weekend project that mostly runs itself, or a constant maintenance tax compared to paying for managed?
The dbt + Apache Iceberg + Project Nessie workflow. When a dbt build fails halfway through, how do you ensure that temporary Iceberg files and snapshots created on the dbt-audit branch are cleaned up safely without affecting tables referenced by existing Nessie tags or MLflow models? Would you recommend Nessie garbage collection with a retention policy, or is there another approach for handling this in production?
Pairing Iceberg with Nessie in a homelab is a nice way to get branch and merge semantics for data without paying for a managed catalog. One thing worth covering in a follow-up is snapshot expiration and orphan file cleanup, since on Ceph backed S3 those small files and old snapshots add up quickly if nobody schedules the maintenance jobs. A short section on how you back up the Nessie metadata store would also help anyone copying this setup.
Yunus Emre Vurgun
Writing about AI agents, hardware, and practical software.
Using Nessie branches together with dbt is a strong pattern here: run dbt against a branch, run tests there, and only merge into main when they pass, so Trino consumers never see half-built tables. On a homelab, also schedule Iceberg maintenance (expire_snapshots, remove_orphan_files and rewrite_data_files) early, because frequent small dbt runs pile up snapshots and tiny files on Ceph fast, and Trino query times degrade before you notice why.