I’m thinking about starting a self hosting setup, and my first thought was to install k8s (k3s probably) and containerise everything.
But I see most people on here seem to recommend virtualizing everything with proxmox.
What are the benefits of using VMs/proxmox over containers/k8s?
Or really I’m more interested in the reverse, are there reasons not to just run everything with k8s as the base layer? Since it’s more relevant to my actual job, I’d lean towards ramping up on k8s unless there’s a compelling reason not to.
Why not both?
Like many others here, I went with Proxmox as the base host. But most of my services are Docker containers , running in a “dockerVM” on top of Proxmox.
Having Proxmox as the base is just so flexible, which is very handy for a homelab.
- For instance I set up a VM with Wireguard back when Wireguard had only just been merged in to the mainline kernel, without affecting the other
- You can have separate VM for docker testing, and docker production
- You can run multiple VMs for multiple Kubernetes hosts, to try it out and get your feet wet without affecting the “production” containers
- If you get additional servers, you can just migrate those Kubernetes VMs
- You can run Windows VM should you need, and BSD (and thus pfSense/opensense or TRUE AS)
- You can run a full graphical environment if you want
- Proxmox has easy setup for firewalls for each VM
- I have a VM running a legacy bare metal system (from the same server now running proxmox) that I’ve been slowly de-commissioning piece by piece
What is your system backup solution like? Having it separated seems convenient for that since you can just back up the vm storage somewhere I’m guessing?
Proxmox Backup Server: Incremental de-duplicateed image backups of the whole VM, with possibility of individual file restore. It’s like magic
For the legacy bare metal system I have rsnapshots of the data folder (set it up ages ago, and never changed it)
An nginx LXC container has a single static backup of the container, with the nginx config file stored in a git repo