<p>For some reason my master node can no longer connect to my cluster after upgrading from kubernetes 1.11.9 to 1.12.9 via kops (version 1.13.0). In the manifest I'm upgrading <code>kubernetesVersion</code> from 1.11.9 -> 1.12.9. This is the only change I'm making. However when I run <code>kops rolling-update cluster --yes</code> I get the following error:</p>

<pre><code>Cluster did not pass validation, will try again in "30s" until duration "5m0s" expires: machine "i-01234567" has not yet joined cluster.
Cluster did not validate within 5m0s
</code></pre>

<p>After that if I run a <code>kubectl get nodes</code> I no longer see that master node in my cluster.</p>

<p>Doing a little bit of debugging by sshing into the disconnected master node instance I found the following error in my api-server log by running <code>sudo cat /var/log/kube-apiserver.log</code>:</p>

<p><code>controller.go:135] Unable to perform initial IP allocation check: unable to refresh the service IP block: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:4001: connect: connection refused</code></p>

<p>I suspect the issue might be related to etcd, because when I run <code>sudo netstat -nap | grep LISTEN | grep etcd</code> there is no output.</p>

<p>Anyone have any idea how I can get my master node back in the cluster or have advice on things to try?</p>

<p>I have made some research I got few ideas for you:</p>

<ol>
<li><p>If there is no output for the etcd grep it means that your etcd server is down. Check the logs for the 'Exited' etcd container <code>| grep Exited | grep etcd</code> and than <code>logs &lt;etcd-container-id&gt;</code></p></li>
<li><p>Try this <a href="https://github.com/kubernetes/kops/issues/5864#issuecomment-426771043" rel="nofollow noreferrer">instruction</a> I found:</p></li>
</ol>

<blockquote>
  <p>1 - I removed the old master from de etcd cluster using etcdctl. You
  will need to connect on the etcd-server container to do this.</p>
  
  <p>2 - On the new master node I stopped kubelet and protokube services.</p>
  
  <p>3 - Empty Etcd data dir. (data and data-events)</p>
  
  <p>4 - Edit /etc/kubernetes/manifests/etcd.manifests and
  etcd-events.manifest changing ETCD_INITIAL_CLUSTER_STATE from new to
  existing.</p>
  
  <p>5 - Get the name and PeerURLS from new master and use etcdctl to add
  the new master on the cluster. (etcdctl member add "name"
  "PeerULR")You will need to connect on the etcd-server container to do
  this.</p>
  
  <p>6 - Start kubelet and protokube services on the new master.</p>
</blockquote>

<ol start="3">
<li>If that is not the case than you might have a problem with the certs. They are provisioned during the creation of the cluster and some of them have the allowed master's endpoints. If that is the case you'd need to create new certs and roll them for the api server/etcd clusters.</li>
</ol>

<p>Please let me know if that helped. </p>
