Build1 distinct publisher3 min readUpdated
A homelab k3s build put embedded etcd on microSD cards and USB Ethernet. The reported latency numbers point at I/O contention, not the consensus timeouts the write-up blames.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A homelab operator publishing as dwoitzik on dev.to replaced three Proxmox VMs with three Raspberry Pi 5 nodes running k3s control plane and embedded etcd, then reverted after three weeks because the cluster was less reliable than the single-node setup it had replaced [1][2]. Nothing crashed, which is what makes the write-up worth reading: the fragility sat in the storage and the interconnect underneath the consensus layer, not in Kubernetes [3].
The build was three Pi 5s with 8GB of RAM, 256GB A2-rated microSD cards, gigabit Ethernet through USB 3.0 adapters, and k3s v1.31 with embedded etcd [4]. The adapters were chosen because the author considers the Pi 5's native Ethernet limited, a description the post does not quantify [5]. The post also carries Amazon affiliate links for hardware the author says he owns and uses [6].
The write pattern is the core of the argument, and it is sound. Every API operation, from pod scheduling to configmap updates to secret rotation, becomes an etcd write, and embedded etcd writes continuously to the local filesystem [7]. The A2 rating of roughly 150 MB/s sequential is the wrong number for that workload; the random small-block writes are a different story [8]. What the author measured was etcd response times occasionally jumping from 10ms to 500ms or more with no CPU load, network congestion or memory pressure to explain it [9], against microseconds for the same writes on the NVMe-backed VMs [10].
Where the post overreaches is the causal chain to outages. It attributes brief API unavailability to etcd leader elections triggered when write latency exceeds the default 5s election timeout [11], with a re-elected leader on an equally slow card failing the same way, so the API server drops out while every node reports healthy [12]. The arithmetic does not reach that far. A 500ms spike is one tenth of the 5s budget [1]. The network penalty the post computes, about 0.5ms per USB adapter hop and roughly 2.5ms for a full write-replicate-acknowledge round trip [13] versus about 0.1ms on the VMs, which it calls a 25x increase [14][2], is about 0.05 percent of that same budget [3]. Twenty-five times a very small number is still very small. The post reports no leader-change counts, no outage durations, and no etcd fsync or backend commit figures beyond the 10ms-to-500ms range [15].
The co-tenancy mechanism holds up better. The Pis were already running AdGuard Home and Unbound for network DNS, Keepalived for a VIP, and node_exporter, so k3s made four services contending for one CPU, one memory pool and one card [16]. The author describes AdGuard cache refreshes landing at the same time as etcd compaction, both hitting the card at once [17]. That is queueing, and it does not need a five-second stall to be damaging: an API server that intermittently answers 50 times slower is already a poor dependency [4].
The revert, logged as ADR-014, put the sole control plane and etcd on one NVMe-backed VM with two agent-only workers [18]. The stated cost is that losing the server loses the cluster, with no failover [19], which in this context means minutes of restart rather than an outage with users attached [20]. The Pis kept DNS and Keepalived, work the author characterises as low-write and mostly reads after cache warm-up [21].
If you run the same layout, instrument etcd disk fsync and backend commit latency and count leader changes before you tear anything down. If fsync dominates, moving etcd's data directory off the shared card is cheaper than surrendering HA; if leader changes are rare, the outages had a different cause. Three of anything buys availability, not reliability.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Observed symptom: etcd response times would occasionally jump from 10ms to 500ms or more with no CPU load, network congestion or memory pressure, attributed to slow disk writes.
On an NVMe-backed VM, etcd writes complete in microseconds; on an SD card they are orders of magnitude slower.
A homelab author publishing on dev.to as dwoitzik planned and built three Raspberry Pi 5 control-plane nodes running k3s with embedded etcd, replacing three Proxmox VMs.
After three weeks of monitoring, the author concluded the k3s-on-Pi cluster was less reliable than the single-node setup it replaced, and reverted.
The author describes the failure as undramatic: no kernel panic and no cluster death, but a slow accumulation of fragility.
Cluster spec: 3x Raspberry Pi 5 (8GB), 256GB A2-rated microSD cards, gigabit Ethernet via USB 3.0 adapter, k3s v1.31 with embedded etcd.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One first-party account with a single latency figure
Everything rests on one self-published build log. It contains exactly one empirical datapoint (etcd response times of 10ms to 500ms+), one modelled network figure, and no election counts, outage durations or etcd fsync/backend-commit metrics. The storage-mismatch mechanism is plausible and internally described, but the stated causal chain through consensus timeouts is contradicted by the post's own numbers.
One homelab deployment, since reverted
Adoption evidence is limited to a single hobbyist operator who deployed the three-Pi control plane, ran it three weeks, and rolled back to a single-server topology. No third-party deployments, usage disclosures or fleet data appear in the cluster.
Generalised verdict outruns the reported measurements
The headline generalises a single reverted homelab experiment into advice for other readers, and the diagnostic framing blames etcd consensus timeouts that the post's own 500ms spike and 2.5ms round trip never come near. The underlying observation — microSD plus co-resident DNS writes produce unpredictable etcd write latency — is credible, but the causal story and the emphasised 25x network multiplier are stated with more certainty than the instrumentation supports.
Disclosed affiliate links on the hardware discussed
The author discloses asterisk-marked Amazon affiliate links, including for the Raspberry Pi 5 (8GB) that is central to the story, creating a modest commercial interest in traffic to hardware recommendations. The disclosure is prominent and up-front, and the post argues against the very use case it links hardware for, which limits how much the incentive can be read as directional. No vendor sponsorship or other funding is disclosed.
Moderate on the storage lesson, low on the diagnosis
Confidence is bounded by the single-source, single-metric evidence base and by an internal inconsistency between the reported latency and the mechanism blamed. The narrow operational takeaway — do not host embedded etcd on microSD shared with other writers — is reasonably supported by the author's direct experience and self-consistent reasoning; the broader verdict about k3s on Raspberry Pi is not independently verifiable from this cluster.
build
One alert, two causes, four green dashboards: the day the stack agreed and was wrong1 distinct publisher
build
Thirteen tasks green, then "give up (Recommended)" on the one that needed understanding1 distinct publisher
build
Rate limit your MCP servers, because a retrying agent turns one error into a billing incident1 distinct publisher
build
Your meter now runs on someone else's machine: signed receipts, fsync, and failing open1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 15, 2026