使用现有的 RBD 镜像并将其放入 Glance

shan

文章的标题并不是那么明确,实际上我很难找到一个合适的标题。因此让我澄清一下。我一直在想 Glance 是否能够在其存储中转换镜像。快速答案是否定的,但我认为这个功能值得实现。Glance 可以将 QCOW2 镜像转换为 RAW 格式。通常,如果您已经在 Ceph 集群(RBD)中拥有一个镜像,您需要下载该镜像(因为您可能不再拥有源镜像文件),然后使用 qemu-img 手动转换它(QCOW2 –> RAW),并最终将其导入到 Glance。关于这一点,我们稍后再讨论,我将在未来的文章中解决这个问题。现在让我们坚持第一个问题。想象一下,您有一个由 Ceph 集群支持的 KVM 集群,您的 CTO 想要您将整个环境迁移到 OpenStack,因为它很流行(开玩笑,OpenStack 真的很棒!)。您不会备份所有镜像然后构建一个新的集群,您可能希望 OpenStack(Glance)意识到您的 Ceph 集群。一般来说,您只需要将 Glance 连接到您的一个镜像池。之后,唯一要做的事情就是在 Glance 中创建(与其说是创建新镜像,不如说是注册镜像 ID 和元数据)。这里不用担心,下面是解释。有史以来最长的介绍。

在本文中,我假设 Glance 已经连接到 Ceph 并连接到正确的 RBD 池。在开始任何操作之前,请理解,在当前的 Grizzly 稳定分支中,RBD 后端尚未实现。这很有趣,因为我们不需要太多来实现它。该错误报告在 launchpad 上,并且建议的功能正在 Gerrit 上审核。

但是,如果您现在想启用修复程序

  • 转到 /opt/stack/glance/glance/api/v1/images.py 的第 278
  • 然后像这样编辑该行
1
for scheme in ['s3', 'swift', 'http', 'rbd']:

让我们测试一下!

从 rbd 客户端获取镜像大小

1
2
3
4
5
6
$ rbd -p images info ubuntu-raw
rbd image 'ubuntu-raw':
size 2048 MB in 512 objects
order 22 (4096 KB objects)
block_name_prefix: rb.0.3ded.2eb141f2
format: 1

最终创建/注册新镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ glance image-create --size 2147483648 --name ubuntu-rbd --store rbd --disk-format raw --container-format ovf --location rbd://ubuntu-raw
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | None                                 |
| container_format | ovf                                  |
| created_at       | 2013-05-06T15:29:26                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | raw                                  |
| id               | 0d47c421-b079-44ff-bcc5-ee711d500512 |
| is_public        | False                                |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | ubuntu-rbd-hack                      |
| owner            | 19292b3b597b4ecc9a41103cc312a42f     |
| protected        | False                                |
| size             | 2147483648                           |
| status           | active                               |
| updated_at       | 2013-05-06T15:29:26                  |
+------------------+--------------------------------------+

R 注意来自 --location 选项的 URI,有两种方法来构建它,它可以是

  • rbd://<fsid>/<pool>/<image>/<snapshot>
  • rbd://<image-name>;Glance 将会弄清楚池,因为您已将其放入 Glance 配置中。

要么是 1 个字段,要么是 4 个字段。

当然,示例只是一个镜像,但该方法肯定适用于包含大量镜像的整个 Ceph 集群!