上次 VPSee 给 OpenStack Nova 制作 Ubuntu 镜像的时候忘了介绍制作 Windows 镜像和在 Nova 上运行 Windows 虚拟机的情况,前几天刚好有人在微薄上问到这个问题。在 Nova 上运行 Windows 的虚拟机其实很容易,和运行 Linux 虚拟机差不多:先制作一个 Windows 虚拟机镜像(模板),然后再以这个镜像为模板来创建 Windows 虚拟机(实例)。
创建一个 10GB 大小的 “硬盘”(raw 格式):
$ kvm-img create -f raw windowsxp.img 10G Formatting 'windowsxp.img', fmt=raw size=10737418240
openstack 启动虚拟机实例的时候使用的是 virtio 接口,但是 windows 默认没有这个接口的驱动,所以需要额外的驱动。然后使用 ISO 文件的 windowsxp.iso 安装盘来安装 Windows:
$ wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/ virtio-win-1.1.16.vfd $ sudo kvm -m 1024 -cdrom windowsxp.iso -drive file=windowsxp.img,if=virtio,boot=on \ -fda virtio-win-1.1.16.vfd -boot d -nographic -vnc :0
在另外一台机器上使用 vnc 客户端就可以看到 windows 安装过程和进行操作:
$ vncview 172.16.39.111:5900
安装完 windows 后可以进行一些必要的定制,比如打开 RDP 访问、设置防火墙不要屏蔽 RDP 等,这时候也可以安装一些必要软件,要注意的是这个是以后的模板,要尽量保持系统原样,最好不要做定制也不要装任何软件,可以留给客户自己做,定制这东西每个人口味都不同。
windows 虚拟机镜像做好以后就可以发布到云里了,注册镜像后会得到一个标志符 ami-00000004,以后就用这个 ami-00000004 来识别云里面的镜像(还记得我们上次做的 ubuntu 镜像的标志符是 ami-00000003 吗?):
$ euca-bundle-image -i windowsxp.img Checking image Encrypting image Splitting image... Part: windowsxp.img.part.00 Part: windowsxp.img.part.01 ... Part: windowsxp.img.part.65 Generating manifest /tmp/windowsxp.img.manifest.xml $ euca-upload-bundle -b mybucket -m /tmp/windowsxp.img.manifest.xml Checking bucket: mybucket Uploading manifest file Uploading part: windowsxp.img.part.00 ... Uploading part: windowsxp.img.part.65 Uploaded image as mybucket/windowsxp.img.manifest.xml $ euca-register mybucket/windowsxp.img.manifest.xml IMAGE ami-00000004
检验一下 windows 镜像是否上传成功,ami-00000004 就是我们刚做的 windows 镜像:
$ euca-describe-images IMAGE aki-00000001 mybucket/vmlinuz-2.6.32-28-server.manifest.xml available public x86_64 kernel IMAGE ari-00000002 mybucket/initrd.img-2.6.32-28-server.manifest.xml available public x86_64 ramdisk IMAGE ami-00000003 mybucket/ubuntutemplate.img.manifest.xml available public x86_64 machine aki-00000001 ari-00000002 IMAGE ami-00000004 mybucket/windowsxp.img.manifest.xml untarring public x86_64 machine
有了这个 windows 模板(镜像)以后我们就可以以这个 “镜像” 为模板来为云计算用户创建 n 个 windows 虚拟机,运行之前需要 key:
$ euca-describe-keypairs KEYPAIR mykey 76:7d:93:88:a0:e5:3e:5d:4b:62:cd:85:c5:23:7a:05 $ euca-run-instances -k mykey -t m1.small ami-00000004 RESERVATION r-er0zkjm7 mycloud default INSTANCE i-00000003 ami-00000004 scheduling mykey (mycloud, None) 0 m1.small 2011-06-20T14:08:45Z unknown zone
然后用 nova-manage 命令检查是否成功运行 windows 虚拟机,状态栏 state 应该是 running 状态:
$ sudo nova-manage vm list instance node type state launched image kernel ramdisk project user zone index i-00000003 node01running 2011-06-20 14:12:49 7 mycloud vpsee None 0
大功告成,用一个 RDP 客户端连接 windows 就可以了(这个 windows 云虚拟机使用的是内部 IP):
# rdesktop 192.168.3.4