The question is not whether a home lab can beat a cloud provider on every axis. It cannot. The question is narrower: after tearing down the talos-redux Hetzner cluster, what is the cheapest replacement that can run the same early-stage workload without turning the monthly bill back on?
The answer is a stack of used corporate mini PCs. Not new NUCs. Not a used rack server. Not mini-PC colocation. Three business micros in Seattle are enough machine, cheap to power, quiet enough to live with, and boring enough to replace.
The Resource Target
The old cluster shape matters because "replace the cluster" can mean two different things. Replacing the always-on baseline is cheap. Replacing the maximum autoscale ceiling is a different purchase. For a bootstrapped project, the baseline is the right target.
| 1 | Old Hetzner baseline: |
| 2 | control plane: 1 x CPX31 |
| 3 | static workers: 3 x CPX21 |
| 4 | autoscale workers: 0-5 x CPX21 |
| 5 | ingress: 1 x LB11 |
| 6 | live volumes: 15 volumes / about 260 GB |
| 7 | |
| 8 | Baseline capacity: |
| 9 | compute: 13 shared vCPU |
| 10 | memory: 20 GB RAM |
| 11 | local boot disk: 400 GB total |
| 12 | network volumes: about 260 GB live |
| 13 | |
| 14 | Autoscale ceiling: |
| 15 | compute: 28 shared vCPU |
| 16 | memory: 40 GB RAM |
The checked-in workload definitions are smaller than the hardware shape. That is normal for Kubernetes: requests describe scheduling guarantees, limits describe a ceiling, and real usage is usually below both. The repo currently points at a few GiB of requested memory, not a 96 GB workload.
| 1 | Declared workload shape from the repo: |
| 2 | requests: about 2.5 vCPU / 4.75 GiB RAM |
| 3 | limits: about 10.45 vCPU / 12.69 GiB RAM |
| 4 | declared storage: about 350 Gi in checked-in manifests |
| 5 | live storage: about 260 GB before teardown |
| 6 | |
| 7 | Replacement target: |
| 8 | do not replace the autoscale ceiling first |
| 9 | replace the always-on baseline with room for bursty build work |
| 10 | make restore boring before making storage clever |
That is why a three-node home stack is not heroic. It is not trying to reproduce a production datacenter. It is replacing a small always-on platform with enough headroom to run apps, databases, observability, and occasional build work.
Why Used Micros
"NUC" has become shorthand for small x86 boxes, but the Intel-branded NUC is not the cost floor. Used Dell OptiPlex Micro, HP EliteDesk Mini, and Lenovo ThinkCentre Tiny machines are better buys because businesses bought them in volume and now unload them in volume.
The sweet spot is an eighth or ninth generation Intel business micro: i5-8500T or i5-9500T, 32 GB RAM, and 1 TB SSD. That class is old enough to be cheap, new enough to be efficient, and common enough that a failed node can be replaced from eBay instead of treated as a special procurement event.
| 1 | Buying rules: |
| 2 | include the power adapter |
| 3 | require returns |
| 4 | prefer 32 GB RAM already installed |
| 5 | prefer 1 TB SSD already installed |
| 6 | avoid no-RAM/no-SSD lots unless parts work is the point |
| 7 | avoid N100 nodes for the main cluster |
| 8 | avoid new retail mini PCs unless time matters more than cost |
The exact listing will age out, so the safer link is the search: Dell OptiPlex 7060 Micro 32GB 1TB on eBay . Equivalent fallback searches are HP EliteDesk 800 G4 Mini and Lenovo M920q Tiny . I would buy whichever one has the cleanest listing, included adapter, and returns.
Bill of Materials
This is the snapshot price model as of June 22, 2026. The machine price is based on a Dell 7060 Micro 32GB/1TB eBay listing at $189.88. Seattle sales tax is modeled at 10.55%.
| 1 | Recommended purchase: |
| 2 | 3 x Dell OptiPlex 7060 Micro, i5-8500T, 32 GB RAM, 1 TB SSD |
| 3 | unit: $189.88 |
| 4 | subtotal: $569.64 |
| 5 | Seattle tax: $60.10 |
| 6 | total: $629.74 |
| 7 | |
| 8 | 1 x APC BE600M1 UPS |
| 9 | unit: $83.99 |
| 10 | Seattle tax: $8.86 |
| 11 | total: $92.85 |
| 12 | |
| 13 | 1 x TP-Link TL-SG108 8-port gigabit switch |
| 14 | unit: $29.99 |
| 15 | Seattle tax: $3.16 |
| 16 | total: $33.15 |
| 17 | |
| 18 | 1 x Cat6 cable 5-pack |
| 19 | unit: $9.99 |
| 20 | Seattle tax: $1.05 |
| 21 | total: $11.04 |
| 22 | |
| 23 | Upfront total: |
| 24 | pre-tax: $693.61 |
| 25 | tax: $73.18 |
| 26 | total: $766.79 |
The UPS is not optional. The cluster does not need a large battery, but it does need enough buffer to survive short blinks and shut down cleanly. The switch is boring gigabit. The cables are boring Cat6. Rack hardware is deliberately excluded because a ventilated shelf works until there is an actual rack.
Supporting links: APC BE600M1 UPS , TP-Link TL-SG108 switch , and Cat6 cable pack .
Power and Backups
Seattle changes the math. At California residential rates, home hosting looks more marginal. At Seattle City Light residential rates, the power cost is small enough that hardware amortization dominates the model.
| 1 | Seattle power: |
| 2 | assumed draw: 85 W for the three-node stack |
| 3 | hours/month: 730 |
| 4 | rate: $0.1338/kWh |
| 5 | UPS overhead: 10% |
| 6 | |
| 7 | Formula: |
| 8 | 0.085 kW * 730 h * $0.1338/kWh * 1.10 = $9.13/month |
| 9 | |
| 10 | Backblaze B2: |
| 11 | old live volume set: 260 GB |
| 12 | price: $6.95/TB-month |
| 13 | estimate: $1.81/month |
| 14 | |
| 15 | Total recurring: |
| 16 | power: $9.13/month |
| 17 | backup: $1.81/month |
| 18 | total: $10.94/month |
The power source is Seattle City Light's residential rate page . The backup source is Backblaze B2 pricing . The backup number is intentionally simple: keep the old 260 GB live volume footprint offsite. If the checked-in 350 Gi storage declarations all become real data, the B2 estimate moves from about $1.81/month to about $2.43/month. That difference is not material.
Effective Cost
The right way to compare this to cloud is not only monthly power. The hardware is paid upfront, so the practical number is effective monthly cost over a horizon.
| 1 | Effective cost: |
| 2 | 12 months: ($766.79 + $10.94 * 12) / 12 = $74.84/month |
| 3 | 24 months: ($766.79 + $10.94 * 24) / 24 = $42.89/month |
| 4 | 36 months: ($766.79 + $10.94 * 36) / 36 = $32.24/month |
| 5 | |
| 6 | Cloud comparison: |
| 7 | old Hetzner rebuild: about $210/month after EUR conversion |
| 8 | 24-month home stack: about $43/month effective |
| 9 | 36-month home stack: about $32/month effective |
At 24 months, the home stack lands around $43/month effective. At 36 months, it lands around $32/month effective. That is not just cheaper than recreating the old Hetzner shape. It is cheaper enough that the project can stay bootstrapped without infrastructure cost becoming a recurring product decision.
What the Purchase Buys
| 1 | Three-node home stack: |
| 2 | nodes: 3 |
| 3 | CPU class: i5-8500T, 6 hardware threads each |
| 4 | aggregate CPU: 18 hardware threads |
| 5 | aggregate memory: 96 GB RAM |
| 6 | aggregate storage: 3 TB raw local SSD |
| 7 | |
| 8 | Compared to old baseline: |
| 9 | CPU: 18 hardware threads vs 13 shared vCPU |
| 10 | memory: 96 GB vs 20 GB |
| 11 | storage: 3 TB local vs 260 GB attached volumes |
| 12 | availability: worse than cloud for power/WAN/building failure |
| 13 | cost: much lower after the upfront buy |
The weakest part of the replacement is not CPU or RAM. It is failure domain. A cloud region is not the same as one house, one router, one UPS, one ISP, and one circuit. That is acceptable here because downtime is acceptable. The design optimizes for cost, comprehension, and recovery.
That also changes the Kubernetes storage answer. The lazy version is not Longhorn on day one. The lazy version is local storage, explicit backups, and a restore path that has actually been tested. Distributed storage can come later if restore pain becomes the bottleneck.
| 1 | Minimal operating model: |
| 2 | Kubernetes: k3s, all three nodes as server nodes |
| 3 | ingress: Cloudflare Tunnel to in-cluster services |
| 4 | admin access: Tailscale or WireGuard |
| 5 | storage class: local-path first |
| 6 | database: one primary Postgres, local NVMe, offsite logical backups |
| 7 | object storage: R2 or B2 instead of self-hosted MinIO |
| 8 | GitOps: keep ArgoCD if it keeps discipline; delete if it becomes ceremony |
| 9 | |
| 10 | Deferred: |
| 11 | Longhorn |
| 12 | Ceph |
| 13 | metal load balancer |
| 14 | rackmount hardware |
| 15 | LTE failover |
| 16 | remote hands story |
Single-Node Option
There is an even cheaper answer if the goal is only to get the apps back online: buy one mini PC, the UPS, and cables. That is roughly $314 upfront after Seattle tax and about $5.57/month for power plus B2. Over 24 months, it is about $18.64/month effective.
I would still buy three nodes if the goal is to replace the old cluster shape. Three nodes preserve the operational habit of scheduling, draining, upgrading, and losing a node without making every operation a full outage. One node is the cheapest app host. Three nodes are the cheapest useful cluster.
Decision
Buy three used corporate micros, not new NUCs. Put them on a UPS. Run k3s. Use Cloudflare Tunnel for public ingress and Tailscale for admin access. Store irreplaceable data outside the cluster. Do not add rack hardware, distributed storage, LTE failover, or colocation until one of those solves a problem that has actually appeared.
The old cluster was a useful platform when the bill was tolerable. After the price change and teardown, recreating it in cloud is mostly paying for continuity of shape. The home stack keeps the useful part: enough compute to keep building.