For sure it makes more sense to have multiple hosts (VMs) for containers. All in one host is only good for demo/PoC/test chaincode, etc.
I have written some articles showing how to make a multi-host deployment. So far I have tested static IP and Docker Swarm. The former is good for static setup, much easier, while the latter relies on Docker’s capability to achieve the multi-host environment, much dynamic while having dependency on docker (outside fabric), which is something I always hesitate using.
From time to time fabric network on k8s is raised. I know some deployments done on k8s, but haven’t gone into very in depth. Not an easy as both k8s and Hyperledger Fabric are quite mature (and therefore complex) setup and it takes effort to glue them together. Due to the popularity of k8s I am sure there might be some “standard” setup later from Fabric team, and hopefully it’s more proven and production ready.