geerlingguy / geerlingguy/mini-rack

KUB62: DIY Wooden Rack for yet another Home Lab

Open
#307 1 comment 2 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
3.9k
Forks
102
PR merge metrics
No merged PRs in 30d

Description

# KUB62: a fully automated Raspberry Pi K3s cluster in a wooden 10-inch rack

I built a 4-node [Raspberry Pi](https://www.raspberrypi.com/) [`K3s`](https://k3s.io/) cluster inside a 10-inch wooden rack, fully automated and featuring a [gesture-controlled touchscreen](https://github.com/mzellho/bodgestr). The entire cluster can be wiped and re-provisioned using [`kub62-ansible`](https://github.com/mzellho/kub62-ansible) and [FluxCD](https://fluxcd.io/) from zero to running in minutes - no manual setup beyond powering on the nodes and providing `SSH` access. Much of the hardware is second-hand or repurposed.

TL;DR:
- 10-inch / ~6U wooden mini rack
- 4-node [Raspberry Pi 5](https://www.raspberrypi.com/products/raspberry-pi-5/) [`K3s`](https://k3s.io/) cluster (NVMe / USB boot)
- Fully automated provisioning via [`kub62-ansible`](https://github.com/mzellho/kub62-ansible)
- DIY gesture-controlled Touchscreen via [`bodgestr`](https://github.com/mzellho/bodgestr)
- Rear cooling + modified power strip integration

Side

Front

Rear

Top

# Long story (BOM below)

With all the great ideas in this community, I went down the usual rabbit holes: [Rackmate](https://deskpi.com/products/deskpi-rackmate-t0-black-version-rackmount-10-inch-4u-server-cabinet-for-network-servers-audio-and-video-equipment?_pos=1&_psq=rackmate+4u&_ss=e&_v=1.0), 3D printing, [T-slot aluminum profiles](https://en.wikipedia.org/wiki/T-slot_structural_framing)...you name it.

Last year, I built an arcade machine for my kids with my Dad - a reuse-heavy rabbit hole that directly influenced this project. It still ended up over-engineered, but I liked the recycling approach - and I wanted to pick it up again.

Arcade

For the rack itself, I wanted to use wood because I really like the material, despite its poor thermal properties. I also liked aluminum profiles a lot, so I tried to combine the two ideas. My Dad cut T-slots into the end grain of the boards, allowing hexagon cap screws to slide into whatever position I need, while acorn hexagon cap nuts pull everything tight. Moving the screws into place takes a little practice, but the nuts also make opening and closing the rack easy without needing a screwdriver or a ratchet tool.

Cooling and power distribution were also part of the overall "make it fit somehow" approach - not just for current operation, but mainly as a forward-looking consideration for a possible coffee table integration.

The rear of the rack already hosts a [DeskPi 2U Dual Cooling Fan Panel](https://deskpi.com/products/deskpi-rackmate-accessories-10-inch-2u-dual-cooling-fan-panel), primarily as preparation for future layouts where airflow, enclosure geometry, and long-term integration (e.g. coffee table form factor) might become more relevant than they are today.

I also ended up integrating a [Digitus 3-outlet power strip](https://www.amazon.de/dp/B004HY654A).

That turned into a small modification project on its own: because there simply was not enough clearance behind the rack for the factory cable outlet, I had to open the unit, drill a new opening, reroute the cable exit to the rear, and adapt the internal wiring accordingly, which worked surprisingly well.

Another reason to use wood was that, at the time - though I'm less sure about it now - I wanted to integrate the rack into some kind of coffee table for my home office. Something you could place next to a lounge chair. We'll see if that ever happens.

That is also where the name comes from. I'm a big fan of Manchester's [Factory Records](https://en.wikipedia.org/wiki/Factory_Records) era. If you don't know it, it's worth a look. Catalogue numbers, the [Haçienda nightclub (FAC51)](https://en.wikipedia.org/wiki/The_Ha%C3%A7ienda), and the design work of [Peter Saville](https://en.wikipedia.org/wiki/Peter_Saville_(graphic_designer)) and [Ben Kelly](https://en.wikipedia.org/wiki/Ben_Kelly_(designer)) all influenced the visual language here - not just as inspiration, but as a guiding aesthetic direction for a *future evolution of the project*, likely in the context of a coffee table build.

That aesthetic even made it into small details of the build - for example, the modified rear section of the rack's power strip is wrapped in yellow-black caution tape as a deliberate Factory Records nod.

So, let's celebrate that and remix it a little bit: *KUB62* = *KUB*(ernetes) + *62* (a reference to where I live).

Anyway - I probably should have known better: I didn't manage to source as much second-hand hardware as planned and went over budget again. Still, it was a fun, slightly ridiculous but rewarding build.

Aside from how it looks, I'm particularly proud of two things:

1. Like many home lab racks, it hosts a [`K3s`](https://k3s.io/) cluster. What makes it different is [`kub62-ansible`](https://github.com/mzellho/kub62-ansible): power on the nodes, make sure they're on the network with your `SSH` key, and run a single `ansible-playbook` command. That's it. The playbook handles everything — including support for my (not yet public) `kub62-gitops` [FluxCD](https://fluxcd.io/) setup, or your own repo.

2. The rack also hosts a [2U Touchscreen](https://deskpi.com/products/deskpi-7-84-inch-touch-screen-1280x400-tft-lcd-display-for-10-inch-2u-rack-rackmate-supports-installation-of-t0-t1-t2). I learned the hard way: touch != gestures. Work also pushed me to be a bit more open to AI, so I teamed up with Copilot to build [`bodgestr`](https://github.com/mzellho/bodgestr), a gesture-recognition daemon that identifies touch gestures and turns them into commands. In KUB62, it is used to send `CTRL+TAB` / `CTRL+SHIFT+TAB` to cycle through headless Chromium tabs that each show different [Grafana](https://grafana.com/) dashboards.

And of course, there are a few things I regret:

1. The rack is about 5.85U high (I wanted it to be 5.5U, but with wood and dads involved...). Despite originally aiming for 4U, I now honestly wish it were 6U.

2. Standard [10-inch rack power strips](https://www.amazon.de/dp/B004HY654A) really don't expect you to have basically no clearance behind the mounting screws. Integrating one into this rack required opening the unit, drilling a new cable outlet, and modifying the wiring to reroute the power cable to the rear.

3. The timing for getting all the hardware couldn't have been any worse ([RAM shortage](https://www.jeffgeerling.com/blog/2025/ram-shortage-comes-us-all/), supply chain issues, you name it).

# Bill of Materials

Even though many parts are second-hand, I won't put prices here, because I REALLY don't want to add them up. Honestly, I have no idea how much it was, and I'd really like to keep it that way. You can look them up yourself - but please don't tell me.

## Rack

- 2x Robinia boards (cut in half and glued edge-to-edge to make 355x260x20 mm, routed feet for enhanced stability)
- 1x Plywood base (foundation for structural stability)
- 1x Wooden dowel (for structural stability and transport handling)
- 1x M6 T-slot cutter
- 32x M6 acorn hexagon cap nuts
- 32x M6x16 mm hexagon cap screws
- 32x M6x12 mm washers
- 2x [Digitus 1U shelves](https://www.amazon.de/dp/B08XJXKX4R)
- 2x [GeeekPi 0.5U brush cable managers](https://deskpi.com/products/deskpi-10-inch-0-5u-rack-cable-entry-panel-with-brush-strip?_pos=1&_psq=brush&_ss=e&_v=1.0)
- 1x [Digitus 3-outlet power strip](https://www.amazon.de/dp/B004HY654A) (modified rear cable outlet)
- 1x [DeskPi 2U Dual Cooling Fan Panel](https://deskpi.com/products/deskpi-rackmate-accessories-10-inch-2u-dual-cooling-fan-panel)

## Computing

- 1x [DeskPi 2U rack mount](https://deskpi.com/products/deskpi-rackmate-10-inch-2u-rack-mount-with-pcie-nvme-board-for-raspberry-pi-5-4b) (comes with 4x PCIe NVMe boards)
- 3x [Raspberry Pi 5](https://www.raspberrypi.com/products/raspberry-pi-5/) (8 GB)
- 1x [Raspberry Pi 5](https://www.raspberrypi.com/products/raspberry-pi-5/) (4 GB)

## Storage

- 2x 1 TB NVMe
- 2x 500 GB NVMe
- **NO** SD cards or USB thumb drives (boot order `0xf641`)

## Networking / PoE

- 1x [Ubiquiti USW-Ultra](https://eu.store.ui.com/eu/en/category/switching-utility/collections/pro-ultra/products/usw-ultra-210w) (210 W)
- 4x [GeeekPi P30 PoE+ HATs](https://52pi.com/products/p30-poe-hat-for-raspberry-pi-5-with-official-pi-5-active-cooler)
- 4x thin [Cat6a network cables](https://www.amazon.de/dp/B0DK6JLTGB) (0.2 m)
- 1x [Ubiquiti U7 Lite](https://eu.store.ui.com/eu/en/products/u7-lite)

## Touchscreen

- 1x [DeskPi 7.84-inch Touchscreen](https://deskpi.com/products/deskpi-7-84-inch-touch-screen-1280x400-tft-lcd-display-for-10-inch-2u-rack-rackmate-supports-installation-of-t0-t1-t2)
- 1x [4-port HDMI switch](https://www.amazon.de/dp/B09JYKMC3Z)
- 1x thin [HDMI-to-HDMI 2.0 cable](https://www.amazon.de/dp/B09XHX4JSP) (Up Angled 270°)
- 4x thin [HDMI-to-Micro-HDMI 2.0 cables](https://www.amazon.de/dp/B0D2DDV63B)

# Roadmap

- Build a test environment, possibly mounted on the rear using a [DeskPi 1U rack mount](https://deskpi.com/products/deskpi-rackmate-10-inch-1u-rack-mount-with-2-pcie-nvme-boards-for-raspberry-pi-5-supports-m-2-nvme-ssds)
- Continue improving [`kub62-ansible`](https://github.com/mzellho/kub62-ansible)
- Add more workloads for digital sovereignty and tooling
- Release `kub62-gitops`
- Build that coffee table

Contributor guide

No contributing guide indexed for this repository

Research direction

The issue is a detailed KUB62 project showcase, but it names no repository files, tests, or concrete change to make. First clarify whether this is intended to become a mini-rack project entry; the issue currently provides no acceptance criteria for determining when work is done.

Written by the indexing model from the issue text.

Assessment

Tech stack
ansible, grafana, kubernetes, raspberry-pi
Domain
content, documentation
Issue type
Documentation
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.