vdevs are made of individual devices, and the zpool is made of vdevs.
Anything with a descriptor in /dev that allows random access will work.
vdevs can be built from:
Disks - The most common block devices.
Entire hardware RAID arrays can used as individual devices.
Simple raw files.
Test pools made of sparse files are an incredibly convenient way to practice zpool commands, and see how much space is available on a pool or vdev of a given topology.