支持恢复待删除镜像

https://blueprints.launchpad.net/glance/+spec/pending-delete-rollback

Glance 支持软删除镜像。如果启用此功能,当用户删除镜像时,镜像及其位置将首先进入一个特殊的 pending_delete 状态,该状态不会在 API 响应中显示。然后镜像将在一段时间内由 glance-scrubber 进程删除。但现在,没有办法将 pending_delete 状态的镜像恢复/回滚到 active 状态。

问题描述

延迟删除功能通常用于镜像过大,无法一次性删除的情况。使用此功能后,镜像数据将不会一次性删除,而是由 glance-scrubber 进程清理。问题在于,如果误删了镜像,则无法恢复删除操作。管理员唯一能做的是等待镜像数据被删除,然后重新上传镜像数据。

提议的变更

本提案旨在恢复处于 pending_delete 状态的镜像,以便为允许紧急操作恢复意外删除提供恢复能力。但是,请务必记住,是否可以恢复特定镜像取决于 Glance 配置选项设置和操作员的快速响应。

由于 pending_delete 镜像只能由 glance-scrubber 删除,并且这是一个管理员操作,因此无需公开新的 API。更好的方法是增强 glance-scrubber 以支持将镜像从 pending_delete 状态恢复到 active 状态。

将向 glance-scrubber 命令添加一个名为 –restore 的新参数。用法如下:glance-scrubber –restore <image_id>glance-scrubber 首先会检查 scrubber 进程是否正在运行,如果是,则会引发错误消息,提示当前正在运行 scrubber,必须先将其终止 & scrubber 终止。如果不是,scrubber 将切换镜像状态从 pending_deleteactive

请确保在恢复 pending_delete 镜像之前先终止 glance-scrubber 守护进程,以避免镜像数据不一致。恢复镜像后,可以重新启动 glance-scrubber 守护进程。

限制

这旨在作为紧急操作,用于操作员无意中删除了重要的镜像,并立即意识到错误并采取行动在 glance-api.conf 文件中设置的 scrub_time 秒内。 pending-delete 状态是 Glance 的纯内部状态,镜像在 API 响应中仍然显示为处于 deleted 状态。因此,无法通过 API 确定镜像是否可以恢复。

此外,当镜像恢复时,其部分元数据将无法恢复。任何附加属性、标签或成员都不会被恢复。换句话说,这纯粹是一种可能的数据恢复操作,而不是完全的镜像恢复。

备选方案

不推荐的替代方法是创建一个新的 API 来恢复 pending_delete 镜像:

POST /v2/images/{images_id}/actions/revert

响应体可以如下所示:

Response: 200 OK
{
    "status":"active",
    "name":"cirros-0.3.1-x86_64-uec",
    "tags":[
    ],
    "kernel_id":"be50418b-a03c-4947-9122-b80a57f47ac4",
    "container_format":"ami",
    "created_at":"2017-09-11T08:42:14Z",
    "ramdisk_id":"e1256074-9f7b-4067-8356-4a5759c1db11",
    "disk_format":"ami",
    "updated_at":"2017-09-11T08:42:16Z",
    "visibility":"public",
    "self":"/v2/images/26c16e07-24ca-4abc-a523-bec068012363",
    "protected":false,
    "id":"26c16e07-24ca-4abc-a523-bec068012363",
    "file":"/v2/images/26c16e07-24ca-4abc-a523-bec068012363/file",
    "checksum":"f8a2eeee2dc65b3d9b6e63678955bd83",
    "min_disk":0,
    "size":25165824,
    "min_ram":0,
    "schema":"/v2/schemas/image"
}

数据模型影响

允许镜像状态从 pending_delete 更改为 active

REST API 影响

无。

安全影响

这是一个管理员操作。完全没有安全影响。

通知影响

无。

其他最终用户影响

对非管理员用户没有影响。对于管理员,他们可以通过 glance-scrubber 工具将镜像的状态从 pending_delete 回滚到 active

性能影响

其他部署者影响

开发人员影响

实现

负责人

wangxiyuan(wangxiyuan@huawei.com)

工作项

  • 修改 glance-scrubber 以包含 –restore <image_id> 选项。

  • 修改镜像状态转换以允许:pending_delete -> active

  • 更新相关文档和测试。

  • 应添加发布说明。

依赖项

测试

应添加相关的单元测试。

文档影响

应更新相关的文档。

参考资料

无。