Is it better to install a very large Postgres database (billions of rows) in a real or a virtual machine? From my common sense, my physical machine hosting a very large Postgres database (for big data) should be real rather than virtual or container.  

Some people say it is better to install on a virtual machine or a container.  I would like to get opinion from those who works with database every day. I am looking for performance over everything else.  

Another question is about the storage: external or internal? I would think real internal disks with the RAIDs. Not sure external storage with logical volumes are better or not.
Your decision on VM or not shouldn't be so much determined by the number of rows but rather the availability, scaling, technical expertise, company culture, and performance based on your hardware availability.  

You can run billions of rows in VMs.  Obviously you'd want to find the database engines best practices doc for your hypervisor and follow them carefully.  You should conduct plenty of testing to ensure it meets your needs and also test your HA solutions if needed for your SLAs.

External and internal at the end of the day come down to availability and IOPS or MBps.  If you have the expertise to run a fast external source reliability, great!  If you don't, then it would be safer to go internal.  Internal will be faster anyways by default without any special configuration or external hardware anyways and you should be testing your perf. reqs. but with SSDs and the latest nand solutions you're a lot less likely to under perform.