为虚拟映像的部署和激活实现自动化

服务器虚拟化的一个重要优势是通过使用虚拟映像模板库能够快速提供新的环境。自动预置功能需要处理操作系统、网络和应用程序特定的自定义内容。本文为实现虚拟映像部署和激活的自动化提供了一种示例框架,包括用于快速地、简便地预置新的 IBM® WebSphere® Application Server 环境的示例代码。 本文来自于 IBM WebSphere Developer Technical Journal

Le He (lehe@cn.ibm.com), 研发工程师, IBM

Le He 是 IBM 中国研究院分布式基础设施团队的一名研发工程师。Le 目前主要研究计算机网络和操作系统,同时他也研究将虚拟化合并到企业环境中的方法。



Shawn Smith, 杜克大学硕士, EMC

Shawn Smith 是杜克大学的二年级硕士生,正在攻读计算机工程硕士。Shawn 目前是 IBM WebSphere Technology Institute 的一名合作者,并且一直积极从事 XEN 和 Vmware 的虚拟化工作。



Ruth Willenborg, 高级技术人员, EMC

Author photoRuth Willenborg 是 IBM 的 WebSphere Technology Institute 中虚拟化方面的高级技术人员。在进行这项工作之前,Ruth 曾是 WebSphere Performance 团队的经理,负责 WebSphere Application Server 性能分析、性能基准检验和性能工具开发。Ruth 在 IBM 具有 20 多年的软件开发经验。她是 Performance Analysis for Java Web Sites(Addison-Wesley,2002 年)一书的合著者。


developerWorks 投稿作者

Qingbo Wang (wangqbo@cn.ibm.com), 研究人员, EMC

Qingbo Wang 是 IBM 中国研究院分布式基础设施团队的研究人员。他的技术兴趣一直在分布式系统和网络方面,他现在的工作是使用可视化技术进行自动系统管理。



2007 年 9 月 27 日

引言

虚拟化所提供的优势包括服务器整合、隔离、快速提供和优化的变更管理过程。因为虚拟化违反了硬件依赖关系,并将虚拟机与它们所处的物理服务器的细节隔离开来,所以可以将虚拟映像从一个承载平台转移到另一个承载平台。同时还可以根据需要对它们进行克隆,以创建更多的虚拟机。

克隆虚拟映像的挑战之一是,需要处理操作系统、网络和应用程序特定的自定义内容。本文为在新的主机平台上实现虚拟映像激活的自动化提供了一种示例框架。本文以及先前的文章使用虚拟映像模板部署 WebSphere Application Server,介绍了快速地、简便地提供新的 IBM WebSphere Application Server 环境的一种自动化方法。

本文中所提供的示例部署和激活代码,是独立于 WebSphere Application Server 的,并且可以与虚拟映像内部的其他软件一起使用。这里所提供的特定示例用于 VMware 或 XEN 虚拟映像中的 WebSphere Application Server V6,并使用 SUSE V10 作为客户操作系统。


自动化虚拟机部署

通过将自动化功能添加到模板映像中,并结合使用控制部署工作的外部自动化脚本,可以从“优秀的”模板实现新虚拟机的部署和激活的自动化。

可以将自动化虚拟机部署划分为三个阶段(图 1)。

图 1. 自动化虚拟机部署的步骤
图 1. 自动化虚拟机部署的步骤
  1. 第一个阶段是准备阶段,这个阶段包括在模板中安装一个程序,我们称其为激活引擎。这个激活引擎(本文提供了一个示例)知道在启动时如何运行激活脚本(如 ConfigWAS.pl)。该引擎在操作系统最初启动时对虚拟机进行配置。准备阶段还包括将激活脚本复制到模板,并使用所包含的激活工具在激活引擎中对它们进行注册。这项准备工作只进行一次,然后就可以锁定该模板了。

  2. 第二个步骤是部署,其中包括:

    • 将 VM 模板文件复制到目标管理程序。
    • 使用该实例的设置,如网络主机名、IP 地址等等,创建一个 XML 数据文件。
    • 创建包含这个 XML 数据文件的虚拟软盘(或者 v-floppy)。将这个 v-floppy 附加到虚拟机,并且在第一次启动时,激活引擎可以查看其中的内容。
  3. 最后一个步骤是自动激活,在这个步骤中启动虚拟机,激活脚本将自动地运行,并且使用来自 v-floppy 参数文件的信息。

这三个步骤极大地简化了从模板克隆虚拟机时通常所需要完成的自定义活动。在接下来的部分中描述了这三个步骤的详细内容,并且提供了示例部署脚本和激活引擎的下载


准备工作

