Jeff Geerling even wrote an Ansible role to do all of the heavy lifting for you. I've used it alongside vagrant to spin up a three node cluster in ~15 minutes.
https://github.com/kubernetes/kops
Be aware of this bug at scale ... its interesting
https://blog.quentin-machu.fr/2018/06/24/5-15s-dns-lookups-o...