Chapter 6. Booting from cinder volumes
Chapter 6. Booting from cinder volumes This section contains information on creating and connecting volumes created in OpenStack Block Storage (cinder) to bare metal instances created with OpenStack Bare Metal (ironic). 6.1. Cinder volume boot for bare metal nodes You can boot bare metal nodes from a block storage device that is stored in OpenStack Block Storage (cinder). OpenStack Bare Metal (ironic) connects bare metal nodes to volumes through an iSCSI interface. Ironic enables this feature during the overcloud deployment. However, consider the following conditions prior to deployment: The overcloud requires the cinder iSCSI backend to be enabled. Set the CinderEnableIscsiBackend heat parameter to true during overcloud deployment. You cannot use the cinder volume boot feature with a Red Hat Ceph Storage backend. You must set the rd.iscsi.firmware=1 kernel parameter on the boot disk. 6.2. Configuring nodes for cinder volume boot You must configure certain options for each bare metal node to successfully boot from a cinder volume. Procedure Log in to the undercloud as the stack user. Source the overcloud credentials: Set the iscsi_boot capability to true and the storage-interface to cinder for the selected node: Replace `<NODEID> with the ID of the chosen node. Create an iSCSI connector for the node: The connector ID for each node must be unique. In the example, the connector is iqn.2010-10.org.openstack.node<NUM> where <NUM> is an incremented number for each node. 6.3. Configuring iSCSI kernel parameters on the boot disk You must enable the iSCSI booting in the kernel on the image. To accomplish this, mount the QCOW2 image and enable iSCSI components on the image. Prerequisites Download a Red Hat Enterprise Linux QCOW2 image and copy it to the /home/stack/ directory on the undercloud. You can download Red Hat Enterprise Linux KVM images in QCOW2 format from the following pages: Red Hat Enterprise Linux 7 Red Hat Enterprise Linux 8 Procedure Log in to the undercloud as the stack user. Mount the QCOW2 image and access it as the root user: Load the nbd kernel module: Connect the QCOW image as /dev/nbd0 : Check the partitions on the NBD: New Red Hat Enterprise Linux QCOW2 images contain only one partition, which is usually named /dev/nbd0p1 on the NBD. Create a mount point for the image: Mount the image: Mount your dev directory so that the image has access to device information on the host: Change the root directory to the mount point: Configure iSCSI on the image: Note Some commands in this step might report the following error: This error is not critical and you can ignore the error. Move the resolv.conf file to a temporary location: Create a temporary resolv.conf file to resolve DNS requests for the Red Hat Content Delivery Network. This example uses 8.8.8.8 for the nameserver: Register the mounted image to the Red Hat Content Delivery Network: Enter your username and password when the command prompts you. Attach a subscription that contains Red Hat Enterprise Linux: Substitute <POOLID> with the pool ID of the subscription. Disable the default repositories: Enable the Red Hat Enterprise Linux repository: Red Hat Enterprise Linux 7: Red Hat Enterprise Linux 8: Install the iscsi-initiator-utils package: Unregister the mounted image: Restore the original resolv.conf file: Check the kernel version on the mounted image: For example, if the output is kernel-3.10.0-1062.el7.x86_64 , the kernel version is 3.10.0-1062.el7.x86_64 . Note this kernel version for the step. Note New Red Hat Enterprise Linux QCOW2 image have only one kernel version installed. If more than one kernel version is installed, use the latest one. Add the network and iscsi dracut modules to the initramfs image: Replace <KERNELVERSION> with the version you obtained from rpm -qa kernel . The following example uses 3.10.0-1062.el7.x86_64 as the kernel version: Edit the /etc/default/grub configuration file and add rd.iscsi.firmware=1 to the GRUB_CMDLINE_LINUX parameter: The following example shows the GRUB_CMDLINE_LINUX parameter with the added rd.iscsi.firmware=1 kernel argument: Save these changes. Note Do not rebuild the grub menu configuration at this step. A later step in this procedure rebuilds the grub menu as a temporary virtual machine. Exit from the mounted image back to your host operating system: Unmount the image: Unmount the dev directory from the temporary mount point: Unmount the image from the mount point: Disconnect the QCOW2 image from /dev/nbd0/ : Rebuild the grub menu configuration on the image: Install the libguestfs-tools package: Important If you install the libguestfs-tools package on the undercloud, disable iscsid.socket to avoid port conflicts with the tripleo_iscsid service on the undercloud: Set the libguestfs backend to use QEMU directly: Update the grub configuration on the image: 6.4. Creating and using a boot volume in cinder You must upload the iSCSI-enabled image to OpenStack Image Storage (glance) and create the boot volume in OpenStack Block Storage (cinder). Procedure Log in to the undercloud as the stack user. Upload the iSCSI-enabled image to glance: Create a volume from the image: Create a bare metal instance that uses the boot volume in cinder:
source ~/overcloudrc openstack baremetal node set --property capabilities=iscsi_boot:true --storage-interface cinder <NODEID> openstack baremetal volume connector create --node <NODEID> --type iqn --connector-id iqn.2010-10.org.openstack.node<NUM> sudo modprobe nbd sudo qemu-nbd --connect=/dev/nbd0 <IMAGE> sudo fdisk /dev/nbd0 -l mkdir /tmp/mountpoint sudo mount /dev/nbd0p1 /tmp/mountpoint/ sudo mount -o bind /dev /tmp/mountpoint/dev sudo chroot /tmp/mountpoint /bin/bash lscpu: cannot open /proc/cpuinfo: No such file or directory mv /etc/resolv.conf /etc/resolv.conf.bak echo "nameserver 8.8.8.8" > /etc/resolv.conf subscription-manager register subscription-manager list --all --available subscription-manager attach --pool <POOLID> subscription-manager repos --disable "*" subscription-manager repos --enable "rhel-7-server-rpms" subscription-manager repos --enable "rhel-8-for-x86_64-baseos-eus-rpms" yum install -y iscsi-initiator-utils subscription-manager unregister mv /etc/resolv.conf.bak /etc/resolv.conf rpm -qa kernel dracut --force --add "network iscsi" /boot/initramfs-<KERNELVERSION>.img <KERNELVERSION> dracut --force --add "network iscsi" /boot/initramfs-3.10.0-1062.el7.x86_64.img 3.10.0-1062.el7.x86_64 vi /etc/default/grub GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200n8 no_timer_check net.ifnames=0 rd.iscsi.firmware=1" exit sudo umount /tmp/mountpoint/dev sudo umount /tmp/mountpoint sudo qemu-nbd --disconnect /dev/nbd0 sudo yum -y install libguestfs-tools sudo systemctl disable --now iscsid.socket export LIBGUESTFS_BACKEND=direct guestfish -a <IMAGE> -m /dev/sda1 sh "/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg" openstack image create --disk-format qcow2 --container-format bare --file rhel-server-7.7-x86_64-kvm.qcow2 rhel-server-7.7-iscsi openstack volume create --size 10 --image rhel-server-7.7-iscsi --bootable rhel-test-volume openstack server create --flavor baremetal --volume rhel-test-volume --key default rhel-test