OpenStack Glance:直接在 Ceph 中导入镜像并转换它们

Ceph 为了在最佳情况下运行,需要使用 RAW 镜像。但是,将 RAW 镜像上传到 Glance 比较麻烦,因为它需要一段时间。让我们看看如何让我们的生活更轻松。
首先,让我们上传我们的镜像,为了这个例子,我使用了一个小的 CirrOS 镜像
```bash $ sudo rbd -p imajeez --image-format 2 import cirros-0.3.0-x86-64-disk.img.1 $(uuidgen)
$ sudo rbd -p imajeez info 33fc77e2-df0e-4f71-a966-b8df2b245f42 rbd image '33fc77e2-df0e-4f71-a966-b8df2b245f42': size 9532 kB in 3 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.331574b0dc51 format: 2 features: layering ```
现在这变得有趣了!这里的好处是我们可以直接从 Ceph 触发转换,使用 qemu-img 工具。只需调用一个转换,并基于新的 UUID 生成一个新的名称。
bash $ sudo qemu-img convert -O raw rbd:imajeez/33fc77e2-df0e-4f71-a966-b8df2b245f42 rbd:imajeez/$(uuidgen)
现在我们的池中有两个镜像
bash $ sudo rbd -p imajeez ls 33fc77e2-df0e-4f71-a966-b8df2b245f42 4f460d8c-2af3-4041-a28d-12c3631a305f
并且该镜像具有 RAW 格式
bash $ sudo qemu-img info rbd:imajeez/4f460d8c-2af3-4041-a28d-12c3631a305f image: rbd:imajeez/4f460d8c-2af3-4041-a28d-12c3631a305f file format: raw virtual size: 39M (41126400 bytes) disk size: unavailable cluster_size: 4194304
现在我们可以删除原始 QCOW2 镜像
bash $ sudo rbd -p imajeez rm 33fc77e2-df0e-4f71-a966-b8df2b245f42
为了使此镜像符合 Glance 的要求,我们需要快照并保护它
```bash $ sudo rbd --pool imajeez snap create --snap snap 4f460d8c-2af3-4041-a28d-12c3631a305f $ rbd --pool imajeez snap protect --image 4f460d8c-2af3-4041-a28d-12c3631a305f --snap snap
$ sudo rbd -p imajeez snap ls 4f460d8c-2af3-4041-a28d-12c3631a305f SNAPID NAME SIZE
4 snap 40162 kB
```
最终将此镜像添加到 Glance 中,请注意,使用 --location 标志将不会上传任何内容,因为我们直接注册 Ceph 中的位置。
bash $ glance image-create --id 4f460d8c-2af3-4041-a28d-12c3631a305f --name CirrosImport --store rbd --disk-format raw --container-format bare --location rbd://$(sudo ceph fsid)/imajeez/4f460d8c-2af3-4041-a28d-12c3631a305f/snap +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | None | | container_format | bare | | created_at | 2014-11-10T17:00:02 | | deleted | False | | deleted_at | None | | disk_format | raw | | id | 4f460d8c-2af3-4041-a28d-12c3631a305f | | is_public | False | | min_disk | 0 | | min_ram | 0 | | name | CirrosImport | | owner | 2f314f86ca9048ac828baedb5e8e4e2a | | protected | False | | size | 41126400 | | status | active | | updated_at | 2014-11-10T17:00:02 | | virtual_size | None | +------------------+--------------------------------------+
当 Glance 转换蓝图实现后,此过程可能会被重现。一如既往,使用 Ceph 更容易,因为我们不需要将镜像存储在临时位置,转换它然后上传它。不幸的是,这是 Swift 等后端存在的问题。