支持服务器附加卷的 delete_on_termination¶
https://blueprints.launchpad.net/nova/+spec/support-delete-on-termination-in-server-attach-volume
此蓝图建议在卷附加期间支持传递 delete_on_termination,以便在删除服务器时可以删除附加的卷。
问题描述¶
目前,nova 已经支持卷附加 API,但在附加卷的同时,无法配置数据卷在实例销毁时是否可以被删除。在配置服务器处理数据卷以销毁实例时,这有点不方便。
用例¶
在大规模环境中,系统中创建了大量的资源,有时一个实例需要附加更多的数据卷。因此,用户需要为每个实例设置附加卷的处理模式。在销毁实例时,可以一起删除数据卷,清除无效数据,并释放存储空间。
提议的变更¶
为卷附加 API 添加一个新的微版本,以支持配置实例销毁时是否删除数据卷。
在同一个微版本中,在显示附加卷时,将 delete_on_termination 添加到 GET 响应中。
有关详细信息,请参阅 REST API 影响 部分。
备选方案¶
用户在删除服务器后手动清理数据卷,就像他们今天需要做的那样。
数据模型影响¶
无
REST API 影响¶
URL: /v2.1/servers/{server_id}/os-volume_attachments
请求方法: POST (附加卷)
将
delete_on_termination参数添加到请求体中,其语义/模式与初始服务器创建block_device_mapping_v2对象相同。{ "volumeAttachment": { "volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804", "delete_on_termination": true } }
如果未指定,则
delete_on_termination字段的默认值为 False。请求方法: GET (列出卷附件)
将
delete_on_termination字段添加到附加卷的响应负载中。{ "volumeAttachments": [ { "device": "/dev/sdd", "id": "a26887c6-c47b-4654-abb5-dfadf7d3f803", "serverId": "fb6077e6-c10d-4e81-87fa-cb0f8c103051", "tag": "foo", "volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803", "delete_on_termination": false }, { "device": "/dev/sdc", "id": "a26887c6-c47b-4654-abb5-dfadf7d3f804", "serverId": "fb6077e6-c10d-4e81-87fa-cb0f8c103051", "tag": null, "volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804", "delete_on_termination": true } ] }
URL: /servers/{server_id}/os-volume_attachments/{volume_id}
请求方法: GET (显示卷附件)
将
delete_on_termination字段添加到附加卷的响应负载中。{ "volumeAttachment": { "device": "/dev/sdc", "id": "a26887c6-c47b-4654-abb5-dfadf7d3f804", "serverId": "fb6077e6-c10d-4e81-87fa-cb0f8c103051", "tag": null, "volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804", "delete_on_termination": true } }
注意
PUT /servers/{server_id}/os-volume_attachments/{volume_id} 不属于本次提议的更改范围,因为该 API 今天仅由 libvirt 驱动程序实现“交换卷”操作。 [1] 修改 PUT API 超出了此规范的范围。如果用户希望更改非根附加卷的 delete_on_termination 值,他们可以通过分离并使用更新后的 delete_on_termination 值重新附加卷来执行此操作。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
python-novaclient 和 python-openstack client 需要更新,以支持在附加卷和列出/显示附加卷时新的 delete_on_termination 参数。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
升级影响¶
根据实现情况,不应有升级影响。今天,当将卷附加到非搁置卸载服务器时,BlockDeviceMapping 记录在 nova-compute 服务中创建。当将卷附加到搁置卸载服务器时,BDM 在 API 服务中创建。为了避免尝试将具有 delete_on_termination=true 的卷附加到运行在较旧的计算服务上的服务器时出现问题,实现应仅在 API 中设置该字段,而不是在计算服务中设置。
实现¶
负责人¶
- 主要负责人
张斌
工作项¶
在 POST 和 GET os-volume_attachments API 中添加
delete_on_termination支持。在 python-novaclient 和 python-openstackclient 中添加
delete_on_termination支持。添加相关测试
依赖项¶
无
测试¶
添加相关的单元测试,用于负面场景,例如尝试在旧的微版本中指定
delete_on_termination,传递具有无效值(如 null)的delete_on_termination等。添加相关的功能测试,用于正常场景,例如 API 示例。
由于使用 CinderFixture 的树内功能测试足以测试此功能,因此不需要 Tempest 测试。
文档影响¶
更新受影响 API 的 API 参考。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Train |
引入 |