高级特性

指定部署磁盘(根设备提示)

Bare Metal 服务支持将提示传递给部署 ramdisk,以选择用于部署的磁盘。支持的提示列表如下:

  • model (字符串): 设备标识符

  • vendor (字符串): 设备供应商

  • serial (字符串): 磁盘序列号

    注意

    某些 RAID 控制器会生成序列号来表示提供给操作系统的卷,这些序列号与系统中的物理磁盘不匹配或不一致。

  • size (整数或范围): 设备的大小,以 GiB 为单位,或 GiB 中范围的边界。size 接受单个整数值,表示设备的大小(以 GiB 为单位),或者表示设备可接受的下限和上限大小(以 GiB 为单位)的两个值的范围,使用特殊运算符 <range-in>,例如 size: <range-in> ( 10 100 )

    注意

    节点的 ‘local_gb’ 属性通常设置为比实际磁盘大小小 1 GiB 的值,以考虑分区(这是 DevStack、TripleO 和 Ironic Inspector 的工作方式,仅举几例)。但是,在这种情况下 size 应该是实际大小。例如,对于 128 GiB 磁盘 local_gb 将为 127,但 size 提示将为 128。

  • wwn (字符串): 唯一的存储标识符,通常映射到设备。这可以是单个设备,也可以是 SAN 存储控制器或 RAID 控制器。

  • wwn_with_extension (字符串): 带有供应商扩展的唯一存储标识符

  • wwn_vendor_extension (字符串): 唯一的供应商存储标识符

  • rotational (布尔值): 是否为旋转设备。此提示可以更轻松地区分 HDD(旋转)和 SSD(非旋转)磁盘,以便选择 Ironic 应该将镜像部署到哪个磁盘。

  • hctl (字符串): SCSI 地址(主机、通道、目标和 LUN),例如 ‘1:0:0:0’

  • by_path (字符串): 对应于特定 PCI 或 iSCSI 路径的替代设备名称,例如 /dev/disk/by-path/pci-0000:00

    注意

    在 Linux 内核中使用异步设备初始化时,通过路径识别设备可能不可靠。

  • name (字符串): 设备名称,例如 /dev/md0

    警告

    根设备提示名称仅应用于具有常量名称的设备(例如 RAID 卷)。对于 SATA、SCSI 和 IDE 磁盘控制器,不建议使用此提示,因为 Linux 中设备节点添加的顺序是任意的,导致像 /dev/sda 和 /dev/sdb 这样的设备 在启动时切换

    警告

    此外,一些 Linux 发行版内核最近转向异步设备初始化,这意味着实际的设备名称字符串在主机上存在多个设备时完全不可靠,因为设备名称由首先响应的设备声明,而不是以前同步过程中的第一个初始化设备。

要将一个或多个提示与节点关联,请使用 root_device 键更新节点的属性,例如

baremetal node set <node-uuid> --property root_device='{"wwn": "0x4000cca77fc4dba1"}'

这将保证 Bare Metal 服务将选择具有指定 wwn 值的磁盘设备,或者如果找不到该设备则会使部署失败。

注意

从 Ussuri 版本开始,可以为每个实例指定根设备提示,请参阅 将 Bare Metal 服务用作独立服务

提示可以在值字符串的开头带有运算符。如果未指定运算符,则默认值为 ==(对于数值)和 s==(对于字符串值)。支持的运算符如下:

  • 对于数值

    • = 大于或等于。这等效于 >=,并且为了 遗留原因 而受支持

    • == 等于

    • != 不等于

    • >= 大于或等于

    • > 大于

    • <= 小于或等于

    • < 小于

  • 对于字符串(作为 python 比较)

    • s== 等于

    • s!= 不等于

    • s>= 大于或等于

    • s> 大于

    • s<= 小于或等于

    • s< 小于

    • <in> 子字符串

  • 对于集合

    • <all-in> 集合中包含所有元素

    • <or> 找到其中一个

    • <range-in> GiB 中的范围边界,边界条件可以是包含 '[' 或排除 '('。

示例是

  • 查找大于或等于 60 GiB 且非旋转(SSD)的磁盘

    baremetal node set <node-uuid> --property root_device='{"size": ">= 60", "rotational": false}'
    
  • 查找供应商为 samsungwinsys 的磁盘

    baremetal node set <node-uuid> --property root_device='{"vendor": "<or> samsung <or> winsys"}'
    

注意

如果指定了多个提示,则设备必须满足所有提示。

将内核参数附加到启动实例

Bare Metal 服务支持将自定义内核参数传递给启动实例,以满足用户的需求。附加内核参数的方式取决于如何启动实例。

网络启动

