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

我正在试图找出OpenStack中阻力最小的path,从Live CD到可用于部署新来宾实例的磁盘映像。

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

…这很好,但是没有办法从这个磁盘上创build一个映像。 image-create命令将尝试(并失败)对live CD本身进行快照(因为这是启动卷)。

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

作为pipe理员,我明显可以login到存储主机,并直接从卷块设备创build新的扫视图像,但这不是任何人通过API或Web GUI进行交互的途径。

还有其他的select吗?

在Icehouse中,稍后可以使用upload-to-image命令将Cinder卷转换为Glance图像:

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

我已经使用本地磁盘映像文件(raw或qcow2)在本地linux计算机上成功构build了使用KVM的OpenStack映像,将映像文件转换为压缩的qcow2,然后一目了然地上传。

一些技巧:

  1. 您需要使用cloud-init或/etc/rc.local脚本或类似命令从http://169.254.169.254/获取实例元数据(ssh密钥,IP地址,主机名,用户数据等),并configuration虚拟机它。

    cloud-init在ubuntu上效果最好,但是已经被移植到了Debian上,我甚至看到了RH的一个端口。

  2. 清理图像(擦除日志和shell历史logging,禁用密码,删除/etc/udev/rules.d/70-persistent-net.rules等),并在将压缩的qcow2上传之前填满磁盘映像是个好主意。 您可以非常容易地将10GB磁盘的虚拟机映像缩小到300-500MB,这样在OpenStack启动实例时,上传速度更快,复制速度更快。

最简单的填充磁盘的方法就像是'dd if = / dev / zero of = / root / junk' rm -f / root / junk“。 或者,您可以closures虚拟机,使用环回挂载它(如果映像已经是qcow2,则可以使用qemu-nbd),然后填充它。 如果文件系统是ext2 / 3/4,你可以使用一个名为zerofree的工具来填充它(必须被卸载或挂载RO)。 如果是其他的FS,你可以使用sfill从安全删除 (安全删除的主页已经消失)。

顺便说一句,即使你的'source'图像已经被压缩了qcow2,在上传之前仍然值得把它'转换'成一个新的压缩的qcow2。 当文件被复制时,这将摆脱留下的旧数据。

简单的方法来转换煤渣体积扫视图像转换LVM分区与qemu-img qcow2格式。

例:

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

下一步添加图片一目了然:

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

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

例如,这就是你如何制作一个基本的Debian,Ubuntu或其他Linux主机。