Skip to main content
RunBook Academy

KubernetesLXVII · etcd Quorumetcd quorum

Failure domain placement — AZs, racks, hosts, and cost of spread

Advanced⏱ ~16 minetcdctl

What you'll learn

  • Map failure domains onto member placement
  • Reason about quorum under AZ loss
  • Choose between stacked and external etcd for spread
  • Plan host-level, rack-level, and AZ-level placement

Prerequisites

Verified against Kubernetes 1.34.x · kubeadm 1.34.x · kubectl 1.34.x · etcd 3.6.x · CoreDNS 1.11.x · containerd 1.7.x / 2.x · 2026-08-16

Not yet marked complete on this device.

etcd’s fault tolerance is bounded by the failure domain that loses the most members in the worst case. If two members share a switch and the switch fails, two members are lost at once; if those two members are in a 3-member quorum of 2, the cluster is broken. Failure-domain placement is the discipline that aligns the cluster’s hardware topology with the fault tolerance the operator needs.

Failure domains in the order of frequency

flowchart TB
    HOST[host] --> RACK[rack] --> AZ[availability zone] --> REGION[region]
    HOST -.->|frequent| FRQ[common failure]
    RACK -.->|moderate| MOD[domain loss]
    AZ -.->|rare| RARE[AZ outages happen]
    REGION -.->|very rare| VRARE[multi-AZ regions are designed for AZ-loss, not region-loss]

The typical failure frequency:

DomainFrequencyTypical failure
Hosthost reboot / crashroutine maintenance
Rackswitch / poweryear-rare
AZcloud AZ outageyear-rare
Regionmulti-AZ outagedecade-rare

etcd placement should cover host and rack routinely; AZ loss for production; region loss for the most stringent.

The 2/2/1 pattern

The most common production placement:

flowchart LR
    subgraph AZ1[AZ-a]
        M1
        M2
    end
    subgraph AZ2[AZ-b]
        M3
        M4
    end
    subgraph AZ3[AZ-c]
        M5
    end
FailureResultQuorum
Any host loss4/5 healthyOK
AZ-a loss3/5 (AZ-b + AZ-c)OK
AZ-b loss3/5 (AZ-a + AZ-c)OK
AZ-c loss4/5 (AZ-a + AZ-b)OK
Both AZ-a and AZ-b loss1/5quorum loss
Multi-host within same AZdependsdepends

The 2/2/1 placement is robust against any single AZ loss.

The 3/2 problem

The 5-member cluster spread 3/2 across two AZs:

FailureResultQuorum
AZ with 3 members loss2/5 (other AZ)quorum loss
AZ with 2 members loss3/5 (other AZ)OK

The 3/2 placement is fragile to the loss of the AZ with 3 members. This is the common “we have 5 members but two AZs” failure.

The fix is to make the placement symmetric: 2/2/1 (3 AZs) or external etcd.

Host-level placement within an AZ

Within an AZ, members should be spread across:

  • Hosts: each member on a different physical or virtual host.
  • Racks: not always possible in a small AZ, but preferred.

A 3-member cluster in one AZ:

flowchart LR
    R1[Rack 1] --> M1
    R1 --> M2
    R2[Rack 2] --> M3

2 members in one rack, 1 in another. The rack with 1 member is the failure-domain-weak point within the AZ; the rack with 2 is the same risk as 2/1 spread. In a single AZ without multiple racks, host placement is the only dimension.

External etcd — failure-domain separation

External etcd moves the failure-domain choice for etcd out of the control-plane hosts:

flowchart LR
    subgraph ControlPlane[Control plane hosts]
        AS1[API server cp-1]
        AS2[API server cp-2]
        AS3[API server cp-3]
    end
    subgraph ExternalEtcd[External etcd hosts]
        E1[etcd member 1]
        E2[etcd member 2]
        E3[etcd member 3]
    end
    AS1 -.-> E1
    AS2 -.-> E2
    AS3 -.-> E3

