从卷启动

概述

从 Pike 版本开始,Bare Metal 服务支持从 Cinder iSCSI 卷启动。本指南主要处理此用例,但会随着更多从卷启动的路径(例如 FCoE)的引入而更新。

从卷启动支持传统的 BIOS 和 UEFI(用于 EFI 启动的 iPXE 二进制文件)启动模式。我们需要使用 diskimage-builder 工具创建合适的镜像。

工作原理 - 从 Ironic 的角度来看

本质上,Ironic 为该过程奠定了基础,通过向启动接口提供所需的信息来促进节点配置,或者为 iPXE 启动模板提供配置,以便节点可以启动。

../_images/boot-from-volume.svg

在此示例中,启动接口承担了繁重的工作。对于 irmcilo 硬件类型以及具有硬件类型特定启动接口的硬件类型,它们能够通过带外机制向裸机节点的 BMC 发出信号,指示集成的 iSCSI 发起程序连接到提供的卷目标信息。

在大多数硬件中,这将是机器的网络适配器。

对于 ipxe 启动接口,会在磁盘上创建模板,这些模板指向作为卷目标的一部分提交的 iscsi 目标信息,或者在与 Nova 集成时,在请求实例时请求的裸机的从卷启动磁盘。

在网络访问方面,两种接口方法都需要连接到 iscsi 目标。在供应商驱动程序特定的路径中,可能提供额外的网络配置选项,以允许分离标准网络流量和实例网络流量。在 iPXE 的情况下,这是不可能的,因为操作系统用户空间在 ramdisk 启动内的检测后重新配置 iSCSI 连接。

iPXE 用户 *可能* 能够利用多个 VIF,其中一个专门设置为使用 pxe_enabled 来处理初始实例启动和后端存储流量,而外部面向网络的流量发生在不同的接口上。这是基于 iSCSI 的物理领域部署中的常见模式。

先决条件

当前从卷启动需要

  • Bare Metal 服务版本 9.0.0

  • Bare Metal API 微版本 1.33 或更高版本

  • 使用 PXE 启动机制 的驱动程序。当前,当启用 iPXE 时,从卷启动受支持的驱动程序是使用 PXE 启动机制的参考驱动程序。

  • iPXE 是一个明确的要求,因为它提供了连接和启动 iSCSI 卷的机制。

  • 需要配置并提供元数据服务,以便实例镜像获取配置(例如密钥)。由于最小磁盘扩展大小,不支持配置驱动器。

Conductor 配置

在 ironic.conf 中,您可以指定启用的存储接口列表。检查 DEFAULT.enabled_storage_interfaces 在您的 ironic.conf 中,以确保启用了您所需的接口。例如,要启用 cindernoop 存储接口

[DEFAULT]
enabled_storage_interfaces = cinder,noop

如果您想指定默认存储接口,而不是在每个节点的基础上设置存储接口,请设置 DEFAULT.default_storage_interface 在 ironic.conf 中。 default_storage_interface 将用于没有定义存储接口的任何节点。

节点配置

存储接口

您需要指定节点将用于处理存储操作的存储接口。例如,要在现有节点上将存储接口设置为 cinder

baremetal node set --storage-interface cinder $NODE_UUID

可以在 ironic.conf 中指定默认存储接口。有关详细信息,请参阅 Conductor 配置 部分。

iSCSI 配置

为了使裸机节点从 iSCSI 卷启动,节点的 iscsi_boot 功能必须设置为 True。例如,如果您想更新现有节点以从卷启动

baremetal node set --property capabilities=iscsi_boot:True $NODE_UUID

您还需要为节点创建一个卷连接器,以便存储接口知道如何与节点进行存储操作的通信。对于 iSCSI,您需要提供一个唯一于您的 SAN 的 iSCSI 限定名称 (IQN)。例如,要为 iSCSI 创建卷连接器

baremetal volume connector create \
         --node $NODE_UUID --type iqn --connector-id iqn.2017-08.org.openstack.$NODE_UUID

镜像创建

