How-To
VMware Horizon on the Edge
Tom Fenton is inspired to put a single small ESXi server at a physical location that would host virtual desktops needed by that location and use it to run VMware's Horizon desktop virtualization software.
At a recent VMUG, I met a desktop administrator who had an interesting problem: he had converted all of his desktop users to Horizon virtual desktops, but he was having issues bringing one of his smaller sites online.
This site, with 6 to 10 users depending on the season, was located in a rural eastern Oregon town with a single network cable feeding into it and was also the termination point for the network internet connectivity -- making this town both the literal and figurative edge of the network. When the network was up it ran fine and was reliable, but when it went down it would be for a day or two. Once during a severe winter storm, they had intermittent connectivity for an entire week. Hence, the company didn't feel comfortable putting virtual desktops at this site.
Not using virtual desktops at this site was an issue as the hardware they were using for the physical desktops was long overdue to be replaced, and the harsh conditions that the desktops were exposed to caused failures that resulted in expensive onsite services calls.
Then it occurred to me that it might, in fact, be possible to use VMware Horizon on the edge; that is, to put a single small ESXi server at the physical location that would host the virtual desktops needed by that location. In my case, my architecture would rely on the connection server and active directory residing in the main office, but as long as the outages were for a short duration and they had a local repository for any work they needed to store, I figured that should be OK.
I happened to have an Intel 8i7BEH NUC sitting on my desk that I had just finished using to write a series of articles on Linux commands. I was unsure if I could host 6 to 10 virtual desktops on a single NUC: resource utilization would be extremely tight, it had limited storage and memory, and the processor only had a couple cores and supported a limited amount of RAM. The deal killer may have been that it did not have an RJ45 port and only had native Wi-Fi network capability, but others have been able to use a USB-to-Ethernet adapter on ESXi with this unit.
Below are the full specs for this unit and the experience that I had trying to create a single ESXi node. In a follow on article, I will show you how I used this node to create a Horizon Edge server.
The System
As stated above, the system I used for demonstration in this article was an Intel NUC, model 8i7BEH. The 8i7BEH is a mid-priced, small form factor kit system; it does not come with any storage, RAM, or an operating system. As is the case with all NUC computers, the 8i7BEH is very small (4.5" x 4.5" x 2"). This system is powered by a quad-core Intel Core i7-8559U processor and has an integrated Iris Plus Graphics 655 GPU. It has built-in Wi-Fi, and slots for a U.2 SATA and an M.2 NVMe drive. For the ESXi boot device, I used a 32 GB SanDisk Cruzer Force USB Flash Drive (SDCZ71-o32G-A46). I populated the system with two 16GB SO-DIMMs for a total of 32GB of RAM (Corsair 32GB Kit 16GBx2 DDR4 2400 MT/S), installed a 1920GB SATA SSD (Kioxia KHK61RSE1T92). FYI in October 2019 Toshiba Memory Corporation changed its name to Kioxia.
Before committing to the project, I wanted to first run through some back-of-the-envelope calculations to make sure that the NUC would support 6 to 10 virtual desktops. Using the Horizon 7 Architecture Planning guide (located here) for reference, I created the table below to outline the requirements for ten knowledge workers with a single 2560 x 1600 monitor using a longer-lived instant clone desktop pool and running Windows 10. I planned on a 6-to-1 vCPU to PCPU ratio and for each desktop to have two vCPUs.
|
Single Desktop |
10 |
RAM (GB) |
4 |
40 |
Number of cores |
0.33 |
3.3 |
Storage(IOPS) |
40 |
400 |
Storage (GB) |
64 |
640 |
Network (Mbps) |
100 |
1000 |
Calculating for assumed max load conditions of 10 virtual desktops, I determined that resources may be tight and I would be overcommitted, but overall it appeared to be doable.
Installing ESXi
Following the instructions found here, I created a bootable USB drive for ESXi that others have used to get a USB-to-Ethernet adapter to work with this device.
I inserted the USB drive into a port on the front of the drive, and attached the USB-to-Ethernet adapter (TP-Link Ue300) to a port on the back of the machine. Before attempting to boot the NUC off the USB drive, I powered on the NUC, pressed F2 to enter the BIOS, disabled UEFI boot, and specified that the device was to boot off the USB drive. Next, I navigated to Advanced -> Boot -> Secure boot and disabled secure boot, then pressed F10 to save the settings and reboot. Much to my surprise, the system booted up and installed flawlessly.
I added the host to my vSphere environment and used the vSphere Client to see the summary of the NUC that I had added.
I configured the system to use the SSD and NVMe drives as local datastores, and then redirected the ESXi log in to the SSD drive.
Conclusion
I was honestly surprised that it was so easy to install ESXi on the NUC. I have tried other projects like this, using unstandardized hardware and configurations, and they ended up being either a total failure and time suck or a "science project" of little enterprise worth.
In my next article, I will share with you my experience using this "edge" node in my Horizon environment. Update: Part 2 is here.
About the Author
Tom Fenton has a wealth of hands-on IT experience gained over the past 30 years in a variety of technologies, with the past 20 years focusing on virtualization and storage. He previously worked as a Technical Marketing Manager for ControlUp. He also previously worked at VMware in Staff and Senior level positions. He has also worked as a Senior Validation Engineer with The Taneja Group, where he headed the Validation Service Lab and was instrumental in starting up its vSphere Virtual Volumes practice. He's on X @vDoppler.