目前,Bare Metal 服务支持通过以下方式将统一的内核参数分配给通过 PXE 启动的实例

  • 修改 [pxe]/kernel_append_params 配置选项,例如

    [pxe]
    kernel_append_params = quiet splash
    

    注意

    该选项在 Xena 周期之前称为 pxe_append_params

  • 从已发行的模板复制模板到另一个位置,例如

    https://opendev.org/openstack/ironic/src/branch/master/ironic/drivers/modules/pxe_config.template
    

    进行修改并通过配置选项指向自定义模板:[pxe]/pxe_config_template[pxe]/uefi_pxe_config_template

本地启动

对于本地启动实例,用户可以使用配置驱动器(请参阅 启用配置驱动器 (configdrive))将自定义脚本传递给内核参数,以便在创建实例时进行附加。这更灵活,并且可以因实例而异。以下是 grub2 与 ubuntu 的示例,用户可以根据自己的用例进行自定义

#!/usr/bin/env python
import os

# Default grub2 config file in Ubuntu
grub_file = '/etc/default/grub'
# Add parameters here to pass to instance.
kernel_parameters = ['quiet', 'splash']
grub_cmd = 'GRUB_CMDLINE_LINUX'
old_grub_file = grub_file+'~'
os.rename(grub_file, old_grub_file)
cmdline_existed = False
with open(grub_file, 'w') as writer, \
       open(old_grub_file, 'r') as reader:
       for line in reader:
           key = line.split('=')[0]
           if key == grub_cmd:
               #If there is already some value:
               if line.strip()[-1] == '"':
                   line = line.strip()[:-1] + ' ' + ' '.join(kernel_parameters) + '"'
               cmdline_existed = True
           writer.write(line)
       if not cmdline_existed:
           line = grub_cmd + '=' + '"' + ' '.join(kernel_parameters) + '"'
           writer.write(line)

os.remove(old_grub_file)
os.system('update-grub')
os.system('reboot')

控制台

为了更改 Bare Metal 服务配置文件([pxe] 部分在 /etc/ironic/ironic.conf 中)中的默认控制台配置,请包含串行端口终端和串行速度。串行速度必须与 BIOS 设置中的串行配置相同,以便可以在串行控制台或 Web 控制台中看到操作系统启动过程。以下示例表示串行和 Web 控制台的可能参数。

  • 节点串行控制台。控制台参数 console=ttyS0,115200n8 使用 ttyS0 作为控制台输出,速率为 115200bps, 8bit, 无校验,例如:

    [pxe]
    
    # Additional append parameters for baremetal PXE boot.
    kernel_append_params = nofb vga=normal console=ttyS0,115200n8
    
  • 对于节点 Web 控制台配置类似于添加 ttyX 参数,请参阅示例

    [pxe]
    
    # Additional append parameters for baremetal PXE boot.
    kernel_append_params = nofb vga=normal console=tty0 console=ttyS0,115200n8
    

有关如何添加控制台的详细信息,请参阅参考文档 内核参数串行控制台。对于本地启动,Bare Metal 服务无法控制内核启动参数。要配置本地控制台,请遵循上面的“本地启动”部分。

启动模式支持

一些裸机硬件类型(即 redfishilo 和通用 ipmi)支持设置启动模式(传统 BIOS 或 UEFI)。

注意

在通用 ipmi 驱动程序中设置启动模式支持与设置启动设备相关联。这使得 ipmi 驱动程序中的启动模式支持不完整。

注意

在本章中,我们将区分 ironic 节点裸机节点。区别在于,ironic 节点 指的是在 ironic 中配置的逻辑节点,而 裸机节点 指的是 ironic 管理的硬件机器。

当 ironic 管理节点启动模式时,适用以下规则

  • 如果硬件类型(或裸机节点)未实现读取裸机节点的当前启动模式,则 ironic 假定裸机节点上未设置启动模式

  • 如果 ironic 节点上未设置启动模式,并且裸机节点启动模式未知(未设置、无法读取等),则 ironic 节点启动模式设置为 [deploy]/default_boot_mode 选项的值

  • 如果在裸机节点上设置了启动模式,但未在 ironic 节点上设置,则裸机节点启动模式将设置在 ironic 节点上

  • 如果在 ironic 节点上设置了启动模式,但未在裸机节点上设置,则将尝试在裸机节点上设置 ironic 节点启动模式(在裸机节点上设置启动模式失败不会导致 ironic 节点部署失败)

  • 如果在 ironic 节点和裸机节点上出现不同的启动模式,则将尝试在裸机节点上设置 ironic 节点启动模式(在裸机节点上设置启动模式失败将导致 ironic 节点部署失败)

警告

如果裸机节点不支持设置启动模式,则操作员需要确保启动模式配置在 ironic 节点和裸机节点之间保持一致。

