从 nova “baremetal” 部署升级到 Ironic¶
https://blueprints.launchpad.net/nova/+spec/deprecate-baremetal-driver
本文档描述了从 nova.virt.baremetal 驱动程序部署升级到 nova.virt.ironic 驱动程序的要求。它概述了此类升级的数据迁移路径和服务升级过程。
问题描述¶
社区将裸机服务器配置的功能分离到一个单独的程序中,其中包括 ironic 和 python-ironicclient 项目。虽然 nova.virt.baremetal 驱动程序的最初意图是作为 TripleO 的实验性概念验证,但它可能已部署在某些生产环境中,以促进高性能计算工作负载。
期望选择使用 nova.virt.baremetal 的操作员在升级期间丢失所有状态并删除所有实例是不合理的。迁移工具将在 Ironic 中提供。
注意:服务升级仅支持在同一发布版本内进行,并且仅在包含 Ironic 的第一个集成发布版本中支持。
例如,如果这项工作在 Juno 周期完成,则将支持从“juno baremetal”升级到“juno ironic”,但将不支持直接从“icehouse baremetal”升级到“juno ironic”。应该首先从“icehouse baremetal”升级到“juno baremetal”,然后再升级到“juno ironic”。
提议的变更¶
在完成这项工作的周期之后的发布周期开始时,baremetal 的工件将从 Nova 树中删除。这包括:baremetal virt 驱动程序、baremetal 主机管理器、“nova_bm”数据库模式及其迁移测试。
API 扩展将由只读代理 API 替换。这将转发以下 API 命令到 Ironic:- baremetal-interface-list - baremetal-node-list - baremetal-node-show
备选方案¶
已经讨论了三种替代方案。
不提供任何升级路径;这遭到了强烈反对。
提供仅数据迁移(例如,要求在迁移之前或作为迁移的一部分删除实例)。这也遭到了反对。
与其使用数据提取和加载脚本,不如通过 Ironic 的 REST API 注册实例。这将要求 ironic 的 REST API 接受具有非空 provision_state 和 power_state 的节点,而它今天明确不允许这样做。此更改将需要对配置 API 和 conductor 服务内的状态管理进行重大更改。
数据模型影响¶
nova_bm 模式和所有支持的 DB 迁移测试可能会被删除。
REST API 影响¶
Nova 的 REST API 的 baremetal 扩展将由一个只读代理 API 替换为 Ironic。这将检查策略,并将用户的令牌转发到 Ironic 进行二次验证(Ironic 需要“admin”权限)。
以下命令将不会被代理:- baremetal-interface-add - baremetal-interface-remove - baremetal-node-create - baremetal-node-delete
这些方法的端点将返回 404 NOT FOUND。
通知影响¶
无
安全影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
devananda
- 其他贡献者
adam_g romcheg
工作项¶
创建新的 API 代理/扩展
数据库提取和加载脚本(在 Ironic 树中)
Flavor 更新脚本(在 Ironic 树中)
操作员文档(在 Ironic 树中)
Grenade 测试(在 Grenade 中)
依赖项¶
此提案主要取决于 nova.virt.ironic 驱动程序被接受到 Nova 代码库中,其次是迁移脚本的 grenade 测试以及 tempest 中几个开放的更改,这将允许 Ironic 通过 tempest/api/compute。
测试¶
需要开发一个 Grenade 测试,该测试可以
使用假的 virt 驱动程序部署 nova
用 baremetal 节点和接口填充 nova_bm 数据库,这些节点和接口映射到本地 VM
为 nova-bm 的部署内核和 ramdisk 在 glance 中创建虚拟镜像,并创建一个引用它们的 flavor
安装 ironic,构建并发布新的部署内核和 ramdisk
执行数据迁移
重新配置 nova 以使用 ironic,启动 ironic,并重新启动 nova-compute
运行 tempest
文档影响¶
必须编写并维护升级文档一个发布周期。
建议的升级路径是
构建 ironic 部署 ramdisk 并将其加载到 glance
创建空的 ironic 数据库
开始维护期
停止配置为使用 nova.virt.baremetal 驱动程序的 nova-compute 服务
更新 Nova 中的 flavor 元数据以引用新的部署内核和 ramdisk
从 nova_bm 提取数据并导入到 ironic,使用提供的工具。此工具必须接受每个数据库的单独数据库凭据。
启动 ironic 服务
观察 ironic 日志文件,以确保接管完成,没有错误
重新配置 nova-scheduler 以使用 ironic 主机管理器,并根据需要使用精确匹配调度器过滤器,然后重新启动它
重新配置 nova-compute 服务以使用 nova.virt.ironic 驱动程序和 ClusteredComputeManager,然后重新启动它
观察 nova-compute 日志文件,以确保它已连接到 ironic 并准确报告可用资源
结束维护期
参考资料¶
https://etherpad.openstack.org/p/juno-nova-deprecating-baremetal
https://etherpad.openstack.org/p/juno-nova-mid-cycle-meetup