From Proxmox & Docker to Kubernetes
Background
My homelab started in a fairly classic way.
I was running Proxmox as a hypervisor with:
- one main VM running Docker
- one NAS for storage
- two additional Mini PCs
Across these systems, I hosted:
- game servers for friends
- internal websites
- a personal wiki
- monitoring and small helper services
At the time, this setup worked well. It was flexible, easy to understand, and fast to get running.
How the Old Setup Worked
Each host had a clear role:
-
Proxmox
Managed virtual machines and basic resource separation. -
Docker VM
Ran most services using Docker Compose:- game servers
- websites
- monitoring
- automation tools
-
NAS
Provided shared storage and backups. -
Mini PCs
Used for additional workloads and testing.
Service management was mostly manual:
- SSH into the correct host
- edit a Compose file
- restart containers
- repeat on the next system
This was fine for a small number of services, but it did not scale well in terms of management.
Where the Limits Started to Show
As the environment grew, a few problems became obvious:
- I had to log into every host manually
- Restarts and updates were host-specific
- Configuration drift was easy to introduce
- There was no single source of truth
- Scaling or moving workloads required manual planning
- Learning was stagnating — I was repeating the same patterns
Most importantly:
the setup worked, but it was not teaching me anything new anymore.
Why Kubernetes
The move to Kubernetes was a deliberate learning decision.
I wanted to:
- understand how modern platforms are actually operated
- stop treating servers as special snowflakes
- manage services declaratively
- design for failure instead of hoping nothing breaks
Kubernetes forces you to think in terms of:
- desired state
- reconciliation
- automation
- repeatability
That alone made it worth the effort.
GitOps as the Missing Piece
Kubernetes without GitOps would only solve half the problem.
With GitOps:
- Git is the single source of truth
- changes are reviewed before being applied
- rollbacks are trivial
- the cluster reconciles itself
- no more “what did I change last night?”
Instead of SSH and manual restarts:
- I commit a change
- the cluster applies it
- everything converges automatically
If a node dies, workloads move. If a pod crashes, it restarts. If I want to change something, I change Git — not servers.
What Changed for Me
The biggest improvement was not technical — it was operational.
I no longer:
- log into random hosts
- restart services by hand
- keep mental notes of where things run
I now:
- describe what I want
- let the system handle how it runs
- learn skills that transfer directly to real-world environments
The homelab became a platform, not a collection of machines.