None of it needs to be on VMs, but it's generally more convenient to manage when it is. You could also use something like Kubernetes, but then you're administering Kubernetes.