云计算环境使用文件克隆快速部署虚拟机实例
CloudStack 是一个开源的具有高可用性及扩展性的云计算平台,支持管理大部分主流的虚拟机管理器,比如 KVM 和 XEN。在 CloudStack 中存在两种存储:主存储为虚拟机实例提供磁盘卷,二级存储提供虚拟机实例的模板,用于安装系统的镜像文件及虚拟机实例的磁盘快照。这两种存储都支持网络连接存储(NAS)。
图 0. CloudStack 架构本文我们将以一台 Linux 主机为例,其上运行 KVM 作为计算节点。同时 SONAS 创建网络共享文件系统(NFS)来为此计算节点存储虚拟机系统的镜像模板以及批量虚拟机实例的虚拟磁盘,以此来实现提高存储效率和部署虚拟机实例效率。文中所涉及的虚拟机实例有 Red Hat Enterprise Linux 5.5 和 Windows Server 2008 R2 Standard 两种类型。
IBM GPFS 文件克隆功能介绍
GPFS(General Parallel File System ) ,即通用并行文件系统。它是一种高性能、磁盘共享的集群并行文件系统,其集群内所有节点可以并行访问整个文件系统。
文件克隆(File Clone)有点类似文件拷贝,不同的是文件克隆速度要远远快于文件拷贝,并且其存储空间的利用率更高。克隆文件本身类似于一个可写的文件快照,其只有发生变化的数据才会真正开始占用磁盘空间。因此我们可以通过克隆虚拟机的系统通用模板,配置克隆文件为虚拟机实例的虚拟磁盘,来用于提高虚拟机实例的存储效率。这样在云计算环境下,部署批量虚拟机时就可以节约巨量的存储空间。
查看 GPFS 文件系统上某个已有文件:
[root@99m4912.mgmt001st001 Linux]# ls -al Basic.img -rwx------ 1 root root 10737418240 Jul 28 03:53 Basic.img [root@99m4912.mgmt001st001 Linux]# du -lh Basic.img 10G Basic.img
使用命令创建 Basic.img 的文件克隆:
[root@99m4912.mgmt001st001 Linux]# mkclone -s /ibm/frank/image/Linux/Basic.img \ -t /ibm/frank/image/Linux/BasicClone1 EFSSG1046I The clone file has been successfully created. EFSSG1000I The command completed successfully.
现在来查看其克隆文件的大小:
[root@99m4912.mgmt001st001 Linux]# ls -al Basic* -rwx------ 1 root root 10737418240 Jul 28 04:05 BasicClone1 -rwx------ 2 root root 10737418240 Jul 28 03:53 Basic.img [root@99m4912.mgmt001st001 Linux]# du -sh Basic* 0 BasicClone1 10G Basic.img
我们注意到,对一个 10G 的文件创建文件克隆后,其初始占用空间为零。
接下来,我们会使用基于 GPFS 的 SONAS 存储系统为计算节点 KVM 平台提供存储空间,同时使用 SONAS 文件克隆的特性来快速拷贝虚拟机实例的磁盘镜像文件。
计算节点 KVM 平台创建 Linux 虚拟机实例的通用模板
现有一台 IBM System x3650 M3 物理主机,主机名为 PXE,其具体安装的操作系统版本信息如下:
[root@PXE ~]# lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:\ graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: RedHatEnterpriseServer Description: Red Hat Enterprise Linux Server release 6.1 (Santiago) Release: 6.1 Codename: Santiago
其系统安装的 KVM 版本:
[root@PXE ~]# rpm -qa|grep qemu-kvm qemu-kvm-tools-0.12.1.2-2.160.el6.x86_64 qemu-kvm-0.12.1.2-2.160.el6.x86_64
默认的桥接网络 virbr0 地址为 192.168.122.1 网段。
[root@PXE ~]# ifconfig virbr0 virbr0 Link encap:Ethernet HWaddr 52:54:00:E4:CF:57 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:165356 errors:0 dropped:0 overruns:0 frame:0 TX packets:247789 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:11321728 (10.7 MiB) TX bytes:318116258 (303.3 MiB)
编辑对应的默认网络配置文件,修改其地址为计算节点适用的网络地址。
比如本例中修改为 10.0.0.1 网段,以及指定 DHCP 分配的网络地址段范围,更新的内容如下。
[root@PXE ~]# vi /etc/libvirt/qemu/networks/default.xmldefault 32169099-1501-4d0c-a9e3-8dfa290c0f6b
重启主机后查看网络,确认桥接网络 virbr0 使用新配置的网络地址。
[root@PXE ~]# ifconfig virbr0 virbr0 Link encap:Ethernet HWaddr 52:54:00:E4:CF:57 inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:165356 errors:0 dropped:0 overruns:0 frame:0 TX packets:247789 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:11321728 (10.7 MiB) TX bytes:318116258 (303.3 MiB)
通过 VNC viewer 登录 PXE 主机,运行虚拟机管理工具 virt-manager 创建一个 RHEL5.5 虚拟机,虚拟机网卡选用桥接网络 virbr0。
图 1. 网卡选用 virbr0系统安装过程中注意配置其网络为 DHCP 获取,其它则默认即可。系统安装完成后,关闭虚拟机。之后已经成功安装的虚拟机其对应的虚拟磁盘文件即可作为我们用于部署虚拟机实例的通用模板。
创建 Windows Server 2008 R2 虚拟机实例的通用模板过程也与之类似,不过需要注意的是在系统安装完成后须启用 Telnet Server 服务且设置为自动启动。
[root@PXE ~]# ls /var/lib/libvirt/images/RHEL5.5x64Basic.img /var/lib/libvirt/images/RHEL5.5x64Basic.img [root@PXE ~]# du -lh /var/lib/libvirt/images/RHEL5.5x64Basic.img 11G /var/lib/libvirt/images/RHEL5.5x64Basic.img
云存储 SONAS 创建文件系统并共享给 KVM 计算节点
IBM SONAS 全称 Scale Out Network Attached Storage,即横向扩展的 NAS 存储。它拓展容量和性能的同时还提供了对数据以及一个全局命名空间的并行访问。因为它基于 GPFS,所以 SONAS 支持文件克隆;另外 IBM Storwize V7000 Unified 也支持文件克隆。
登录 SONAS 的 GUI(Graphical User Interface,即图形用户界面),创建一个文件系统。
图 2. 创建文件系统创建文件系统的共享,其协议类型为 NFS,并且给予客户端即 KVM 计算节点足够的写权限。
图 3. 创建 NFS 共享登录计算节点 KVM 挂载 SONAS 的共享文件系统。
[root@PXE ~]# mount 9.123.196.235:/ibm/frank/image /datastore [root@PXE ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda4 264G 112G 138G 45% / tmpfs 3.9G 684K 3.9G 1% /dev/shm /dev/sda2 248M 35M 201M 15% /boot /dev/sda1 256M 256K 256M 1% /boot/efi 9.123.196.235:/ibm/frank/image 1.0T 48G 977G 5% /datastore
挂载的/datastore 目录我们将用来存放虚拟机实例的模板以及对其进行文件克隆后的虚拟磁盘。
导入通用模板的克隆文件创建虚拟机实例
将之前创建的 RHEL5.5 实例模板拷贝到我们挂载的目录。
[root@PXE ~]# cp /var/lib/libvirt/images/RHEL5.5x64Basic.img /datastore/Linux
登录 SONAS 的 CLI(Command Line Interface,即命令行接口)创建一个实例模板的文件克隆。
通过 VNC viewer 登录 PXE 主机,运行虚拟机管理工具 virt-manager 导入实例模板的克隆文件即虚拟磁盘文件来创建新的虚拟机。
图 4. 导入克隆的虚拟磁盘通过命令行确认新的虚拟机实例已启动运行。
[root@PXE ~]# virsh list Id Name State ---------------------------------- 268 RHEL5.5_Clone1 running
我们查看其对应的虚拟磁盘文件空间在实例系统启动后仅仅增长到 29M。
[root@PXE ~]# du -lsh /datastore/Linux/* 29M /datastore/Linux/Clone1.img 10G /datastore/Linux/RHEL5.5x64Basic.img
另外,我们也可以通过命令行的方式来导入实例模板的克隆文件并创建新的虚拟机实例。
[root@PXE ~]# /usr/sbin/virt-install --name RHEL5.5_Clone1 --hvm --ram 256 --vcpus 1 \ --disk /datastore/Linux/Clone1.img.img --network bridge=virbr0,m odel=virtio,mac=08:75:3B:D5:2A:1F --os-variant=rhel6 --import --graphics vnc
virt-install 是用来创建 KVM 或者 XEN 虚拟机实例的命令行工具,其常用的参数如下。
# virt-install --hvm 指定虚拟机实例使用全虚拟化 --name 指定新创建虚拟机实例的名字 --ram 指定分配给虚拟机实例的内存大小 --vcpus 指定分配给虚拟机实例的虚拟 CPU 数量 --disk 指定分配给虚拟机实例的存储介质 --network 指定虚拟机实例连接到主机的网络,可指定其网络类型及固定的 MAC 地址 --os-variant 指定要创建的虚拟机实例的操作系统类型 --graphics 指定虚拟机实例终端图形显示的类型 --import 通过导入已存在的磁盘镜像来启动虚拟机实例
构建管理脚本实现快速部署批量虚拟机实例
前面我们知道可以通过命令行的方式来导入创建虚拟机实例,自然也可以实现通过 Bash Shell 脚本来批量部署虚拟机实例。
整个流程为,首先初始化路径和环境变量,获取用户的输入,然后依据用户的输入来初始化网络配置相关的变量,克隆实例模板并创建指定数量的虚拟机实例,从日志中获取所有虚拟机实例的 MAC 地址和分配到的动态 IP 地址,之后通过动态 IP 地址登录所有虚拟机实例修改为其对应的主机名和静态 IP 地址,并重启实例使配置生效,最终输出显示所有部署虚拟机实例的主机名、MAC 地址及 IP 地址对应列表。
现在我们来看脚本代码的主要函数,关于脚本更多内容请查看提供下载的示例源码。
清单 1. 创建 Linux 实例createLinux() { for ((m=1;m<=$number;m++)) do /bin/ifs_expect $password root@$SONAS /opt/IBM/sofs/cli/mkclone -s $Linux/RHEL5.5x64Basic.img -t $Linux/$prefix$m.img mac=`printf '08:%02X:%02X:%02X:%02X:%02X\n' $[RANDOM%256] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256]`/usr/sbin/virt-install --name $prefix$m --hvm --ram 256 --vcpus 1 --disk /datastore/Linux/$prefix$m.img --network bridge=virbr0,model=virtio,mac=$mac --os-variant=rhel6 --import --graphics vnc echo $mac|tr '[A-Z]' '[a-z]' >> $config/MACList done }
对实例模板进行文件克隆后,对其网卡指定随机生成的 MAC 地址并且导入虚拟磁盘后运行虚拟机实例。创建 Windows 类型实例的过程也与之类似。
清单 2. 获取实例的 MAC 和动态 IP 地址列表gatherDHCP() { echo " " echo "Now instances are requesting DHCP IP address ......" echo " " while [ -s $config/MACList ] do /bin/cat $config/MACList|while read LINE do /bin/cat $dnsmasq|grep DHCPOFFER|grep $LINE if [ $? = 0 ] then /bin/cat $dnsmasq|grep DHCPOFFER|grep $LINE|awk '{print $8,$7}' >> $config/MACIPLists /bin/sed -i "/$LINE/d" $config/MACList fi done done echo " " echo "Here is DHCP IP address list for all instances:" /bin/cat $config/MACIPLists|uniq|sort|awk '{print $2}' /bin/cat $config/MACIPLists|uniq > $config/MACIPList }
从 DNSmasq 日志中实时获取分配给虚拟机实例的动态 IP 地址及其对应的 MAC 地址。
清单 3. 修改 Linux 实例主机名和静态 IP 地址changeLinuxInstance() { echo "==========================================================" > $config/InstanceList echo "Hostname MAC Address IP Address" >> $config/InstanceList echo "----------------------------------------------------------" >> $config/InstanceList for ((n=1;n<=$number;n++)) do /bin/cp $config/network $config/network$n /bin/cp $config/ifcfg-eth0 $config/ifcfg$n /bin/sed -i "s/HOSTNAME=/HOSTNAME=$prefix$n/g" $config/network$n /bin/sed -i "s/GATEWAY=/GATEWAY=$gateway/g" $config/network$n /bin/sed -i "s/BROADCAST=/BROADCAST=$broadcast/g" $config/ifcfg$n /bin/sed -i "s/NETMASK=/NETMASK=$netmask/g" $config/ifcfg$n /bin/sed -i "s/NETWORK=/NETWORK=$network/g" $config/ifcfg$n increase=`expr $last + $n` staticIP=`echo $baseaddr.$increase` mac=`/bin/cat $config/MACIPList|awk -v line=$n 'NR==line {print $1}'` dhcpIP=`/bin/cat $config/MACIPList|awk -v line=$n 'NR==line {print $2}'` /bin/sed -i "s/HWADDR=/HWADDR=$mac/g" /root/config/ifcfg$n /bin/sed -i "s/IPADDR=/IPADDR=$staticIP/g" /root/config/ifcfg$n # Check if the instance's online while [ 0 ] do /bin/ping -c 1 $dhcpIP if [ $? -eq 0 ] then break fi done /bin/scp_expect PASSWORD root@$dhcpIP $config/network$n /etc/sysconfig/network /bin/scp_expect PASSWORD root@$dhcpIP $config/ifcfg$n /etc/sysconfig/network-scripts/ifcfg-eth0 /bin/ssh_expect PASSWORD root@$dhcpIP /sbin/reboot /bin/rm /root/config/ifcfg$n /root/config/network$n echo "$prefix$n $mac $staticIP" >> $config/InstanceList done }
依据 MAC 地址和指定静态 IP 地址更新本地目录临时 ifcfg-eth0 和 network 配置文件,然后通过对应的动态 IP 地址把它们 scp 上传到虚拟机系统,然后再重启虚拟机实例使得其主机名和静态 IP 地址生效。
清单 4. 修改 Windows 实例主机名和静态 IP 地址changeWindowsInstance() { echo "==========================================================" > $config/InstanceList echo "Hostname MAC Address IP Address" >> $config/InstanceList echo "----------------------------------------------------------" >> $config/InstanceList for ((n=1;n<=$number;n++)) do increase=`expr $last + $n` staticIP=`echo $baseaddr.$increase` mac=`/bin/cat $config/MACIPList|awk -v line=$n 'NR==line {print $1}'` dhcpIP=`/bin/cat $config/MACIPList|awk -v line=$n 'NR==line {print $2}'` # Check if the instance's online while [ 0 ] do /bin/ping -c 1 $dhcpIP if [ $? -eq 0 ] then break fi done # Modify hostname and setp static IP address then reboot /bin/telnet_expect $prefix$n $dhcpIP $staticIP $netmask $gateway echo "$prefix$n $mac $staticIP" >> $config/InstanceList done }
spawn telnet $origIP expect "login:" send "Administrator\r" expect "password:" send "PASSWORD\r" expect "Administrator>" send "wmic computersystem where name=\"%ComputerName%\" call rename name=\"$hostname\"\r" expect "Administrator>" send "netsh interface ip set address name=\"Local Area Connection\" source=static \ addr=$newIP mask=$mask gateway=$gateway\r" expect "Administrator>" send "\r"
依据 MAC 地址对应的动态 IP 地址 Telnet 登录虚拟机实例修改主机名,然后再修改网络地址为指定的静态 IP 地址后重启虚拟机实例使得其更改生效。
现在来批量部署 30 个 Linux 虚拟机实例,限于篇幅我们只保留程序主要的输出内容。
[root@PXE ~]# date;DeployInstance;date Wed Jul 28 11:00:29 CST 2013 Please select which type of instance you want to deploy? 1) Linux 2) Windows #? 1 Please set the prefix hostname for instances: VMI Please set the number of instances you want to deploy, eg. 30 : 20 Please set the start IP address for instances, eg. 10.0.0.10 : 10.0.0.10 Please set the netmask for instances, eg. 255.255.255.0 : 255.255.255.0 Please set the gateway for instances, eg. 10.0.0.1 : 10.0.0.1 Now instances are requesting DHCP IP address ...... Jul 28 11:01:39 pxe dnsmasq-dhcp[3067]: DHCPOFFER(virbr0) 10.0.0.168 08:a4:e9:0d:26:50 … Jul 28 11:03:48 pxe dnsmasq-dhcp[3067]: DHCPOFFER(virbr0) 10.0.0.136 08:8e:07:d6:da:17 … Jul 28 11:05:17 pxe dnsmasq-dhcp[3067]: DHCPOFFER(virbr0) 10.0.0.166 08:b6:12:44:a3:da Here are the all deployed instances: ========================================================== Hostname MAC Address IP Address ---------------------------------------------------------- VMI1 08:a4:e9:0d:26:50 10.0.0.11 … VMI18 08:8e:07:d6:da:17 10.0.0.28 … VMI30 08:b6:12:44:a3:da 10.0.0.40 ---------------------------------------------------------- Wed Jul 28 11:06:57 CST 2013
执行的结果为,部署 30 个 Linux 虚拟机实例的所消耗的时间不到 7 分钟。
通过命令行查看部署的虚拟机实例运行状态。
[root@PXE ~]# virsh list Id Name State ---------------------------------- 290 VMI1 running … 319 VMI30 running
打开虚拟机实例终端确认对应的主机名修改成功。
图 5. Linux 实例的终端主机名SSH 登录虚拟机实例,确认其 IP 地址和 MAC 地址对应一致。
[root@PXE ~]# ssh root@10.0.0.28 root@10.0.0.28's password: Last login: Sat Jul 28 11:12:29 2013 from 10.0.0.1 [root@VMI18 ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:8E:07:D6:DA:17 inet addr:10.0.0.28 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::a8e:7ff:fed6:da17/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1511 errors:0 dropped:0 overruns:0 frame:0 TX packets:79 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:199632 (194.9 KiB) TX bytes:11288 (11.0 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)
查看虚拟机实例 VMI18 对应的虚拟机磁盘文件大小为 38M。
[root@PXE ~]# du -lh /datastore/Linux/VMI18.img 38M /datastore/Linux/VMI18.img
登录其所在的虚拟机实例系统,写入 100M 的文件。
[root@PXE ~]# ssh root@10.0.0.28 [root@VMI18 ~]# dd if=/dev/zero of=file1 bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.963542 seconds, 109 MB/s
再次查看其虚拟机磁盘文件大小为 138M,由此可证实克隆文件其只有发生变化的数据才会开始占用磁盘空间。
[root@PXE ~]# du -lh /datastore/Linux/VMI18.img 138M /datastore/Linux/VMI18.img
现在我们来批量部署 5 个 Windows 虚拟机实例。
[root@PXE ~]# DeployInstance Please select which type of instance you want to deploy? 1) Linux 2) Windows #? 2 Please set the prefix hostname for instances: WVM Please set the number of instances you want to deploy, eg. 20 : 5 Please set the start IP address for instances, eg. 10.0.0.10 : 10.0.0.50 Please set the netmask for instances, eg. 255.255.255.0 : 255.255.255.0 Please set the gateway for instances, eg. 10.0.0.1 : 10.0.0.1 Here are the all deployed instances: ========================================================== Hostname MAC Address IP Address ---------------------------------------------------------- WVM1 08:e1:0c:11:65:49 10.0.0.51 WVM2 08:8e:a0:79:2b:e7 10.0.0.52 WVM3 08:72:4c:9f:3f:f9 10.0.0.53 WVM4 08:cb:22:95:68:22 10.0.0.54 WVM5 08:53:c2:9b:85:2c 10.0.0.55 ----------------------------------------------------------
Telnet 登录到主机名为 WVM1 的虚拟机实例,确定其 MAC 地址与 IP 地址一致。
[root@PXE ~]# telnet 10.0.0.51 Trying 10.0.0.51... Connected to 10.0.0.51 (10.0.0.51). Escape character is '^]'. Welcome to Microsoft Telnet Service login: administrator password: *=============================================================== Microsoft Telnet Server. *=============================================================== C:\Users\Administrator>ipconfig /all Windows IP Configuration Host Name . . . . . . . . . . . . : WVM1 Primary Dns Suffix . . . . . . . : Node Type . . . . . . . . . . . . : Hybrid IP Routing Enabled. . . . . . . . : No WINS Proxy Enabled. . . . . . . . : No Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Realtek RTL8139C+ Fast Ethernet NIC Physical Address. . . . . . . . . : 08-E1-0C-11-65-49 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes IPv4 Address. . . . . . . . . . . : 10.0.0.51(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 10.0.0.1 NetBIOS over Tcpip. . . . . . . . : Enabled Tunnel adapter isatap.{6B9D002E-3ED8-4972-B3E9-36C3A1DABBEF}: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Microsoft ISATAP Adapter Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Tunnel adapter Local Area Connection* 11: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes
通过 VNC viewer 登录 PXE 主机,运行虚拟机管理工具 virt-manager 并打开虚拟机 WVM1 的终端,确认其系统主机名为 WVM1。
图 6. Windows 实例的终端主机名也可以通过远程桌面连接登录虚拟机 WVM1 来确认主机名。
图 7. Windows 实例的远程桌面连接分析文件克隆的存储效率和部署效率
从前面的运行结果看我们知道部署 30 个 Linux 虚拟机实例耗费时间不到 7 分钟,其所有实例的虚拟磁盘在系统启动后总占用的初始空间为 12G。
[root@PXE ~]# du -lh /datastore/Linux/* 10G /datastore/Linux/RHEL5.5x64Basic.img 38M /datastore/Linux/VMI1.img ... 35M /datastore/Linux/VMI30.img [root@PXE ~]# du -lh /datastore/Linux/ 12G /datastore/Linux/
现在我们修改脚本以通过常规的复制虚拟磁盘的方式来部署 5 个 Linux 虚拟机实例,以下结果显示其耗费时间稍多于 8 分钟,其所有实例的虚拟磁盘占用初始空间为 55 G。
[root@PXE ~]# date;./CopyInstance;date Sun Jul 28 16:45:01 CST 2013 Please select which type of instance you want to deploy ? 1) Linux 2) Windows #? 1 Please set the prefix hostname for instances: Copy Please set the number of instances you want to deploy, eg. 20 : 5 Please set the start IP address for instances, eg. 10.0.0.10 : 10.0.0.20 Please set the netmask for instances, eg. 255.255.255.0 : 255.255.255.0 Please set the gateway for instances, eg. 10.0.0.1 : 10.0.0.1 Here are the all deployed instances: ========================================================== Hostname MAC Address IP Address ---------------------------------------------------------- Copy1 08:65:e7:04:b6:db 10.0.0.21 Copy2 08:4e:e3:42:8c:ec 10.0.0.22 Copy3 08:82:b6:0a:a2:30 10.0.0.23 Copy4 08:5d:bc:0e:2d:ea 10.0.0.24 Copy5 08:05:5a:a3:19:14 10.0.0.25 ---------------------------------------------------------- Sun Jul 28 16:53:10 CST 2013 [root@PXE ~]# du -lh /var/lib/libvirt/images/Copy* 11G /var/lib/libvirt/images/Copy1.img 11G /var/lib/libvirt/images/Copy2.img 11G /var/lib/libvirt/images/Copy3.img 11G /var/lib/libvirt/images/Copy4.img 11G /var/lib/libvirt/images/Copy5.img
综合对比前后两次执行结果,可以确认当我们使用文件克隆部署批量虚拟机实例其不管部署效率还是存储效率都得到了很大的提高。
总结
本文介绍了文件克隆功能及在云计算环境下批量部署虚拟机实例的流程和实现原理,证实了其提高部署效率和存储效率的可行性。另外,在非云计算环境下,也就是说文中的 KVM 不作为 CloudStack 的计算节点而是单独的虚拟化平台,此方案依然适用,也依然可以实现提高虚拟机的部署效率和存储效率。
参考资料
学习
- 参考 developerWorks,了解更多关于 GPFS 的功能。
- 参考 ,了解更多关于 KVM 的安装和配置。
- 参考 ,了解更多关于 SONAS 的功能。
- 参考 ,了解更多关于 CloudStack 的架构、部署和管理。
-
developerWorks 云计算站点 提供了有关云计算的更新资源,包括
- 云计算 简介。
- 更新的 技术文章和教程,以及网络广播,让您的开发变得轻松,专家研讨会和录制会议 帮助您成为高效的云开发人员。
- 连接转为云计算设计的 IBM 产品下载和信息。
- 关于 社区最新话题 的活动聚合。
讨论
- 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。