Understand that I routinely manage QEMU machine configs by hand, because it's trivial. Perhaps I lack perspective.
But I'll answer your question directly, nonetheless. At ~45 VMs, I consider the system "small."
Understand you're going to need intimate familiarity with the extant tools. Not that it's hard or anything. It's not point/click Proxmox style, though.
It may be overkill in terms of features but it's a free as in beer tool that novices can install and run with quickly without much of a learning curve.
There are just a lot of people where as soon as you say “code” or “text editor” they are out.
My proxmox stack is manually managed in the management GUI, but my Linux VMs within that setup are all managed with a Chef server that runs on one of the VMs. (I would say I only chose Chef because I use it at work and I have recent familiarity and figured I could learn more about it)
Basically I do the standard graphical Debian installer and then run a bootstrap script that registers each system as a client.
The next thing I’d like to do is figure out cloud-init with Proxmox so that I don’t have to do that manual installation process anymore.
This setup works okay for me as-is since I only have about 5 VMs at a time, it’s just a hobbyist setup.
Great approach. Might try that.
> The next thing I’d like to do is figure out cloud-init with Proxmox so that I don’t have to do that manual installation process anymore.
Yeah. cloud-init...
The only advice I have there is: use only core cloud-init capabilities -- the stuff that's been around for years, works everywhere and is unlikely to change in subtle ways -- and factor everything else into a shell script that does the rest, which you invoke from cloud-init.
For chef you put a client validator key in a specific location along with a first boot json file that has details about the client’s policy name and group.
After that it’s pretty much just installing the chef client and running it.
I've been known to just start VMs from the CLI directly, for experimental purposes. The tooling everyone uses (Proxmox, virt-*, etc.) obscures the fact that spawning a VM is just a command with a bunch of switches. I suppose that familiarity for me came from using QEMU to emulate other archs on x86 for embedded development purposes: launching ARM VMs, for example.
And what about redundancy and backups? Even a one-person business needs those, and small businesses arguably have fewer resources to spend on manual DR processes.
As to the "cave person" nonsense: I version control VMs, I can reproduce the whole stack from git, script any conceivable deployment... I'm not a cave person. I've just been inculcated to this whole world of VM management since before proxmox was a thing. It really isn't the hairball you think it is. People routinely author docker compose scripts and collections of k8s yaml deployments that are far more intricate than a VM config, and consider themselves on plane with modern devops.
> And what about redundancy and backups?
What about them? There are many was to solve that, and nearly all of them are better done using storage system tools: NAS, ZFS, NetApp, LVM, EBS, etc. I made that point elsewhere: the real problem with VM management isn't provisioning VMs. It's storage. Solve that and the rest is pretty basic.