我试图找出 OpenStack 中阻力最小的路径,以从实时 CD 获取可用于部署新来宾实例的磁盘映像。
如果您从实时 CD 启动 OpenStack 实例,您可以将操作系统安装到“临时”磁盘(在这种情况下,它将是/dev/vda
)...
...很好,但是无法从该磁盘创建映像;该image-create
命令将尝试(并失败)对 Live CD 本身进行快照(因为这是启动卷)。
您可以创建并附加一个新卷(使用volume-create
和volume-attach
),然后在其上安装操作系统,但似乎没有任何方法可以将该卷转换为 Glance 托管的映像以供其他实例使用。
作为管理员,我显然可以登录到存储主机并直接从卷块设备创建一个新的 glance 图像,但这不是任何通过 API 或 Web GUI 进行交互的人都可以使用的途径。
还有其他选择吗?
在 Icehouse 及更高版本中,您可以使用 upload-to-image 命令将 Cinder 卷转换为 Glance 图像:
我已经使用本地磁盘映像文件(raw 或 qcow2)在我的本地 linux 机器上使用 KVM 成功地为 openstack 构建了映像,将映像文件转换为压缩的 qcow2,并一目了然地上传了。
一些技巧:
您将需要 cloud-init 或 /etc/rc.local 脚本或类似脚本来从中获取实例元数据(ssh 密钥、IP 地址、主机名、用户数据等)
http://169.254.169.254/
并使用它配置 VM。cloud-init 在 ubuntu 上效果最好,但已移植到 Debian,我什至看到了 RH 的移植。
清理映像(擦除日志和 shell 历史记录、禁用密码、删除 /etc/udev/rules.d/70-persistent-net.rules 等)并在制作压缩 qcow2 上传之前对磁盘映像进行零填充是个好主意。您可以很容易地将具有 10GB 磁盘的 VM 映像缩小到 300-500MB,这在 openstack 启动实例时上传和复制速度更快。
对磁盘进行零填充的最简单方法是类似 'dd if=/dev/zero of=/root/junk ; rm -f /root/垃圾'。或者,您可以关闭 VM,环回挂载它(如果映像已经是 qcow2,您可以使用 qemu-nbd),然后对其进行 zerofill。如果文件系统是 ext2/3/4,您可以使用一个名为zerofree的工具对其进行 zerofill(必须卸载或安装 RO)。如果是其他文件系统,您可以使用secure-delete中的sfill (secure-delete 的主页已消失)。
顺便说一句,即使您的“源”图像已经是压缩的 qcow2,在上传之前将其“转换”为新的压缩 qcow2 仍然是值得的。这消除了写时复制文件时留下的旧数据。
将 cinder 卷转换为 glance 映像的简单方法 使用 qemu-img 将 LVM 分区转换为 qcow2 格式。
例子:
下一步将图像添加到 glance 中:
这是一个老问题,但您要做的是使用 kvm 使用 cdrom iso 文件和一个空卷制作原始磁盘映像。然后,您可以上传原始磁盘以查看并使用它来引导其他人。
例如,这就是您制作基础 Debian、Ubuntu 或其他 Linux 主机的方式。