我们使用 diskimage-builder 工具中的 disk-image-create 来创建用于从卷启动功能的镜像。对于相应的启动模式,一些必需的元素如下

  • 传统 BIOS 启动模式:iscsi-boot 元素。

  • UEFI 启动模式:iscsi-bootblock-device-efi 元素。

以下是一个示例

export IMAGE_NAME=<image_name>
export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"
disk-image-create centos7 vm cloud-init-datasources dhcp-all-interfaces iscsi-boot dracut-regenerate block-device-efi -o $IMAGE_NAME

注意

  • 对于 CentOS 镜像,我们必须在镜像创建期间添加名为 dracut-regenerate 的依赖元素。否则,镜像创建将因错误而失败。

  • 对于 Ubuntu 镜像,我们仅支持 iscsi-boot 元素,而无需在镜像创建期间使用 dracut-regenerate 元素。

高级主题

不使用计算服务

如其他部分所述,Bare Metal 服务具有一个 connector 的概念,该概念用于表示旨在用于连接远程卷的接口。

除了连接器之外,我们还有一个可以通过 API 定义的 target 的概念。虽然通过计算服务使用此功能的的用户将自动为其创建一个新的目标记录,但这不是显式必需的,可以手动执行。

可以使用类似于以下示例的命令创建目标记录

baremetal volume target create \
          --node $NODE_UUID --type iscsi --boot-index 0 --volume $VOLUME_UUID

注意

对于节点,boot-index0 表示节点的启动卷。由于 boot-index 是按节点顺序排列的,因此每个节点仅允许一个启动卷。

不使用 Cinder

在 Rocky 版本中,提供了一个 external 存储接口,可以在没有块存储服务安装的情况下使用。

在正常情况下,cinder 存储接口与块存储服务交互,以协调和管理从底层块服务系统附加和分离卷。

external 存储接口包含逻辑,以允许 Bare Metal 服务确定是否请求 Bare Metal 节点使用远程存储卷进行启动。这与默认 noop 存储接口相反,后者不包含确定节点是否应该或能够从远程卷启动的逻辑。

必须注意的是,external 存储接口进行最小的配置或值验证。 cinder 存储接口包含更广泛的验证,这在 external 场景中可能是不必要的。

设置外部存储接口

baremetal node set --storage-interface external $NODE_UUID

设置卷

baremetal volume target create --node $NODE_UUID \
    --type iscsi --boot-index 0 --volume-id $VOLUME_UUID \
    --property target_iqn="iqn.2010-10.com.example:vol-X" \
    --property target_lun="0" \
    --property target_portal="192.168.0.123:3260" \
    --property auth_method="CHAP" \
    --property auth_username="ABC" \
    --property auth_password="XYZ" \

确保未定义 image_source

baremetal node unset \
    --instance-info image_source $NODE_UUID

部署节点

baremetal node deploy $NODE_UUID

部署后,裸机节点的启动接口将尝试创建 iPXE 配置或通过管理控制器带外设置启动参数。此类操作特定于启动接口,可能不支持所有形式的卷目标配置。截至 Rocky 版本,Bare Metal 服务不支持将操作系统镜像写入远程从卷启动目标,因此用户也必须提前确保这一点。

卷目标的记录会在节点被取消部署时删除,因此不会在部署之间持久存在。

Cinder 多重附加

卷多重附加是一种通常在利用专用存储子系统的计算集群中执行的功能。对于一段时间,块存储服务一直支持多重附加的概念。但是,截至 Pike 版本,计算服务尚未具有利用多重附加的支持。同时,多重附加需要作为块存储服务的一部分运行的后端卷驱动程序包含对多重附加卷的支持。

当将存储接口添加到 Bare Metal 服务时,特别是对于 cinder 存储接口时,考虑了卷多重附加的概念,但尚未完全测试,并且在计算服务集成以及卷驱动程序支持之前,不太可能完全测试。

Bare Metal 服务中存储卷目标的数据模型对使用相同的目标卷没有约束。与块存储服务交互时,Bare Metal 服务将阻止使用被报告为 in-use 的卷,除非它们明确支持多重附加。