External etcd places the etcd failure domain on dedicated hosts. The control-plane hosts can fail without touching etcd; etcd can fail without taking the control plane off the air (the API servers will error writes until etcd recovers).

flowchart LR
    AS -->|write attempt| E
    E -->|healthy| OK1[commit]
    E -->|down| FAIL[API server timeout]

The failure-domain separation is the reason this topology exists. The cost is two sets of hosts (3+3 = 6).

Cloud-specific AZ constraints

Cloud AZs have different failure characteristics:

CloudAZ loss frequencyNotes
AWSrareAZs are physically distinct; loss is multi-month rare
GCPrareSame as AWS for the most part
AzurerareSame; some regions have AZ-pairing that affects layout
On-premdependsOn-prem AZs are user-defined (room, row, rack); failure mode is whatever the operator designed

The on-prem operator should document what their “AZ” means: is it two rooms? Two power feeds? Two switches?

Single AZ, single rack — the home-lab case

A home-lab or staging cluster typically has one host per “failure domain”. A 3-member cluster on one physical host three VMs is not placing etcd in multiple failure domains — all three etcd members share the host’s power and storage. The cluster is fault tolerant to member crash but not to host crash.

A 3-member cluster on three physical hosts in one rack places failure domain at the host level. This is the typical staging setup; it is not production-grade.

Designing the placement

For a new cluster, the placement decision:

  1. Locate the failure domains. What are the independent failure domains in your environment?
  2. Pick a size that aligns with their count. A cluster across 3 AZs wants 5 members (2/2/1); a cluster across 2 AZs wants 5 members but with the constraint that losing the AZ with more members is unsafe.
  3. Place host-level within the AZs. Each member on a different host.
  4. Place rack-level where possible. Distribute across rack PDUs and switches.
  5. Document the placement. The runbook should state which member is in which AZ / rack / host.

Common anti-patterns

Anti-patternConsequence
All members on one hostSingle host failure = quorum loss
All members on one rackSingle rack PDU = quorum loss
3/2 split across two AZsLoss of AZ with 3 members = quorum loss
2/2/2 split with 6 membersEven number; no gain over 5/2/1 etc.
“Spread” via Kubernetes pod anti-affinity (etcd in pods)Schedule around a noisy neighbour is impossible for etcd
Migration between AZs without member rotationCluster ends up with members on the wrong AZ; spread breaks

Quiz

Knowledge check · 4 questions

  1. Q1. A 5-member etcd cluster is deployed 2/2/1 across three AZs. Which AZ loss is recoverable without losing quorum?

  2. Q2. Placing etcd members on three VMs sharing one physical host is acceptable production placement as long as the VMs are on different hypervisors.

  3. Q3. A team operates a 5-member etcd cluster across two AZs in a 3/2 split. They discover that the AZ with 3 members is a higher-cost AZ. They want to move to 2/2/1 across three AZs. Walk the migration.

    Cluster: AZ-a (m1, m2, m3), AZ-b (m4, m5). New AZ-c is being commissioned. Goal: end with 2/2/1 spread. The cluster is production-critical.

  4. Q4. What is the failure-domain implication of running etcd as a kubeadm static pod on the same hosts as the API server, scheduler, and controller manager?

Passing score: 75%. Answers are checked in this browser.

Production discipline

  • Spread at the failure-domain count. Members across as many independent failure domains as the deployment can sustain, with the cluster quorum surviving the loss of any one domain.
  • Document the placement. Members to AZs to hosts to racks. The runbook must say this in one place.
  • Re-validate spread on rebuilds. A member replaced on a different host is a placement change. Update the document.
  • Plan migrations when topology changes. Changing the AZ layout requires a sequenced member add/remove operation; do not skip steps.

Failure-domain placement is the most common source of etcd outages that look like software bugs but are actually placement bugs.