I use VMs for OS isolated and hardware isolation. I run containers on top of OSs for apps.
That said I use Harvester so I can run containers on bare metal AND VMs as containers.
Even on one bare metal I do this, so I can spin up a test VM of harvester to confirm configs. If you one node is super beefy a neat trick is to have VMs running a cluster so you can have a kind of high availability even if your infra is a single point of failure.