激活引擎提供了相应的工具对激活脚本进行注册,以便在操作系统启动时加以执行。在启动期间,激活引擎从位于虚拟软盘中的激活概要 XML 文件中检索脚本命令行选项。如图 2 所示,将激活引擎复制到您正用以部署虚拟机克隆副本的虚拟机模板。

图 2. 安装激活引擎和脚本
图 2. 安装激活引擎和脚本

通过解压缩目录 /opt/IBM/AE 中包含的 AE.tar 文件,安装示例激活引擎。这个激活引擎是采用 PERL 编写的,并需要随 Linux® 操作系统一起提供的 PERL XML 相关的库文件。如果这些库还不属于您的模板映像中的一部分,那么您现在必须安装它们。

该激活引擎的主程序称为 AE.sh,它用于注册激活脚本。您需要为该模板中的、希望在第一次启动时进行自定义的所有软件组件提供激活脚本。例如,这个 WebSphere Application Server 示例中包含了下列激活脚本:

  • ConfigNET.pl(Linux 网络)设置 IP 地址和主机名。
  • ConfigPWD.sh 设置 Linux root 密码。
  • ConfigWAS.pl 创建 WebSphere 配置文件。

将这些激活脚本复制到模板映像,并将其放于目录 /opt/IBM/AE/AS 中。目前,激活引擎仅支持采用 PERL 和 Shell 编写的脚本,并分别使用后缀 .pl 和 .sh。对脚本进行相应的设计,以使其接受任何输入变量作为命令行参数。命令行格式是:

-parameter "value"

在激活阶段中,激活引擎从 XML 文件(激活配置文件)中读取参数,验证这些参数,并将它们传递到各个注册的脚本。

要在激活引擎中注册所有的激活脚本,首先需要创建一个激活逻辑文件。这个文件必须包含每个激活脚本的路径,以及在启动时它所执行的顺序规则。这些顺序规则都是以 /etc/init.d 中标准的 Linux 启动服务为基础的。例如,标准的 Linux 启动服务 sshd 需要启动网络,所以,sshd 对“network”服务存在依赖关系。类似地,该激活引擎为注册带有这种依赖关系的激活脚本提供了相应的工具。下面显示了在激活逻辑 (WAS.al) 文件中用于脚本 ConfigWAS.pl 的代码片段,并且它对“network”存在这种依赖关系。

<software-resource name="WAS_V_6_1">
	<configuration name="ConfigWAS">
		<script file="AS/ConfigWAS.pl" />
		<service name="activation.ConfigWAS">
		    <runlevel value="3" />
		    <runlevel value="5" />
		    <dependency service="network" />
		</service>
	</configuration>
</software-resource>

在创建这个激活逻辑文件时,将其放入目录 /opt/IBM/AE/AL 中,然后您就可以在引擎中注册激活脚本了。例如,执行下面这个命令,以便在包含的 WebSphere 模板(下载包中提供了用于该模板的激活逻辑文件 WAS.al)中注册所有的脚本:

%AE.sh –a AL/WAS.al

每个注册的激活脚本都在 Linux /etc/init.d 目录中创建了一个相应的启动服务文件。您可以使用 Linux 实用工具 chkconfig,以检查是否已经将激活脚本安装到了 Linux 中。例如,在注册了这三个启动服务(activation.ConfigWAS、activation.ConfigNET 和 activation.ConfigPWD)之后,您将看到这样的结果:

%chkconfig -list | grep activation
activation.ConfigWAS		0:off  1:off  2:off  3:on   4:off  5:on   6:off
activation.ConfigNET		0:off  1:off  2:off  3:on   4:off  5:on   6:off
activation.ConfigPWD		0:off  1:off  2:off  3:on   4:off  5:on   6:off

准备阶段中的最后一个步骤是为虚拟映像创建示例激活配置文件。这个示例仅供参考,在激活期间并没有实际使用它。在合适的情况下,您的示例应该指定有效的脚本命令行选项、各个选项的所有允许值的列表,以及相应的缺省值。在进行实例化的时候,激活引擎使用用户在其自定义激活配置文件中所提供的特定值,将这些命令行选项传递到激活脚本。(本文提供了一个示例 WebSphere 激活配置文件 WAS.ap。)

在模板虚拟机中安装了激活引擎和激活脚本之后,将自动地自我配置新的实例。脚本在新的、克隆的虚拟机第一次启动时执行,并且将从虚拟软盘的 XML 文件中获得的命令行的值传递到这些脚本。在成功地运行这些激活脚本之后,激活引擎将在以后重启计算机时禁用这些脚本。


部署

到此为止,所有的准备工作都是使得激活工作更加简单、并实现自动化,但是您还需要处理部署方面的问题。概括地说,新的虚拟机的部署包括将虚拟机模板复制到一个新的位置、对其进行自定义、在虚拟软盘中提供激活配置文件,然后启动它,并为其附加一个虚拟软盘。图 3 显示了这些部署步骤的概述。

