列出镜像缓存节点的新 API

https://blueprints.launchpad.net/glance/+spec/list-nodes-image-cached

部署者希望通过一个 API 调用查看镜像在哪些 Glance worker 节点上缓存。

问题描述

目前,如果您配置了多个 Glance 节点,并且需要查看镜像是否在特定节点上缓存,则需要查询该特定 Glance 节点或查询每个 Glance 节点。

用例:在 DCN 环境中,您希望查看该特定边缘节点是否缓存了镜像。

提议的变更

Glance 现在默认使用集中式数据库进行缓存,这使我们能够访问跨 Glance 节点的全部缓存镜像。我们正在添加一个新的仅限管理员使用的 API,它将接受 image_id 作为输入参数,并返回该特定镜像缓存的所有 Glance 节点的直接 URL。

我们还将引入一个新的策略 list_cached_nodes,以便具有适当权限的用户可以执行此操作。

如果部署中未启用缓存,或者部署未使用集中式数据库进行缓存,则此 API 将向用户返回 HTTP 409 Conflict 响应。

将来,我们可以从 Nova 或 Cinder 等消费者中使用此 API,以便他们可以直接将 API 请求发送到缓存了镜像的特定 Glance 节点。

备选方案

数据模型影响

REST API 影响

此规范提出以下新 API

新的 API

  • 列出镜像缓存节点

常见响应代码

  • 已接受:200 已接受

  • 禁止:403 Forbidden

  • 冲突:409 冲突

  • 未找到:404 未找到

[新 API] 列出镜像缓存节点

列出节点

GET /v2/cache/nodes/{image_id}
{
    "cached_nodes": [
        http://node_1:60999,
        http://node_2:60999,
        http://node_5:60999,
     ],
}

安全影响

如“提议的变更”部分所述,将强制执行新的策略以避免安全漏洞。

通知影响

其他最终用户影响

Glance 客户端和 OpenStack 客户端应进行更新,并添加新的命令

  • glance cache-nodes-list <image_id>

  • openstack cache nodes list <image_id>

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

abhishekk

工作项

  • 引入新的 API 调用

  • 强制执行新的策略规则

  • 文档

  • 测试

依赖项

测试

新的 Tempest 测试以覆盖此场景

文档影响

  • 需要更新 API 文档

  • 还需要使用新命令更新缓存文档

参考资料