Cache API

https://blueprints.launchpad.net/glance/+spec/cache-api

目前管理拆分部署比较困难,有时需要操作员在多个节点上运行命令。引入一个缓存 API 将使管理此类部署更容易。

问题描述

添加与缓存相关的新的 API 端点将带来双重好处

  • 结合计划中的集群感知工作,这将更容易管理拆分部署(不同位置的多个 glance-api 节点)

  • 用户将需要处理更少的命令,因为 glance-cache-prefetcher 现在作为周期性作业的一部分包含在 glance-api 中,而 glance-cache-manage 现在将成为 python-glanceclient 的一部分。

提议的变更

本规范描述的主要变化是扩展 Glance API 以处理与缓存相关的操作。目标是拥有一个可以替代“glance-cache-manage”工具的 API。这些是我们希望支持的操作

  • 列出缓存的、排队的镜像

  • 删除缓存的、排队的镜像

  • 使用单个 API 调用删除所有缓存的和排队的镜像

  • 将镜像排队进行预取

目前,为了在部署中启用 glance 缓存,操作员需要配置两个不同的中间件,cachecachemanagecache 中间件负责配置缓存资源,例如缓存目录、初始化缓存驱动程序等,而 cachemanage 中间件用于通过 glance-api 处理实际的缓存资源。由于缓存现在将成为 glance V2 API 的一部分,我们希望根据 弃用和移除 政策弃用 cachemanage 中间件并将其移除。新添加的缓存端点在本周期将是 EXPERIMENTAL,并在下个周期标记为稳定。

除了上述提出的更改,这将引入三个新的策略 cache_imagecache_listdelete_cache,以便具有适当权限的用户可以执行这些操作。我们还将弃用现有的 manage_image_cache’ 策略,以支持新的策略。为了使新的策略与安全的 RBAC 兼容,我们需要确保在执行新的策略时传递所需的参数,例如 ImageTarget。建议将 cache_imagecache_listdelete_cache 操作限制为仅供管理员使用。

备选方案

如果我们不处理集群感知,并且不提供易于使用的缓存管理 API,操作员可能会编写自制解决方案来聚合来自多个节点的数据,但这将容易出错且不用户友好。

数据模型影响

REST API 影响

本规范提出以下新的端点

新的 API

  • 列出缓存的和排队的镜像

  • 删除缓存的或排队的镜像

  • 删除所有缓存的或排队的镜像

  • 将镜像排队进行缓存

常见响应代码

  • 创建 成功:201 Created

  • 删除 成功:204 No Content

  • 失败:400 Bad Request,包含详细信息。

  • 禁止:403 Forbidden

[新 API] 列出缓存的或排队的镜像

列出在此节点上缓存或排队进行缓存的所有镜像

GET /v2/cache
{
   "cached_images": [
      {
         "id": "d75b9181-e1ce-45b4-8147-fb66fc4ea82f",
         "last_accessed": 1560451015.977297,
         "last_modified": 1560451015.977297,
         "size": 12345,
         "hits": 42,
         "checksum": "6788146b9d3fddc8dd03d86bfe9239b0"
      },
   ],
   "queued_images": [
       "id": "d75b9181-e1ce-45b4-8147-fb66fc4ea82f",
   ]
}

响应代码

  • 200 – 在授权和成功请求后。响应体包含 JSON 有效负载,其中包含缓存的和排队的镜像。

[新 API] 删除排队的或缓存的镜像

从缓存中删除特定镜像

DELETE /v2/cache/​{image_id}​

响应代码

  • 204 – 镜像已删除

  • 403 – 权限被拒绝

[新 API] 删除所有排队的或缓存的镜像

删除所有排队的或缓存的镜像

DELETE /v2/cache

响应代码

  • 204 – 缓存已清除

  • 403 – 权限被拒绝

[新 API] 将镜像排队进行缓存

预缓存镜像

PUT /v2/cache/​{image_id}​

响应代码

  • 202 – 请求已被接受,镜像将被排队进行缓存

  • 403 – 权限被拒绝

  • 404 – 未找到镜像

安全影响

如“提出的更改”部分所述,将强制执行现有策略或新策略以避免安全漏洞。

通知影响

其他最终用户影响

应更新 glance 客户端,并添加新的命令

  • glance cache-list

  • glance cache-image <IMAGE-ID>

  • glance cache-delete <IMAGE-ID>

  • glance cache-delete-all

将提供传递直接 URL(host:port)到这些命令的机制,这将把调用定向到特定的 glance 节点。有关相同内容的实现细节将在特定的 glance-client 规范中描述。

性能影响

其他部署者影响

缓存将本地于每个 glance 节点,由于这些命令将在远程执行,操作员需要知道负载均衡器后面的每个 glance 节点的直接 URL。操作员需要提供此直接 URL 给 glanceclient,以便客户端应命中特定节点以检索该节点的缓存信息。

开发人员影响

实现

负责人

主要负责人

jokke

其他贡献者

cyril-roelandt

工作项

  • 弃用 cachemanage 中间件

  • 添加新的缓存端点 (/v2/cache)

  • 使新的策略与安全的 RBAC 兼容

  • 添加 python-glanceclient 支持

  • 弃用 glance-cache-manage

  • 弃用 glance-cache-prefetcher

  • 修改文档,更新 API 参考

  • Devstack 支持在远程节点上启用缓存

依赖项

测试

  • 应使用 Tempest 测试对新的 API 端点进行测试。

文档影响

  • 需要更新 API 文档

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

参考资料