I run a couple of small clusters and my Ansible script for installing them is pretty much:
* Set up the base system. Set up firewall. Add k8s repo. Keep back kubelet & kubeadm.
* Install and configure docker.
* On one node, run kubeadm init. Capture the output.
* Install flannel networking.
* On the other nodes, run the join command that is printed out by kubeadm init.
Running in a multi-master setup requires an extra argument to kubeadm init. There are a couple of other bits of faffing about to get metrics working, but the documentation covers that pretty clearly.I'm definitely not knocking k3s/microk8s, they're a great and quick way to experiment with Kubernetes (and so is GKE).