Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10170633
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 云计算

2014-06-27 12:14:21

计算环境使用文件克隆快速部署虚拟机实例

近年来云计算和云存储发展趋势,决定了云计算数据中心需要管理巨量的存储空间和虚拟机实例,其对存储效率和部署实例效率有着越来越高的要求。本文将介绍使用 SONAS 文件克隆功能,实现在云计算节点 KVM 平台上快速部署批量虚拟机实例。

祝 珍泉, 软件工程师, IBM

2013 年 12 月 30 日

云计算环境使用文件克隆快速部署虚拟机实例

CloudStack 是一个开源的具有高可用性及扩展性的云计算平台,支持管理大部分主流的虚拟机管理器,比如 KVM 和 XEN。在 CloudStack 中存在两种存储:主存储为虚拟机实例提供磁盘卷,二级存储提供虚拟机实例的模板,用于安装系统的镜像文件及虚拟机实例的磁盘快照。这两种存储都支持网络连接存储(NAS)。

图 0. CloudStack 架构 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.xml

  default
  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 网卡选用 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 共享 创建 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
}
清单 5. telnet_expect 调用 wmic 和 netsh
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 实例的终端主机名 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 实例的终端主机名 Windows 实例的终端主机名

也可以通过远程桌面连接登录虚拟机 WVM1 来确认主机名。

图 7. Windows 实例的远程桌面连接 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 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
阅读(2496) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~