I do all of this with kubernetes. For VM workloads, I use kubevirt (which is libvirt controlled by kubernetes). It runs extremely well, is lightweight, and it’s very consistent to operate.
At one point I had a lot more layers to this. As I became more competent and aware use the ecosystem, it all flattened into bare metal kubernetes.
They’ll catch up with me eventually.