Introduction

I started learning to code at home during covid in fall 2020.

I went through the excellent CS50x https://cs50.harvard.edu/x/2025/ by David J. Malan.

Then continued with different free resources, mostly:

I then worked freelance for a while and a few months later in 2021 got hired as a junior backend engineer by a fintech startup.

Up until then I had been deploying things using docker and docker compose but discovered Kubernetes upon joining.

To be able to understand what it was about I thought I would build a home lab and experiment.

Not having prior knowledge to run a cluster I decided instead to build a single desktop machine and to virtualize the cluster within.

I got to experiment with different combinations of tools such as:

categorywebsitefeedback
VM managementhttps://canonical.com/multipassCLI was nice but unstable, had episodes of stuck VMs, etc. Also was limited in passthrough capabilities.
VM managementhttps://canonical.com/lxdWas lighter than multipass but still could have issues with non responsive VMs.
VM managementhttps://www.proxmox.com/en/What I use now. It just works, passthrough is easy. UI is nice and it is comfortable to be able to just open a shell to a regular Debian machine
Distributed storagehttps://openebs.io/Did not use it very long, not a good memory
Distributed storagehttps://rook.io/docs/rook/v1.9/ceph-storage.htmlOnly used Rook to connect to an external Ceph cluster
Distributed storagehttps://ceph.io/en/Ceph cluster using 3 VMs as nodes. It was unstable, had corruption, had to debug manually in the object store, lost some data, gave up and reverted to Longhorn.
Distributed storagehttps://min.io/Rock solid S3 solution. I use it as SNSD because multi disks was actually less resilient for me.
Distributed storagehttps://juicefs.com/Used for a while to mount a fuse file system accessible to Kubernetes pods on top of MinIO. It was working well but also constantly writing.
Distributed storagehttps://longhorn.io/Still what I use, it improved in stability over time. Volumes are backed up automatically to MinIO S3.
Distributed storagehttps://github.com/democratic-csi/democratic-csiUsed along with TrueNAS to provide PV to Kubernetes
Distributed storagehttps://www.truenas.com/truenas-scale/I still use it to provide iSCSI (block storage) as well as NFS to Kubernetes
Local storage-Used openEBS and k3s implementations with real volumes or using loop devices mounted on .img files. I still occasionally use local path for things like LLM models since I only have one node with a GPU anyway.
Kubernetes distributionhttps://microk8s.io/Used for a few months, did not leave a great impression.
Kubernetes distributionhttps://k3s.io/Used for the past 3 years, it's good
Kubernetes distributionhttps://k3d.io/v5.6.3/It's nice to test quickly something in docker
Kubernetes distributionhttps://minikube.sigs.k8s.io/docs/Alternative to the above

Over time I invested and my current hardware is the following:

%%{ init: { 'theme': 'base', 'themeVariables': { 'fontSize': '16px', 'fontFamily': 'arial' }, 'flowchart': { 'htmlLabels': true, 'curve': 'basis' } } }%% graph TD VPS["VPS Tokyo\n3GB RAM, 2 vCPU\n100GB SSD, Unlimited bandwidth"] FW["OpenWrt Firewall\nN100, 16GB RAM\n512GB SSD, 2x2.5G LAN"] N1["Node 1\ni7-12700, 128GB RAM\n8TB NVME, 124TB HDD\nRTX 4070, 2.5G LAN"] N2["Node 2\nN100, 16GB RAM\n512GB SSD, 2.5G LAN\nBT/WiFi"] N3["Node 3\nN100, 16GB RAM\n512GB SSD, 2.5G LAN\nBT/WiFi"] VPS --> FW FW --> N1 FW --> N2 FW --> N3 style VPS fill:#D4E5FF,stroke:#000000,stroke-width:2px style FW fill:#E6FFCC,stroke:#000000,stroke-width:2px style N1 fill:#E6D9FF,stroke:#000000,stroke-width:2px style N2 fill:#E6D9FF,stroke:#000000,stroke-width:2px style N3 fill:#E6D9FF,stroke:#000000,stroke-width:2px

And from the above table, what I currently still use:

  • Proxmox for the system of the 3 nodes
  • Ubuntu server/desktop for the VMs
  • k3s
  • Longhorn for in-cluster storage on top of each node NVME disks (virtualized through proxmox)
  • TrueNAS for out of cluster storage via democratic-csi on top of physical HDD for NFS as well as virtual NVME storage for iSCSI persistent volumes.
  • MinIO for S3 with a dedicated HDD formatted in XFS

For the past 3 years I have been deploying and testing different self hostable open source projects. Some of them I have adopted and use everyday as permanent replacement of cloud solutions while others I have discarded temporarily or forever.