Totally agree with what joeschmuck said, just want to add a few things. Hopefully other can chime in, I am not certain on all of these things, so take it with a grain of salt.
SSD internal write amplification
SDD firmwares are like black magic. You don’t really know what is happening inside.
So just because you only write 4k, that does not mean that this is what is happening inside. That is also why TBW alone is not the whole story. For cheap consumer drives, TBW could have been calculated on the assumption that you only write larger than 64k files to it. Writing 1TB onto them can show up as 4TB written in the SMART data. That is why believe to remember some enterprise drives to specify the TBW for small 4k writes.
Firmware risks
Are all drives the same model? If yes, realize that a single firmware bug (this is not theoretical, we had those in the past) can wipe out your pool. If you have two different models, I would put model A and model B in a mirror and then stripe over these 5 mirrros. We would call that RAID10 in a non ZFS context.
write ampflification ZIL
You will get some write ampflification for sync writes. Sync writes happen twice. One time onto disk, another time onto the ZIL (which is also on the pool, unless you have a SLOG)
write ampflification from volblocksize
default blocksize or volblocksize is 16k. So your VMs will get offered 16k blocks from ZFS. But what if your Windows VM opens up a 4k txt file? First of all, you need to read the whole 16k block containing that file. You make some small changes and save it. Now you might think that you only have to write 4k, but you have to rewrite a 16k block. That 16k block itself will need to write 36k on a mirror or 24k (8k parity + 16k data) on a RAIDZ2. But yeah, your 4k write ended up worst case being a 36k write.
storage efficiency
You might be tempted to use all your 1TB (just an assumption) SSDs in a 10wide RAIDZ2. You would assume that just like with RAID6, this will give you (10-2)*1TB=8TB usable storage. But blockstorage behaves differently.
All your storage is just many, many 16k blocks. How do 16k block behave on ZFS?
With 10 drives, we need a stripe only 6 drives wide.
This is because we don’t need 10 drives to store 16k of data.
Each stripe has four 4k data blocks and two 4k parity blocks.
That gets us to 24k in total to store 16k of actual data.
We expected a storage efficiency of 80%, but only got 66.66%!
Because we can’t use a stripe that is 10 drives wide, only 6 drives.
So we have 4/6*100 = 66.66% and not 8/10*100 = 80%!
If you are interested in this topic, here is an more detailed explanation.
You can counter that efficiency problem by using 64k as volblocksize instead. But remember the 4k write we described earlier? Well, that is now a 128k write in a mirror.
TLDR: 66.66% instead of 50% is not worth the performance downsides of RAIDZ2 over striped mirrors (RAID10). But of course this depends on what VMs you plan on running, what drive models you have and so on.