<p>I was following instructions at <a href="https://kubernetes.io/docs/setup/independent/high-availability/#stacked-control-plane-and-etcd-nodes" rel="nofollow noreferrer">https://kubernetes.io/docs/setup/independent/high-availability/#stacked-control-plane-and-etcd-nodes</a> and I can't get the secondary master node to join the primary master.</p>

<pre><code>$&gt; kubeadm join LB_IP:6443 --token TOKEN --discovery-token-ca-cert-hash sha256:HASH --experimental-control-plane
[preflight] running pre-flight checks
[discovery] Trying to connect to API Server "LB_IP:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://LB_IP:6443"
[discovery] Requesting info from "https://LB_IP:6443" again to validate TLS against the pinned public key
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "LB_IP:6443"
[discovery] Successfully established connection with API Server "LB_IP:6443"
[join] Reading configuration from the cluster...
[join] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

One or more conditions for hosting a new control plane instance is not satisfied.

unable to add a new control plane instance on a cluster that doesn't use an external etcd

Please ensure that:
* The cluster has a stable controlPlaneEndpoint address.
* The cluster uses an external etcd.
* The certificates that must be shared among control plane instances are provided.
</code></pre>

<p>Here is my admin init config:</p>

<pre><code>apiVersion: kubeadm.k8s.io/v1alpha3
kind: ClusterConfiguration
kubernetesVersion: "1.12.3"
apiServer:
  certSANs:
  - "LB_IP"
controlPlaneEndpoint: "LB_IP:6443"
networking:
  podSubnet: "192.168.128.0/17"
  serviceSubnet: "192.168.0.0/17"
</code></pre>

<p>And I initialized the primary master node like:</p>

<pre><code>kubeadm init --config=./kube-adm-config.yaml
</code></pre>

<p>I have also copied all the certs to the secondary node and kubectl works on the secondary:</p>

<pre><code>[root@secondary ~]# kubectl get nodes
NAME                            STATUS   ROLES    AGE   VERSION
primary.fqdn                    Ready    master   8h    v1.12.3
</code></pre>

<p>I was really hoping to not set up external etcd nodes. The instructions seem pretty straightforward and I don't understand what I am missing.</p>

<p>Any advice to help get this stacked control plane multi-master setup with local etcd to work would be appreciated. Or any debugging ideas. Or at least "stacked control plane doesn't work, you must use external etcd".</p>

<p>Upgrading to k8s version 1.13.0 resolved my issue. I think the instructions were specifically for this newer version.</p>
