Pxe Boot with Compressed Container Images
Introduction
As mentioned here:
Since the inception of Warewulf over 20 years ago, Warewulf has used the model of the “Virtual Node File System” (VNFS) as a template image for the compute nodes. This is similar to a golden master image, except that the node file system exists within a directory on the Warewulf control node (e.g. a chroot()).
In hindsight, we’ve been using containers all along, but the buzzword just didn’t exist. Over the last 5-6 years, the enterprise has created a lot of tooling and standards around defining, building, distributing, securing, and managing containers, so Warewulf v4 now integrates directly within the container ecosystem to facilitate the process of VNFS image management.
If you are not currently leveraging the container ecosystem in any other way, you can still build your own chroot directories and use Warewulf as before.
It is important to understand that Warewulf is not running a container runtime on cluster nodes. While it is absolutely possible to run containers on cluster nodes, Warewulf is provisioning the container image to the bare metal and booting it. This container will be used as the base operating system and, by default, it will run entirely in memory. This means that when you reboot the node, the node retains no information about Warewulf or how it booted.
Problem
There could be cases where a node might not like to extract images for some reasons (BIOS settings, hardware specific problems, etc) and it is hard to find any solution to force iPXE for those nodes to pick the uncompressed images, and keep the other nodes using the compressed ones.
Symptoms
When trying to provision the node with a compressed image, the server hangs during the PXE boot after downloading the container. After some minutes, the server might reboot with no warning message.
Resolution
There are two choices you can consider:
- Probably the simpler method would be to copy
default.ipxe
tonocompress.ipxe
, update it appropriately, and then direct nodes to use it with the ipxe template node attribute. - Define a node tag (something like
ipxe_nocompress
) and look for it indefault.ipxe
. You could then control whether to use compressed images or not based on what’s defined.