incomplete.io

XenServer 7.0 on the Intel NUC Skull NUC6i7KYK

introduction

I recently picked up an Intel NUC kit PC. Mine's the one with the skull embossed into the case -- model NUC6i7KYK. With two NVMe SSD slots and up to 32GB of RAM, it's a pretty good home for a number of VMs I'm running for some development I'm doing. I'll note down my experiences here in case it helps others.

the hardware

The NUC series of PCs don't ship with RAM or SSD by default. I ordered 2x16GB DIMMs and 1x512GB 80mm M.2 NVMe SSD. Adding the SSD to the first available slot, I didn't see the SSD in the BIOS on first boot -- it showed both slots empty. I'm pretty sure that I seated it properly, but adding it to the slot marked as the second slot, it showed up in the BIOS as the first SSD. I'll probably pick up another drive for the second slot.

NUC6i7KYK Skull

installing XenServer 7

I like automated installs. Having inherited many systems in the past that were installed by hand and then had who-knows-what done to them and trying to recreate those systems at a later date, even for what may be a one-off install, I prefer to automate the install. In this case, I'm also PXE-booting the XenServer installer. I'll cover setting up the PXE server later.

The majority of my VMs also have somewhat automated installation and deployment too. Without much time or manual labour, it will be possible for me to destroy everything on the NUC and redeploy afresh. In answer to the Cattle-vs-Pets debate, I say it's a combination of both.

My XenServer unattended install XML is as follows:

01: <?xml version="1.0"?>
02: <installation type="fresh" srtype="ext">
03:     <keymap>us</keymap>
04:     <primary-disk guest-storage="yes">nvme0n1</primary-disk>
05:     <root-password>secret</root-password>
06:     <source type="url">http://192.0.2.1/</source>
07:     <admin-interface name="eth0" proto="dhcp"/>
08:     <timezone>US/Pacific</timezone>
09:     <time-config-method>ntp</time-config-method>
10:     <ntp-server>ntp.incomplete.io</ntp-server>
11:     <hostname>xencloud</hostname>
12:     <script stage="installation-completed">http://192.0.2.1/post-install.sh</script>
13: </installation>
14: 
15: 

Here's an explanation of some of the parameters:

post install

Everything seemed to go great and the install completed, but once I booted into XenServer, within a minute or two, it had appeared to hang. I was getting no response over the network or through the USB keyboard and mouse. I had a similar problem with my ODroid XU-4s with some Linux kernels. It turned out that that was an issue waking certain devices up from some low-power states. I went into the BIOS of the Intel NUC and set the power management to Performance and the I haven't had any problems since.

GPU passthrough

I have more use for the GPU in one of my guest operating systems, so I've opted to remove the GPU from the XenServer console and instead pass it through to one of my guests. That was accomplished in the post-install script with the following command:

/opt/xensource/libexec/xen-cmdline --set-dom0 "xen-pciback.hide=(00:02.0)"
    

The above PCI ID matches the Iris Pro Graphics 580 video controller in my NUC, but you may want to check yours using the lspci command. After making the display adapter available for passthrough, you'll need to reboot XenServer.

runtime experience

I've been running this system for about a week now (largely remotely -- I've been on the road a lot) and it's been great. My workload isn't overly taxing for the hardware and I've had a dozen VMs running at the same time without any great drama. Guest operating systems I've been able to run so far include:

container support

I haven't yet tried Windows 2016 container support on this host, but I have installed XenServer supplemental pack for container support and have enabled it with the CoreOS instance. I'm able to enable container management, but haven't yet been able to see the containers from within XenCenter. More on that once I have it resolved.

Twitter: @IncompleteIO