RackHD driver for Docker-machine allows a user to provision a Docker instance on bare-metal hardware managed by RackHD. This brings many of the advantages and flexibility of cloud-based infrastructure into your own data center. As major proponents of Infrastructure As Code, we think any tool that makes deploying and scaling infrastructure repeatable and automated is a major win.
One technology that is typically found on the servers in your data center is Out-of-Band Management (OBM), sometimes called “lights-out management.” This is a network connection to the nodes that is independent of their running Operating System (OS) and allows for remote management whether it is power management, OS installation or even remote access to the display. OBM is a foundational tool for RackHD since tasks like remote OS installation and power management are core competencies.
This brings us back to the RackHD driver. While most of the Docker-machine drivers are for virtual cloud-hosted infrastructure, the RackHD driver is unique in targeting bare-metal. While developing the driver, I unsurprisingly found that there was only so much progress I could make using virtualized resources. Not to mention there was code that I couldn’t exercise without bare-metal or OBM. And of course I wanted to use real hardware for testing, but not just any old PC in the closet would do. So, I built a home-lab for RackHD with these capabilities and even managed to avoid breaking the bank.
My hardware requirements roughly in order of priority were:
- OBM capable
- Efficient and quiet (after all, it will sit in my home office)
Performance was not a concern, but getting my manager to okay the expense report was. I ended up getting two nodes, one using IPMI and one using Intel AMT.
Finding a low-cost node with a Baseboard Management Controller (BMC) for IPMI support is surprisingly non-trivial. This is generally an enterprise feature, and therefore exists mostly in servers at enterprise price-points. I ended up finding the SuperMicro MBD-X7SPA-HF-O, a mini-ITX server motherboard. Mini-ITX is a fairly small form factor, and this board included a BMC plus an integrated Intel Atom processor. Add power, RAM, and storage and I was in business! Total cost for chassis, board, hard drive and memory was about $300 from NewEgg.
RackHD also has native support for Intel AMT so I knew I also wanted to look at the Intel NUC nodes. There seems to be only one model of NUC that supports AMT, as it requires vPro support in the processor. That model is the older DC53427HYE, and requires you to supply your own RAM, mSATA drive, and (oddly) a power cord. This includes a Core-i5 processor with vPro and AMT support, and is only about the size of a couple decks of cards. This makes it extremely portable, and potentially great for demos. Hello MeetUps! Total cost for the NUC kit, mSATA drive, memory, and cable was about $475.
The NUC cost is higher, but you do get much more powerful hardware and a smaller form factor. I also fitted both nodes with only 4GB RAM and just over 100GB of primary storage to keep costs down.
Both the NUC and SuperMicro node share their OBM Ethernet connection with the same port as their primary Ethernet. This meant I only had one network connection to worry about to each node. I already had all of the cables I needed, and a spare 5-port Gigabit switch on hand to use. I assembled all my hardware, plugged in power and network, and connected the network to a separate wired Ethernet port on my laptop. I fired up RackHD inside of Docker running in Virtualbox using docker-compose, bridging the dedicated wired network port on my laptop to the Virtualbox VM. This allowed RackHD to have full access to the network and serve as the default gateway for DHCP, TFTP, PXE, etc.
I powered on my two nodes and saw…. Nothing. Hmm. Well I suppose it would be a lot to ask for the BIOS of two completely different types of nodes to both be configured exactly the way I would need it.
So I then connected a monitor and USB keyboard, went into the nodes’ BIOS to configure them for PXE booting, and tried again. This time, success! The nodes were discovered and catalogued by RackHD, and I was able to launch OS install workflows against them. Let the docker-machine driver development continue!