为 Node 模型添加 instance_info 字段

https://blueprints.launchpad.net/ironic/+spec/add-node-instance-info

此蓝图将为 Nodes 资源引入一个新字段,用于存储特定实例的数据,驱动程序在配置或管理该实例时将使用这些数据。

问题描述

描述正在部署的特定实例的元数据通过 node.driver_info 字段从客户端传递到部署驱动程序。该字段旨在仅存储驱动程序管理和配置特定节点所需的驱动程序特定元数据(例如 IPMI 凭据)。此类元数据应在多次部署到该节点时保持不变,并且更新 driver_info 通常对应于操作员的操作(例如轮换密码)。

每次部署都会发生变化的特定实例的元数据不应与驱动程序特定的元数据一起存储。

提议的变更

  • 在 Nodes 资源中创建一个新的 instance_info 属性,所有实例级别相关的数据都应存储在此处。

  • 修改 Nova Ironic 驱动程序,以便在部署节点时填充 instance_info 而不是 driver_info。

  • 部署 ramdisk 和部署内核不应作为 Flavor 的 extra_data 的一部分,而应位于 Node 的 driver_info 中。

  • 在节点的拆卸过程中,删除 instance_info 字段中存储的所有数据(因为所有存储在那里的数据都与实例相关)。

备选方案

继续使用 driver_info 字段?

数据模型影响

instance_info 字段将被添加到 nodes 表中。

REST API 影响

将向 Node 资源添加一个新的 instance_info 属性。

驱动程序 API 影响

Nova 驱动程序影响

在准备部署节点时,Nova 驱动程序将实例信息添加到 nodes driver_info 字段中。通过此更改,‘root_gb’、‘swap_gb’、‘ephemeral_gb’、‘ephemeral_format’、‘image_source’ 字段现在将添加到 instance_info 字段中。

Nova 驱动程序还需要更改,不再从 flavor 的 extra spec 中获取部署 ramdisk 和部署内核,这些字段应成为节点注册过程的一部分,并且在触发部署之前应存在于节点上(否则验证将失败)。

安全影响

作为副作用,此更改通过允许在 API 层添加和强制执行策略来隐藏 driver_info 字段,从而实现后续的安全改进。这将允许隐藏管理凭据,使其对用户不可见。

其他最终用户影响

Nova 中不应将部署 ramdisk 和部署内核作为 Flavor 的一部分进行设置,如果需要(取决于驱动程序),这些字段应由操作员在注册节点时在 Nodes 的 driver_info 字段中设置。

将创建一个迁移脚本,以演示如何从 Nova flavor 中提取部署 ramdisk 和部署内核,并相应地更新 Ironic Node 的 driver_info 字段。

可扩展性影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

lucasagomes

其他贡献者

jroll

工作项

  • 在数据库的 nodes 表中创建 instance_info 字段。

  • 在 Nodes 对象中创建一个新的 instance_info 属性。

  • 修改 PXE 驱动程序,以便在部署节点时查看新的 instance_info 字段以获取实例级别数据。

  • 修改 Nova Ironic 驱动程序,以填充 Node 的 instance_info 字段,而不是 driver_info。

  • 修改 Nova Ironic 驱动程序,不再从 flavor 中获取部署 ramdisk 和部署内核,并在部署之前将其填充到 Node 中,这些字段应在节点注册后存在,否则验证将失败。

依赖项

测试

需要更改单元测试和 DevStack 以涵盖新的更改。

DevStack 的更改需要分三个阶段进行

  • 让 DevStack 将部署内核和部署 ramdisk 添加到 driver_info(同时仍然添加到 flavor 中)。

  • 将补丁合并到 Ironic 中。

  • 让 DevStack 停止将部署内核和部署 ramdisk 写入 flavor 中。

文档影响

应修改文档,以指示操作员不要将部署内核和 ramdisk glance 镜像 UUID 添加到 Nova flavor 中。相反,文档将指示操作员必须在注册节点时将此信息传递给 Ironic。

参考资料