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 缓存,操作员需要配置两个不同的中间件,cache 和 cachemanage。 cache 中间件负责配置缓存资源,例如缓存目录、初始化缓存驱动程序等,而 cachemanage 中间件用于通过 glance-api 处理实际的缓存资源。由于缓存现在将成为 glance V2 API 的一部分,我们希望根据 弃用和移除 政策弃用 cachemanage 中间件并将其移除。新添加的缓存端点在本周期将是 EXPERIMENTAL,并在下个周期标记为稳定。
除了上述提出的更改,这将引入三个新的策略 cache_image、cache_list 和 delete_cache,以便具有适当权限的用户可以执行这些操作。我们还将弃用现有的 manage_image_cache’ 策略,以支持新的策略。为了使新的策略与安全的 RBAC 兼容,我们需要确保在执行新的策略时传递所需的参数,例如 ImageTarget。建议将 cache_image、cache_list 和 delete_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 文档
还需要使用新命令更新缓存文档