根设备提示

https://blueprints.launchpad.net/ironic/+spec/root-device-hints

允许操作员向 Ironic 传递一些提示,以决定在部署时应选择哪个设备。

问题描述

当部署 ramdisk 启动时,Ironic 会选择找到的第一个磁盘作为根设备(镜像将被放置在哪个设备上)。如果服务器有多个 SATA、SCSI 或 IDE 磁盘控制器,则其相应设备节点的添加顺序是任意的 [1] [2]。这可能导致 /dev/sda 和 /dev/sdb 等设备在每次启动时切换,并且 Ironic 在每次部署机器时都会选择不同的磁盘。

作为操作员,如果我的服务器有多个磁盘,我希望选择 Ironic 应该将镜像部署到哪个磁盘上。或者,如果我创建了一个 RAID 设备作为我的根设备,我希望告诉 Ironic 始终使用该设备。

另一个问题是,对于完整磁盘镜像部署,如果我们两次部署服务器,并且每次 Ironic 选择不同的磁盘,我们最终可能会在 2 个磁盘上拥有有效的引导加载程序。

提议的变更

此蓝图提出的更改是为操作员提供一种通过 Ironic API 传递有关在部署时应选择哪个磁盘的提示的方式。这样 Ironic 就可以始终选择正确的磁盘来写入镜像。

此外,随着 Ironic 能够创建 RAID 阵列,能够告诉 Ironic 使用刚刚创建的设备作为部署的根设备会很好。

此规范建议在初始工作时传递有限数量的提示,但以后可以扩展。最初建议的提示列表是

  • 型号 (STRING):设备标识符

  • 供应商 (STRING):设备供应商

  • 序列号 (STRING):磁盘序列号

  • WWN (STRING):唯一的存储标识符

  • HCTL (STRING):SCSI 的 Host:Channel:Target:Lun

  • 大小 (INT):设备大小,单位为 GB

提示应位于 Node 资源的 properties 属性中,键将是 root_device,值是一个字典,以便操作员可以组合一个或多个提示。例如

node.properties['root_device'] = {'wwn': '0x4000cca77fc4dba1'}

关于将选择哪个磁盘的逻辑将遵循

  1. 如果未指定提示,Ironic 将继续选择找到的第一个磁盘。

  2. 如果指定了提示并且只找到一个磁盘,Ironic 将选择它。

  3. 如果指定了提示并且找到多个磁盘,Ironic 将选择匹配所有标准的第一个磁盘。

  4. 如果指定了提示并且未找到任何磁盘,则部署将被中止。

默认部署 ramdisk 和 IPA 需要更改以支持基于指定的提示过滤磁盘。

备选方案

我们可以建议操作员避免在由 Ironic 管理的机器上拥有多个存储设备。

数据模型影响

REST API 影响

由于我们希望使用字典作为 properties 属性的值,因此需要修复 bug 1398350

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

安全影响

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

部署者将在选择用于部署的磁盘设备方面具有更精细的粒度。

注意

在将设备大小指定为提示时,操作员需要确保该值与节点的 local_gb 属性不冲突。这将在本规范中记录。

开发人员影响

实现

负责人

主要负责人

lucasagomes

其他贡献者

工作项

  • 让 Ironic 检查 node.properties 中的提示

  • 将提示信息传递给部署 ramdisk 和 IPA

  • 添加测试和文档

  • 修改 diskimage-builder 中的默认部署 ramdisk,以便在选择磁盘设备时考虑提示

  • 修改 IPA 以在选择磁盘设备时考虑提示

依赖项

测试

  • 将添加单元测试

升级和向后兼容性

该更改是向后兼容的,因为如果未指定提示,Ironic 将继续执行它今天所做的事情(选择找到的第一个磁盘进行部署)。

文档影响

将添加一份文档,解释提示的工作原理以及支持的选项和值。

参考资料