<p>I have K8s cluster with 3 nodes &quot;VMs&quot; doing both master/worker with Etcd installed on all of the 3 nodes &quot;untainted master&quot; installed via kubespray &quot;kubeadm based tool&quot;</p>
<p>Now I would like to replace one VM with another.
Is there a direct way to do so because the only workaround will be adding 2 nodes to have always an odd number of ETCD via kubespray scale.yml ex:node4 and node 5  then removing the additional node3 and node 5 keeping node 4</p>
<p>I don't like the approach.</p>
<p>Any ideas are welcomed</p>
<p>Best Regards</p>

<p>If you have 3 main (please avoid using master, 💪) control plane nodes you should be fine replacing 1 at a time. The only thing is that your cluster will not be able to make any decisions/schedule any new workload, but the existing workloads will run fine.</p>
<p><a href="https://docs.goquorum.com/en/latest/Consensus/raft/raft/" rel="nofollow noreferrer">The recommendation of 5 main nodes</a> is based on the fact that you will always have a majority to reach quorum on the state decisions 📝 for etcd even if one node goes down. So if you have 5 nodes and one of them goes down you will still be able to schedule/run workloads.</p>
<p>In other words:</p>
<ul>
<li><p>3 main nodes</p>
<ul>
<li>Can tolerate a failure of one node.</li>
<li>Will not be able to make decisions</li>
</ul>
</li>
<li><p>5 main nodes</p>
<ul>
<li>Can tolerate a failure of one node.</li>
<li>Can still make decisions because there are 4 nodes still available.</li>
<li>If 2 failures happen then it's tolerated but there is no quorum.</li>
</ul>
</li>
</ul>
<p>To summarize, Raft 🚣 which is the consensus protocol for etcd tolerates up to (N-1)/2 failures and requires a majority or quorum of (N/2)+1. The recommended procedure is to update the nodes one at a time: bring one node down, and then a bring another one up, and wait for it to join the cluster (all control plane components)</p>
