This surfaces the token generation logic so that users can first generate and store a token, then pass it to kubeadm init/join. Otherwise, users have to capture and parse the output of "kubeadm init" to feed the token to "kubeadm join."