我有一个与 ceph 集成的 openstack。我正在研究不使用 cinder_backup 模块来创建实例卷副本的最快方法。在 Ceph 中,可以访问存储在池中的 rbd 文件(如卷池),我们可以导出它们,然后从中创建映像并创建另一个实例。但还有另一种名为“卸载 rbd 的 copy_volume_to_image”的方法https://specs.openstack.org/openstack/cinder-specs/specs/liberty/optimze-rbd-copy-volume-to-image.html 我想知道如何使用这些复制的卷来镜像 Openstack 中的池,因为这样做之后,镜像在 rbd 池中,但在 OpenStack 中不可用,因为 OpenStack 尚未生成它并且没有 OpenStack ID。我想知道您是否可以帮助我了解如何在使用此方法创建后使用镜像。提前谢谢您。
答案1
您可以使用 cinder 管理现有的 rbd 镜像并将它们“采纳”到 openstack 中。假设您已经将源镜像克隆或复制到目标镜像(例如:)rbd clone fast-pool/image@snap fast-pool/new_image
,您需要后端信息,下面是我们的一个集群的示例(我们使用两个不同的 rbd 池进行快速和慢速存储):
control01:~ # cinder get-pools
+----------+---------------------+
| Property | Value |
+----------+---------------------+
| name | control@rbd#rbd-ssd |
+----------+---------------------+
+----------+----------------------+
| Property | Value |
+----------+----------------------+
| name | control@rbd2#rbd-hdd |
+----------+----------------------+
我想要管理的目标图像位于快速存储(rbd-ssd)中,因此这是我需要让 cinder 将其作为卷进行管理并使其“被 openstack 所知”的命令:
cinder manage --name new_volume_name control@rbd#rbd-ssd new_image
“new_volume_name”是您随后将在输出中看到的名称cinder list
,而“new_image”是您在上一步中创建的克隆的 rbd 映像。
答案2
@eblock 感谢您的回复。我的情况有所不同。我已经在名为 images 的池之一中克隆了图像。但 cinder 看到的池与 ceph 中的池不同。以下是 ceph 中的池
# ceph osd pool ls
.mgr
images
volumes
backup
Cinder 看到的是这样的:
# cinder get-pools
+----------+-------------------------+
| Property | Value |
+----------+-------------------------+
| name | controller3@rbd-1#rbd-1 |
+----------+-------------------------+
+----------+-------------------------+
| Property | Value |
+----------+-------------------------+
| name | controller2@rbd-1#rbd-1 |
+----------+-------------------------+
+----------+-------------------------+
| Property | Value |
+----------+-------------------------+
| name | controller1@rbd-1#rbd-1 |
+----------+-------------------------+
因此当我尝试使用“cinder manage”命令时,
cinder manage --name my_new_volume controller1@rbd-1#rbd-1 my_cloned_image
它创建了卷并卡在“错误”状态,另外我在 cinder 日志文件中收到此错误:
cinder.exception.ManageExistingInvalidReference: Manage existing volume failed due to invalid backend reference my_cloned_image: Specified rbd image does not exist.
我甚至将后端地址更改为 ceph 中的池名称,但没有帮助。