Why An Odd Number Of Server Nodes?
+
+An etcd cluster must be comprised of an odd number of server nodes for etcd to maintain quorum. For a cluster with n servers, quorum is (n/2)+1. For any odd-sized cluster, adding one node will always increase the number of nodes necessary for quorum. Although adding a node to an odd-sized cluster appears better since there are more machines, the fault tolerance is worse. Exactly the same number of nodes can fail without losing quorum, but there are now more nodes that can fail.
+
+
+
+![High Availability](/img/rke2-production-setup.svg)
+
Agents register through the fixed registration address. However, when RKE2 launches the kubelet and it must connect to the Kubernetes api-server, it does so through the `rke2 agent` process, which acts as a client-side load balancer.
Setting up an HA cluster requires the following steps:
@@ -17,6 +25,7 @@ Setting up an HA cluster requires the following steps:
1. Join additional server nodes
1. Join agent nodes
+
### 1. Configure the Fixed Registration Address
Server nodes beyond the first one and all agent nodes need a URL to register against. This can be the IP or hostname of any of the server nodes, but in many cases those may change over time as nodes are created and destroyed. Therefore, you should have a stable endpoint in front of the server nodes.
@@ -65,6 +74,11 @@ Note: The NGINX Ingress and Metrics Server addons will **not** be deployed when
### 3. Launch additional server nodes
Additional server nodes are launched much like the first, except that you must specify the `server` and `token` parameters so that they can successfully connect to the initial server node.
+:::info Matching Flags
+It is important to match critical flags on your server nodes. For example, if you use the flag `--cluster-cidr=10.200.0.0/16` on your first server node, but don't set it on other server nodes, the nodes will fail to join. They will print errors such as: `failed to validate server configuration: critical configuration value mismatch.`
+See [Server Configuration](../reference/server_config.md#critical-configuration-values) for more information on which flags must be set identically on server nodes.
+:::
+
Example of RKE2 config file for additional server nodes:
```yaml
diff --git a/docs/reference/server_config.md b/docs/reference/server_config.md
index d3882dd3..e92f8d00 100644
--- a/docs/reference/server_config.md
+++ b/docs/reference/server_config.md
@@ -104,3 +104,16 @@ OPTIONS:
--etcd-extra-env value (components) etcd extra environment variables [$RKE2_ETCD_EXTRA_ENV]
--cloud-controller-manager-extra-env value (components) cloud-controller-manager extra environment variables [$RKE2_CLOUD_CONTROLLER_MANAGER_EXTRA_ENV]```
```
+
+## Critical Configuration Values
+
+The following options must be set to the same value on all servers in the cluster. Failure to do so will cause new servers to fail to join the cluster.
+
+* `--agent-token`
+* `--cluster-cidr`
+* `--cluster-dns`
+* `--cluster-domain`
+* `--disable-cloud-controller`
+* `--disable-kube-proxy`
+* `--egress-selector-mode`
+* `--service-cidr`
\ No newline at end of file
diff --git a/static/img/logo-horizontal-rke2.svg b/static/img/logo-horizontal-rke2.svg
index 1793b959..3ed8c295 100644
--- a/static/img/logo-horizontal-rke2.svg
+++ b/static/img/logo-horizontal-rke2.svg
@@ -9,31 +9,12 @@
viewBox="0 0 345.9976501 111.362381"
style="enable-background:new 0 0 345.9976501 111.362381;"
xml:space="preserve"
- sodipodi:docname="logo-horizontal-rke2.svg"
- inkscape:version="1.2.2 (732a01da63, 2022-12-09, custom)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">