支持 Glance v2 API

https://blueprints.launchpad.net/nova/+spec/use-glance-v2-api

本规范增加了 Nova 使用 Glance v2 API 的能力,并启动了对 Glance v1 API 支持的弃用周期。

虽然 Nova 的部分组件已经使用 Glance v2 API,但此规范旨在使对 Glance v1 API 的依赖变为可选,以便在未来的版本中完全移除它。

问题描述

Glance 在 Kilo 版本中将 v1 的状态从 CURRENT 降级为 SUPPORTED。目前 Nova 需要访问 Glance v1 API。Glance 希望弃用该 API,因此为了帮助这一努力,Nova 应该停止使用 Glance v1 API。

为了确保平滑升级,我们需要确保 Mitaka 版本支持使用 Glance v1 和 Glance v2,以便部署者有时间确保他们已部署 Glance v2,并且 Nova 可以使用它。

虽然 Nova 的某些区域已经使用 Glance v2,但仍有许多区域对 Glance v1 具有硬性依赖。仍然使用 Glance v1 的关键区域包括

  • Nova 的 Image API,实际上只是 Glance v1 API 的一个代理

  • 特定 virt 驱动程序的镜像下载和上传

  • 镜像元数据的 CRUD 操作

  • 在通用代码中创建和删除快照。

在停止 Nova 需要 Glance v1 并完全弃用对 Glance v1 的要求之前,我们需要移除上述所有 Glance v1 的使用。

请注意,我们必须保持与 Glance v1 和 Glance v2 的兼容性,以允许在版本之间进行平滑升级。

请注意,当前版本的 Glance v2 并没有提供一种有效的方法来实现当前 Nova Images API 支持的 changes_since 参数。但是,Glance 计划修复这个问题

https://blueprints.launchpad.net/glance/+spec/v2-additional-filtering

用例

目前,Nova 部署者被迫部署 Glance v1 和 Glance v2。这是因为 Nova 当前需要 Glance v1,但只有 Glance v2 才被认为可以安全地暴露给最终用户。

据推测,Nova 对 Glance v2 的缺乏支持导致了混淆,阻碍了人们部署 Glance v2。这反过来又给 DefCore 工作带来了一些问题。

提议的变更

为了避免不稳定,更改的数量将保持最小。可以在后续规范中进行彻底的重构。

主要工作是确保 Nova Image API 合约在与 Glance v1 API 或 Glance v2 API 通信时得到维护。这将需要当前的 Nova Image seam 能够同时与两个版本的 API 通信。Glance API 的版本发现能力将被用来确定是否部署了 v2 的 API。如果是,它将优先于 v1。

第二部分是查看 Nova 中与 Glance 相关的模块的其他区域,这些区域不适用于 Glance v2 API。

完成这些操作后,仍然存在一些特定于 virt 驱动程序的 Glance 客户端代码,但这将被视为一个拉伸目标,不应阻止 Glance v1 API 支持的常规弃用。

不支持 Glance v2 的 virt 驱动程序应回退到 v1。最终,所有驱动程序都应支持 v2,并且 Glance 的 v1 默认应被关闭。此切换的预期截止日期为 N。

本规范不打算更改 Nova 中现有 Glance 配置文件的值——包括 URL 中的版本——而是通知部署者新的期望值已更改,并且应更新配置文件。在 Mitaka 周期内,我们将支持版本和非版本化的 URL,以便部署者有足够的时间切换。这还将允许我们拥有 Glance v1 和 Glance v2 特定的门控,以彻底测试所做的更改。

备选方案

理想情况下,glanceclient 应该作为 Cinder 和 Nova 使用的镜像上传和下载的 seam,并具有稳定的 API。但这目前并非如此,我们已经等待太久了,不能再延迟这项工作了。但是,假设这将在未来存在,以避免再次遇到这种情况。

数据模型影响

无。

REST API 影响

不会对 REST API 合约产生影响。Nova Image API 将继续代理请求到 Glance v1,直到完成恢复 changes_since 的工作。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

无。

其他部署者影响

部署者应该意识到,某些 virt 驱动程序可能尚未支持 Glance v2。这些细节将在发布说明中明确记录,并且将记录适当的警告。

这些驱动程序将显式请求部署 v1,而不是完全依赖于版本发现。

开发人员影响

无。

实现

负责人

主要负责人

mfedosin

其他贡献者

flaper87 sudipto

工作项

  • nova.image 设置为由 Glance v1 或 Glance v2 支持,默认情况下使用 Glance v2。通过重构消耗镜像 API 的模型来实现对 Glance v1 和 Glance v2 的支持。

  • 确保代码库的其余部分可以使用现有的镜像代码与 Glance v1 或 Glance v2 通信,并在可能的情况下默认使用 Glance v2。

  • 确保所有 virt 驱动程序都支持 Glance v2 或回退到 v1。

  • 如果在日志中运行 Glance v1,则添加弃用警告。

依赖项

Nova Image API 对 Glance v2 的完全支持取决于

https://blueprints.launchpad.net/glance/+spec/v2-additional-filtering

这将要求部署者部署 Glance Mitaka,并且与 Glance 的 API 不兼容。

测试

现有的 tempest 测试将验证 Glance v2 API 支持,因为默认值将移动到 Glance v2。

但是,我们还应该确保其中一个门控作业仍然测试仅 Glance v1,以避免破坏现有的部署。

文档影响

  • 需要记录 Glance API 版本配置选项

  • 发布说明应注意 Glance v1 支持的部分弃用

  • 发布说明应警告任何无法使用 Glance v2 运行的 virt 驱动程序。

参考资料

无。

历史

修订版

发布名称

描述

Liberty

引入