I run Ansible against Proxmox hosts to ensure the config on them is what I want, and then Terraform all VMs into place on them. It's not too far off from having your own mini-EC2, minus some of the nice trappings like load balancers.
At $DAYJOB, we use the Telmate terraform proxmox provider, too. Upgrades over the years have had a few papercuts (mainly when values are shifted around), but it has overall been an immense timesaver. A terraform repo contains the 2 colocation datacenter proxmox environments plus a local lab edition of the same builds (locallab uses containers vs full VM's on the "real" hardware so that I can run almost all of the configuration on my laptop). Saltstack gets deployed during the buildouts, which picks up the OS/ application configuration after the OS is deployed.
No agentic stuff on our stack, as our security posture can't afford that currently.
As for the load-balancing, I think the later versions have supported targeting proxmox clusters vs a single node, and the newest Proxmox can do resource auto-balancing. That might get you what you need
Ah, I mean load balancing like an AWS ALB; obviously one can use an Nginx or HAproxy for that, but it's not a primitive, you need to deploy a machine and run it.
They have auto-balancing now? Damn. I wrote a balancer using the Google OR-SAT solver because there was no VMWare DRS equiv.
I will consider switching, but with like 400 VMs now it'd be a lot of work. Do you happen to know if it lets you deal with disks separately from the VM host? Used to use that flow on VMware, taint a machine but not its stateful secondary disk, and bring it back up with a fresh image and re-attach a database disk or whatever.
I run Ansible against Proxmox hosts to ensure the config on them is what I want, and then Terraform all VMs into place on them. It's not too far off from having your own mini-EC2, minus some of the nice trappings like load balancers.