图 3. 部署阶段
图 3. 部署阶段

在本文所提供的两个示例脚本中,其中一个脚本可以自动地处理部署任务:

  • xen_deploy.pl 用于 XEN V3.0.2 或者更高版本
  • esx_deploy.pl 用于 VMware ESX V3

这两个脚本可以完成相同的任务,即部署虚拟机模板的一个克隆副本。让我们对其所完成的工作进行更深入地研究。

XEN 和 VMware 激活脚本使用七个命令行选项,实现了图 3 中所介绍的步骤:

  1. 虚拟机模板的源配置文件。这是虚拟机配置文件的完整路径,如用于 ESX 的 machine.vmx。
  2. 用于存储虚拟机映像文件的目标目录。这也是一个完整路径。请确保磁盘中有足够的存储空间,因为这些文件通常都很大。
  3. 在管理程序目录中使用的、新的虚拟机的名称(不需要与新的虚拟机的主机名相同)。
  4. 使用 -memory 开关时,新的虚拟机将拥有的内存量。
  5. 使用 -vcpus 开关时,新的虚拟机将拥有的虚拟 CPU 的数量。
  6. 网络适配器的 MAC 地址(可选)。对于网络中的每台计算机,这个地址必须是唯一的,否则可能导致严重的网络问题。如果没有在命令行中指定该地址,那么将创建一个随机的 MAC 地址。对于 ESX,虚拟基础结构客户端软件将会选择这个 MAC 地址,因此可以将其保留为空。
  7. XML 配置数据(激活配置文件)的路径。将这个文件复制到虚拟软盘中。

下面显示了用于这两个脚本的命令行。在承载新的虚拟机的目标管理程序中,执行您所使用的命令。

XEN 命令:
%xen_deploy.pl -sourceVMConfig /etc/xen/vm/template.cfg -targetDirectory /etc/xen/images 
-vmname deploy01 -macaddr 00:16:3e:01:02:03 -memory 512 -vcpus 1 -xml /cfg/WAS.ap
VMware 命令,为源和目标位置使用了不同的路径:
%esx_deploy.pl -sourceVMConfig /vmfs/volumes/storage1/template/template.vmx 
-targetDirectory /vmfs/volumes/storage1 -vmname deploy01 -memory 512 -vcpus 1 -xml 
/cfg/WAS.ap

在执行该命令之前,您需要创建一个自定义激活配置文件,其中包含用于激活模板的特定输入参数。这个 XML 文件是一系列的名/值对,对应于用于模板的示例激活配置文件。

该过程的其余工作通过脚本自动地处理。该脚本所做的第一项工作是,创建一个目标目录,以保存新的虚拟机。从命令行中定义的源位置复制 VM。在 ESX 中,有一个特殊的命令行工具 vmkfstools,用以执行复制工作。对于 XEN,使用 Linux 的 cp 命令就可以了。

接下来,创建一个虚拟软盘,这是一项可行的、与管理程序无关的技术,用于为激活引擎提供输入参数文件。创建虚拟软盘需要执行几个 Linux 命令,下面显示了这些命令,并且在部署脚本中包含了这些命令。

对于 XEN:
# Virtual Floppy Disk Creation
%dd if=/dev/zero of=/tmp/floppy.img bs=4k count=16k
%losetup /dev/loop0 /tmp/floppy.img
%echo -e "n\np\n1\n\n\nw\n" | fdisk /dev/loop0
%losetup –d /dev/loop0
%losetup -o $partitionstart -s $size /dev/loop0 /tmp/floppy.img
%mkfs -t ext2 /dev/loop0
%mkdir $temp_mount
%mount -t ext2 /dev/loop0 $temp_mount
%cp $FLOPPY_XML_FILE ${temp_mount}/
%umount /dev/loop0
%losetup -d /dev/loop0
对于 VMWare:
# Virtual Floppy Disk Creation
%dd if=/dev/zero of=/tmp/floppy.img bs=1k count=1440
%losetup /dev/loop0 /tmp/floppy.img
%mkfs -t ext2 /dev/loop0 1440
%mkdir $temp_mount
%mount -t ext2 /dev/loop0 $temp_mount
%cp $FLOPPY_XML_FILE ${temp_mount}/
%umount /dev/loop0
%losetup -d /dev/loop0

该操作的最终结果是得到一个附加到虚拟机的全功能虚拟软盘 floppy.img。

在 ESX 中,v-floppy 显示为标准软驱(如 /dev/fd0)。在 ESX 中,可以通过在 VMX 文件中添加下列配置行来完成这种设置:

