All posts

·10 min read

The Idle Tax

I priced my homelab as if I had to rent it — 22 Proxmox guests and a six-node k3s cluster, live numbers, August 2026. On-demand AWS came to $49,452 a year. The electricity bill it replaces is $274.

I priced my homelab as if I had to rent it. Same workload, same month, numbers read off the running systems rather than off a spreadsheet. On-demand AWS came to just under $50,000 a year. The electricity bill it replaces is $274.

104vCPU allocated
4.3cores actually busy
180×the bill
140 Wmeasured draw
In the cloud you pay for what you allocate. At home you pay for what you plug in. My machines are 96 % idle, and idle is the entire argument.

Twenty-two guests, six nodes, and 4.3 cores of actual work

Two Proxmox nodes running 22 guests, plus a six-node k3s cluster on bare metal. Everything below was read off the live systems.

PlatformUnitsvCPU alloc.RAM alloc.Busy
Proxmox GeekCluster22 guests68110.5 GiB2.0 cores / 50 GiB
k3s, bare metal6 nodes, 114 pods36124 GiB2.3 cores / 25.5 GiB
Total28 workloads104235 GiB4.3 cores / 76 GiB

Stored data is 863 GB across both pools — 635 GB on node 1, 132 GB of replicas on node 2, 96 GB of Longhorn volumes with their three copies. A quarter of it is one Immich photo library.

WHAT A CLOUD BILL WOULD COUNT vCPU 104 4.3 busy — 4.1 % RAM 235 GiB 76 GiB in use — 32 %
The gap is the product. Filled bar is work being done; the rest is headroom that costs nothing at home and is billed by the hour everywhere else. The vCPU sliver is drawn to scale.

Ninety-three cents of every cloud dollar buys the part I do not use

Sized 1:1 on AWS on-demand in us-east-1, honouring allocation because the cloud will not let you oversubscribe the way a hypervisor does.

LineBasis$/month
Compute104 vCPU, m7i @ $0.0504/vCPU-h × 7303,826
EBS gp32,025 GB @ $0.08/GB162
NAT Gateway$0.045/h + processing53
Egress400 GB billable @ $0.09/GB36
Load balancerk3s ingress20
4 × public IPv4$0.005/h each15
S3 backups400 GB @ $0.023/GB9
Total$49,452 / year4,121
SAME WORKLOAD — SAME SCALE AWS COMPUTE — $3,826 $4,121 92.8 % compute · $295 everything else Home $23 — electricity + offsite storage $23 0.6 % of the AWS bar Compute is 93 % of the bill — and compute is the 96 % I never use.
Both bars are the same pixels-per-dollar. The home bar is three pixels wide because that is honestly how wide it is. The 400 GB egress line alone, $36, costs more than twice every watt in the house.

The same workload, priced five ways

Every price checked in August 2026. Euro list prices converted to USD at 1.17 — everything below is dollars.

WhereShape$/month$/year×
AWS on-demand1:1 allocation4,12149,452180×
AWS 3-yr reserved1:1, −50 % compute2,20826,49697×
Vultr1:1 allocation1,37516,50060×
Hetzner dedicated2 × AX102 bare metal6027,22426×
Hetzner cloud, EUrightsized to real use1672,004
This house140 W, all on UPS23274

Every machine here sits behind one of two UPS units, with a power bank holding up the Pi that arbitrates the cluster. Between them they report 140 W — 102 kWh a month, $15 at $0.15/kWh, plus $7.50 of Cloudflare R2 for the offsite copy.

That number surprises people, so here is why it is real rather than a typo. Every k3s node runs a T-series CPU — Intel's 35 W parts rather than the 65 W desktop versions — and the whole fleet spends most of its life at the 4 % utilisation the first chart showed. Idle silicon at 35 W TDP draws very little. The rack also staggers its power-on so the inrush peaks never coincide, which is why a 350 VA unit can carry what it carries.

Where this comparison is genuinely worse for me

Three things the headline number hides, and I would rather say them than have a commenter say them.

  • The hardware was not free. It is a sunk cost, not a zero. Spread a fleet purchase over five years and the true figure is nearer $80 a month than $23 — which makes the rightsized cloud option only about 2.1× my real cost, not 7×.
  • The 180× is against a 1:1 lift-and-shift. Nobody sane migrates that way. A competent architect would rightsize first, and the gap collapses to the bottom row of that table.
  • Everything I own sits in one failure domain. One house, one breaker, one ISP. No amount of homelab money buys a second one.
ONE HOUSE · ONE BREAKER · ONE ISP Proxmox ×2 k3s ×6 Pi quorum switching $5 VPS elsewhere watches When the breaker trips, everything inside the dashes goes dark — including whatever was supposed to tell me about it.
This is the one thing worth renting. Not compute — a second failure domain. A monitor that runs inside the thing it monitors goes quiet at exactly the moment it matters.

What it actually takes to start, which is less than people think

None of this needs a rack. The whole argument scales down to one machine, and the entry rungs are cheap enough to be rounding errors.

RungWhat you getCost
Oracle Always Free2 OCPU ARM, 12 GB, 200 GB$0
Contabo VPS 104 vCPU, 8 GB, 75 GB NVMe$4.21–5.79
Hetzner CX23, EU only2 vCPU, 4 GB, 20 TB traffic$6.42
Used mini PCwhatever it has, forever~$3/mo of power

My second Proxmox node is a used Dell OptiPlex 5050 — an i7-6700 with 48 GB of RAM in three of its four slots, an office cast-off. It runs half the cluster. One month of the AWS bill would buy a shelf of them.

You do not need a datacenter. You need one machine you are not afraid to break, and the electricity is cheaper than a streaming subscription.

What is still an estimate, and what I could not verify

  • The 140 W is two UPS readings summed, not a plug-in meter. Each reports load as a whole percentage of its rating, so the resolution is coarse — roughly ±4 W on the larger unit — and it is a snapshot rather than a year-long average. A real meter would tighten it; nothing suggests it would move it far.
  • The offsite backup size is approximate — I sized R2 at 400 GB from the local datasets rather than billing the bucket.
  • Egress is a modelled 500 GB/month. I do not meter it. If Immich and the camera recordings push more, AWS gets worse, not better.
  • The five-year hardware amortisation uses an assumed purchase price. It is the one number in this piece not read off a receipt or a running system.

Method

Allocation and usage came from pvesh get /cluster/resources and kubectl top nodes; storage from zpool list and the Longhorn volume API; power from upsc on both UPS units. Prices were pulled from vendor documentation in August 2026 — AWS on-demand and EBS list, Hetzner's own published price-adjustment notice, Vultr and Contabo product pages, Cloudflare R2 docs. Euro prices are converted at 1.17 and shown in USD throughout.

Claude Code did the inventory sweep, the arithmetic and the layout. The corrections were mine: it first assumed the SMB shares were LAN-only, and it reached for Hetzner as the cheap default before the June repricing turned up.

// share