Proxmox VE
The five-node high-availability cluster that every VM in the lab is provisioned onto - the metal underneath the whole platform.
What it is & why I use it
Proxmox VE is an open-source virtualization platform that combines KVM virtual machines and LXC containers with clustering, high availability, and software-defined storage under one API. I chose it as the base layer for AutomationLab because it gives me a real, API-driven hypervisor cluster - the same primitives a production platform team works with - without a per-socket licensing model getting in the way of experimentation.
The point of the lab is to treat infrastructure as something you declare and automate, not something you click together. Proxmox exposes everything through a REST API, which is exactly what lets Terraform stand VMs up from code instead of from a wizard.
How I use it in the lab
- Five nodes, clustered. The cluster runs as a single management plane with a shared quorum, so I administer all nodes as one system rather than five separate hosts.
- High availability. Selected VMs are enrolled in HA groups; if a node fails, the cluster restarts those guests elsewhere automatically. Enrollment is the final, deliberate step of provisioning - not the default - so I control exactly what is allowed to migrate.
- Terraform-driven. Each VM gets its own Terraform workspace using the
bpg/proxmoxprovider. A pipeline plans and applies against the cluster API; there is no hand-built VM anywhere in the lab. - Dynamic load balancing. The cluster rebalances running guests across nodes based on load, so no single node becomes a hotspot as the lab grows.
- Clean decommission. The provisioning flow reverses cleanly - HA de-registration, then destroy - so tearing a VM down is as automated as building it.
Architecture
In action
Lessons learned & gotchas
- HA is a promise you have to mean. Enrolling a guest in HA means the cluster will happily restart it on another node - including after a transient blip. Anything with node-local state has to be designed for that before you enroll it, or you will be surprised at the worst time.
- The API is the contract. Once every VM comes from Terraform against the API, drift shows up as a plan diff instead of a mystery. Clicking a change in the UI just means the next apply wants to undo it - so I stopped doing that.
Impact
Proxmox turned "the lab" from a pile of machines into a single programmable substrate. Everything above it - GitOps, monitoring, identity - assumes it can ask for a VM and get one, reliably, from code. That assumption is what makes the rest of the platform possible.
Code & further reading
Repository links point to scrubbed, public-safe versions of the lab's Terraform and pipeline code. Internal addresses, hostnames, and secrets are never published.