floppy0.present = "True"
floppy0.filetype = "file"
floppy0.filename = "floppy.img"
floppy0.startConnected = "true"

在 XEN 中,脚本 xen_deploy.pl 将 v-floppy 分配给 /dev/hdb。在操作系统启动的时候,激活引擎装入 /dev/hdb1 以访问 v-floppy,因为不支持标准软驱 /dev/fd0,所以 v-floppy 是作为虚拟 IDE 设备(如 /dev/hdb)进行附加的。

disk = [ 'file:/etc/xen/images/vm2/floppy.img,hdb,r','file:/etc/xen/
images/vm2/WAS.va,hda,w' ]

该脚本将激活概要 XML 文件复制到新的 v-floppy 磁盘中。最后,这些脚本将修改新的虚拟机的配置文件,包括内存总量、CPU 的数量,以及命令行中指定的 MAC 地址。在最后的配置步骤完成之后,就可以启动该虚拟机了。


自动激活

现在,可以享受自动化带来的好处了。启动 VM,观察激活引擎的运行,并且您的虚拟机应该可以自动地自行激活。每个激活脚本都按照指定的顺序运行,激活引擎通过扫描虚拟软盘中匹配每个脚本的激活配置文件数据,获得相应的命令行选项。

将每个激活脚本执行的结果存储在名为 AR(表示激活结果 Activation Results)的子目录的日志文件中。检查这个目录以调试相关的问题,或者查看激活的状态。因为调试激活脚本是一项常见的任务,所以提供了一种用于重新运行这些脚本的手工方法。您可以重新运行所有的激活脚本,而无需重启计算机。首先,删除 AR 目录中的所有文件,然后使用下面的命令重新运行这些激活脚本:

%AE.sh -i /opt/IBM/AE/AP/WAS.ap


激活脚本示例

您所需要的第一个激活脚本是自定义 IP 网络标识的激活脚本。先前的文章包括了完成网络自定义工作的手工步骤。这里提供了一个激活脚本 ConfigNET.pl,它可以为克隆的 SUSE V10 虚拟机设置主机名、IP 地址、网关、DNS 服务器等过程实现自动化。将这个脚本添加到激活引擎,以自动地激活网络标识。该脚本将自动地更改 /etc/hosts 文件、/etc/HOSTNAME 和 /etc/sysconfig/network/route 文件中的缺省网关,另外它还将修复 ifcfg-eth* 文件,以便包含命令行中指定的特定配置选项和 MAC 地址,以匹配虚拟硬件。这个脚本中使用的命令行选项是:

-bootproto - either dhcp or static ip configuration
-hostname - the new hostname of the virtual machine
-domain - the new domain name like ibm.com
-ipaddr - with static configuration set the actual IP
-netmask - with static configuration set the netmask
-pri_dns - primary dns server
-sec_dns - secondary dns server

对于本文所提供的 WebSphere 模板,可以使用一个激活脚本,以自动设置 Linux root 密码。下载部分中包含示例 Shell 脚本 ConfigPWD.sh(如下所示)。

#!bin/sh
#
# A utility for changing the root password.
#
# usage: sh ConfigPWD.sh –root "pw4vm"
while [ $# -ne 0 ]
do
	case $1 in
		-root*)
		Password=$2
		;;
		*)
		;;
	esac
	shift 2
done

echo "root:$Password" | chpasswd

示例下载

为了帮助您开发用于部署并激活您的虚拟映像的自动化操作,本文在下载文件中提供了这里列出的代码示例:

  • 通用目的的激活引擎:AE.tar
  • 通过 WebSphere/SUSE V10 模板使用激活引擎的示例:activation_scripts.tar
    • 激活逻辑:WAS.al
    • Linux 网络配置脚本:ConfigNET.pl
    • Linux root 密码脚本:ConfigPWD.sh
    • WebSphere 配置脚本:ConfigWAS.pl
    • 激活配置文件:WAS.ap
  • 部署虚拟机的通用目的示例:deploy_scripts.tar
    • 对于 XEN:xen_deploy.pl
    • 对于 VMware:esx_deploy.pl

结束语

您可以使用本文所介绍的技术,自动地部署并激活虚拟机。在新的克隆副本第一次启动时,可以自动地处理手工激活步骤。除了激活引擎之外,本文还介绍了两个自动部署脚本(一个用于 VMWare ESX,另一个用于 XEN),以及两个有用的激活脚本(以帮助您更改网络标识和设置 root 密码)。本文所介绍的技术通过简化虚拟映像部署和激活,从而帮助您节约时间。


下载

描述名字大小
Code samplesvisamples.zip26 KB

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=256516
ArticleTitle=为虚拟映像的部署和激活实现自动化
publish-date=09272007