Proxmox cluster resource scheduling doesn’t balance VMs across nodes. It never has. The scheduler only kicks in when a node fails or you manually migrate something. So if you’re waiting for it to move a busy VM off a loaded node, you’ll be waiting forever.

What the scheduler actually does
Proxmox uses a static resource scheduler. When you start a VM or container, it picks a node based on CPU and memory available at that moment. After that, it doesn’t touch it. No rebalancing, no load-based migration, nothing. It’s not VMware DRS.
The only automatic movement happens with HA. If a node dies, the HA manager restarts its VMs on other nodes. That’s it. That’s the whole magic.
Testing it with two nodes
I set up a two-node cluster with HA enabled. Put four VMs on node A, none on node B. Started a CPU stress test on node A’s VMs. Watched the cluster for an hour.
Nothing moved. Node A sat at 90% CPU, node B idle. The scheduler didn’t care. It only looks at resources when you ask it to start something new.

What you can configure
If you want better placement, you have a few options:
- HA groups — set
ha-groupwithrestrictedandnofailbackto control where VMs go after a failover. - Resource limits — set CPU and memory limits on VMs so the initial placement is more even.
- Manual migration — just move the damn VM yourself. It’s a homelab, not a datacenter.
There’s no built-in DRS-like feature. You can script something with pvesh and cron, but that’s overkill for most people.
My take
Don’t overthink it. Proxmox cluster resource scheduling is basic, and that’s fine. If you need automatic load balancing, you’re probably running a bigger setup than a homelab. For the rest of us, start VMs where you want them and move them when you need to.
If you’re setting up HA, make sure your nodes can actually see each other. A split-brain cluster will cause more problems than it solves. Check out Proxmox configuration validation before you reboot anything.