支持 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 |
引入 |