ironic/doc/source/admin/interfaces/boot.rst
Sharpz7 949387bd80 [codespell] Fixing Spelling Mistakes
This is the first in a series of commits to add support for codespell. This is continuning the process completed in ironic-python-agent.

Future Commits will add a Tox Target, CI support and potentially a git-blame-ignore-revs file if their are lots of spelling mistakes that could clutter git blame.

Change-Id: Id328ff64c352e85b58181e9d9e35973a8706ab7a
2024-02-12 19:58:56 +00:00

5.9 KiB

Boot interfaces

The boot interface manages booting of both the deploy ramdisk and the user instances on the bare metal node.

The PXE boot interface is generic and works with all hardware that supports booting from network. Alternatively, several vendors provide virtual media implementations of the boot interface. They work by pushing an ISO image to the node's management controller, and do not require either PXE or iPXE. Check your driver documentation at ../drivers for details.

PXE boot

The pxe and ipxe boot interfaces uses PXE or iPXE accordingly to deliver the target kernel/ramdisk pair. PXE uses relatively slow and unreliable TFTP protocol for transfer, while iPXE uses HTTP. The downside of iPXE is that it's less common, and usually requires bootstrapping using PXE first.

The pxe and ipxe boot interfaces work by preparing a PXE/iPXE environment for a node on the file system, then instructing the DHCP provider (for example, the Networking service) to boot the node from it. See direct-deploy-example for a better understanding of the whole deployment process.

Note

Both PXE and iPXE are configured differently, when UEFI boot is used instead of conventional BIOS boot. This is particularly important for CPU architectures that do not have BIOS support at all.

The ipxe boot interface is used by default for many hardware types, including ipmi. Some hardware types, notably ilo and irmc have their specific implementations of the PXE boot interface.

Additional configuration is required for this boot interface - see /install/configure-pxe for details.

HTTP Boot

The http and http-ipxe boot interfaces are based upon the Ironic implementation of the pxe and ipxe boot interfaces, respectively, and utilize HTTP in the transmission of the location to start the boot sequence from. These interfaces are specific to UEFI as they are rooted in the UEFI standard v2.5's support for booting from an HTTP URL.

One caveat to keep in mind is that these interfaces require hardware support and the ability to signal to the remote BMC that the node should boot utilizing UEFIHTTP. If a hardware type does not support that as an option, we will fallback and request PXE boot, but that realistically may only work if the firmware on the machine is smart enough to check and evaluate for an HTTP Boot URL instead of a PXE boot server and file name.

It should be noted, that these boot interfaces are available for the vendor independent, generic hardware types of ipmi and redfish. Hardware vendors typically only include additional interfaces after they have performed their own verification and qualification testing.

Kernel parameters

If you need to pass additional kernel parameters to the deployment/cleaning ramdisk (for example, to configure serial console), use the following configuration option:

[pxe]
kernel_append_params = nofb vga=normal

Note

The option was called pxe_append_params before the Xena cycle.

Per-node and per-instance overrides are also possible, for example:

baremetal node set node-0 \
  --driver-info kernel_append_params="nofb vga=normal"
baremetal node set node-0 \
  --instance-info kernel_append_params="nofb vga=normal"

Starting with the Zed cycle, you can combine the parameters from the configuration and from the node using the special %default% syntax:

baremetal node set node-0 \
  --driver-info kernel_append_params="%default% console=ttyS0,115200n8"

Together with the configuration above, the following parameters will be appended to the kernel command line:

nofb vga=normal console=ttyS0,115200n8

Note

Ironic does not do any de-duplication of the resulting kernel parameters. Both kernel itself and dracut seem to give priority to the last instance of the same parameter.

Warning

Previously our documentation listed the Linux kernel parameter nomodeset as an option. This option is intended for troubleshooting, and can greatly degrade performance with Matrox/Aspeed BMC Graphics controllers which is very commonly used on physical servers. The performance degradation can greatly reduce IO capacity upon every console graphics update being written to the screen.

Common options

Enable persistent boot device for deploy/clean operation

For (i)PXE booting, Ironic uses non-persistent boot order changes for clean/deploy by default. For some drivers, persistent changes are far more costly than non-persisent ones, so this approach can bring a performance benefit.

In order to control this behavior, however, Ironic provides the force_persistent_boot_device flag in the node's driver_info. It allows the values Default (make all changes but the last one upon deployment non-persistent), Always (make all changes persistent), and Never (make all boot order changes non-persistent). For example in order to have only persistent changes one would need to set something like:

$ openstack baremetal node set --driver-info force_persistent_boot_device='Always' <node>

Note

It is recommended to check if the node's state has not changed as there is no way of locking the node between these commands.

Note

The values 'True'/'False' for the option 'force_persistent_boot_device' in the node's driver info for the (i)PXE drivers are deprecated and support for them may be removed in a future release. The former default value 'False' is replaced by the new value 'Default', the value 'True' is replaced by 'Always'.