可以在 Bare Metal 服务中以以下方式配置启动模式

  • 只能为节点配置一种启动模式(uefibios)。

  • 如果操作员希望节点始终以 uefi 模式或 bios 模式启动,则可以使用 capabilities 参数在裸机节点的 properties 字段中。操作员必须手动在裸机节点上设置适当的启动模式。

    要将节点配置为 uefi 模式,请将 capabilities 设置如下

    openstack baremetal node set <node-uuid> --property capabilities='boot_mode:uefi'
    

    相反,要将节点配置为 bios 模式,请将 capabilities 设置如下

    openstack baremetal node set <node-uuid> --property capabilities='boot_mode:bios'
    

注意

Ironic 项目在 Yoga 开发周期中将节点的默认启动模式设置从 bios 更改为 uefi

具有将 boot_mode 设置为 uefi 的节点可以通过将 extra_spec 添加到 Compute 服务的 flavor 来请求

openstack flavor set ironic-test-3 --property capabilities:boot_mode="uefi"
openstack server create boot --flavor ironic-test-3 --image test-image instance-1

如果 capabilitiesextra_spec 中使用,如上所示,nova 调度器(ComputeCapabilitiesFilter)将仅匹配在 properties/capabilities 中以适当方式设置 boot_mode 的裸机节点。它将过滤掉其余节点。

上述用于在 Compute 服务中匹配的设施可用于异构环境,其中存在 uefibios 机器的混合,并且操作员希望为用户提供有关启动模式的选择。如果 flavor 不包含 boot_mode 并且为裸机节点配置了 boot_mode,则 nova 调度器将考虑所有节点,并且用户可能会获得 biosuefi 机器。

某些硬件支持设置安全启动模式,请参阅 UEFI 安全启动模式 以获取详细信息。

选择磁盘标签

注意

术语 `磁盘 标签` 在 Ironic 中历史上一直使用,并源自 parted。 显然,每个人对 `磁盘 标签` 的叫法都不同 - 这些都是指同一件事:磁盘类型、分区表、分区映射等等…

当 Ironic 负责磁盘分区时,Ironic 允许操作员选择希望其裸机节点使用的磁盘标签;因此,选择磁盘标签不适用于正在部署的镜像为 `整个 磁盘 镜像` 的情况。

在某些边缘情况下,有人可能希望为正在部署的镜像选择特定的磁盘标签,包括但不限于

  • 对于以 `bios` 启动模式启动且磁盘大于 2TB 的机器,建议使用 `gpt` 磁盘标签。 这是因为使用 MBR 分区类型无法寻址超过 2TB 的容量。 但是,尽管 GPT 声称与旧版 BIOS 系统兼容 但事实并非总是如此

  • 操作员可能希望强制分区始终为 MBR(即使机器以 `uefi` 启动模式部署),以避免实例上应用程序和工具出现故障。

磁盘标签可以通过两种方式配置;当 Ironic 与 Compute 服务一起使用或在独立模式下使用时。 以下要点和章节将描述这两种方法

  • 如果未提供磁盘标签,Ironic 将根据启动模式对其进行配置(参见 启动模式支持);`bios` 启动模式将使用 `msdos`,而 `uefi` 启动模式将使用 `gpt`。

  • 只能为节点配置一个磁盘标签 - 要么 `msdos` 要么 `gpt`。

警告

如果主机处于 UEFI 启动模式,则使用 `disk_label` 是多余的,如果节点显式设置为以 UEFI 模式启动,则可能导致部署意外失败。 强烈建议使用适当的启动模式。

当与 Compute 服务一起使用时

当 Ironic 与 Compute 服务一起使用时,应将磁盘标签设置为节点 `properties/capabilities` 字段,以及将请求该功能的 flavor,例如

baremetal node set <node-uuid> --property capabilities='disk_label:gpt'

至于 flavor

openstack flavor set baremetal --property capabilities:disk_label="gpt"

当在独立模式下使用时

不使用 Compute 服务时,应将磁盘标签直接设置为节点的 `instance_info` 字段,如下所示

baremetal node set <node-uuid> --instance-info capabilities='{"disk_label": "gpt"}'

通知

Bare Metal 服务支持发出通知,这些通知是在消息代理(如 RabbitMQ 或由 oslo messaging 库 支持的任何其他消息代理)上发送的消息,用于指示发生的各种事件,例如节点更改电源状态时。 外部服务可以从消息总线读取这些通知。 例如,Searchlight 是一个 OpenStack 服务,它使用通知来索引(并可搜索)Bare Metal 服务的资源。

默认情况下禁用通知。 有关可用通知的完整列表以及如何启用它们的说明,请参阅 通知

配置节点 Web 控制台

请参阅 配置控制台