OpenStack:我可以将卷转换为图像吗?

OpenStack:我可以将卷转换为图像吗?

我正在尝试找出 OpenStack 中阻力最小的路径,以便从实时 CD 到可用于部署新客户实例的磁盘映像。

如果您从实时 CD 启动 OpenStack 实例,则可以将操作系统安装到“临时”磁盘上(在本例中为/dev/vda)...

...这很好,但是没有办法从该磁盘创建映像;该image-create命令将尝试(并失败)对实时 CD 本身进行快照(因为这是启动卷)。

您可以创建并附加一个新卷(使用volume-createvolume-attach),然后在其上安装操作系统,但似乎没有任何方法可以将此卷转换为 Glance 托管映像以供其他实例使用。

作为管理员,我显然可以登录到存储主机并直接从卷块设备创建新的 Glance 映像,但这不是任何通过 API 或 Web GUI 进行交互的人都可以使用的途径。

还有其他选择吗?

答案1

在 Icehouse 及更高版本中,您可以使用 upload-to-image 命令将 Cinder 卷转换为 Glance 映像:

cinder upload-to-image <volume> <image-name>

答案2

我已在本地 Linux 机器上使用本地磁盘映像文件(raw 或 qcow2)成功使用 KVM 为 openstack 构建了映像,将映像文件转换为压缩的 qcow2,然后使用 gaze 上传了该映像。

一些技巧:

  1. 您将需要 cloud-init 或 /etc/rc.local 脚本或类似脚本来获取实例元数据(ssh 密钥、IP 地址、主机名、用户数据等)http://169.254.169.254/并使用它来配置 VM。

    cloud-init 在 ubuntu 上运行最佳,但已移植到 Debian,我甚至看到了 RH 的移植。

  2. 在制作要上传的压缩 qcow2 之前,清理映像(删除日志和 shell 历史记录、禁用密码、删除 /etc/udev/rules.d/70-persistent-net.rules 等)并将磁盘映像填零是个好主意。您可以很容易地将具有 10GB 磁盘的 VM 映像缩小到 300-500MB,这样上传速度更快,在 openstack 启动实例时复制速度也更快。

对磁盘进行零填充的最简单方法是“dd if=/dev/zero of=/root/junk ; rm -f /root/junk”。或者,您可以关闭虚拟机,将其回送挂载(如果映像已经是 qcow2,则可以使用 qemu-nbd),然后对其进行零填充。如果文件系统是 ext2/3/4,您可以使用名为零自由对其进行零填充(必须卸载或安装 RO)。如果是其他文件系统,您可以使用 sfill安全删除(secure-delete 的主页已经消失)。

顺便说一句,即使您的“源”图像已经是压缩的 qcow2,在上传之前仍值得将其“转换”为新的压缩 qcow2。这样可以删除文件在写入时复制时留下的旧数据。

答案3

将 cinder 卷转换为 Glance 映像的简单方法是使用 qemu-img 将 LVM 分区转换为 qcow2 格式。

例子:

sudo qemu-img convert -c -f raw -O qcow2 /dev/stack-volumes/volume-6e4eb1d5-71fa-45a1-9178-ac6611351404 test.img

下一步将图像添加到 Glance:

glance image-create --name test_converted --disk-format qcow2 --container-format bare < test.img

答案4

这是一个老问题,但您要做的就是使用 kvm 使用 cdrom iso 文件和空卷制作原始磁盘映像。然后,您可以将原始磁盘上传到 Glance 并使用它来引导其他磁盘。

例如,这就是创建基础 Debian、Ubuntu 或其他 Linux 主机的方式。

相关内容