vSphere部署系列之10——虚拟机模板和规范


在前面的博文章节中,已搭建了群集,并启用了HA和DRS,但还没有划分资源池,这种情况已经可以应付实际生产环境。资源池的创建和配置比较简单、难点在对配额的理解和按需划分。有兴趣的朋友可以网上查阅相关资料,这里暂不作研究。


vCenter提供了模板功能,可把一台已部署好的虚拟机转换为模板,然后以此模板为镜像批量部署虚拟机。这一节是关于虚拟机模板及其管理规范方面的操作。


实验环境总体规划,请见前面的博文《vSphere部署系列之03——实验环境总体规划》


 vSphere部署系列之10——虚拟机模板和规范_第1张图片

▲总体规划网络拓扑图


一、前期工作


在使用模板之前,需要先安装"样板"虚拟机,并且将该虚拟机转化(或克隆)成"模板",以后再需要此类的虚拟机时,以此为模板派生或克隆出多台虚拟机。


本案在群集中创建基于Windows Server 2008R2系统和 CentOS 6.5系统的两个虚拟机,名字分别为Win2008R2-Temp和CentOS-Temp。


在系统中进行一些常规性软件部署(对于Windows Server 2008R2,还需要激活系统、更新补丁),并安装好VMware Tools。(VMware Tools的安装很简单,具体详见《vSphere部署系列之05——虚拟机的创建和设置》)



二、将虚拟机转换成模板 


本案是在vSpherer Client连接vCenter Server的主界面中进行。


将虚拟机转换成模板,操作很简单。在vSpherer Client中,定位到要转换成模板的虚拟机,用鼠标右键单击,从弹出的快捷菜单中选择"转换成模板"即可。


注:将虚拟机“转换成模板”的操作,虚拟机不保留、只能作模板使用,若是选择“克隆为模板”,则在虚拟机的基础上,克隆出与此虚拟机"完全一样"的虚拟机为模板,原虚拟机仍然可以使用。


 vSphere部署系列之10——虚拟机模板和规范_第2张图片

▲将虚拟机Win2008R2-Temp转换为模板


*按同样步骤,也将CentOS-Temp转换成模板。


虚拟机转换成模板后,在“清单->主机和群集”左则列表中不显示,可选择群集然后在右则“虚拟机”页面中查看。也可切换到“清单->虚拟机和模板”中查看。


 vSphere部署系列之10——虚拟机模板和规范_第3张图片

▲清单->主机和群集,虚拟机分页中查看模板


 vSphere部署系列之10——虚拟机模板和规范_第4张图片

▲清单->虚拟机和模板,在左则列表中查看模板,右则摘要中可查看模板信息

注:模板与虚拟机的图标是不同的



二、从模板部署虚拟机,不自定义方式


通过模板部署虚拟机,有不自定义方式和自定义方式两种。前者比后者简单很多,后者需要创建并应用自定义规范。这里以模板Win2008R2-Temp为例,先介绍不自定义方式的步骤。


在“清单->虚拟机和模板”中,定位到模板Win2008R2-Temp,用鼠标右键单击,从弹出的快捷菜单中选择“从该模板部署虚拟机”,将会弹出“部署模板”对话框。


 vSphere部署系列之10——虚拟机模板和规范_第5张图片

▲从模板Win2008R2-Temp部署虚拟机

注:“转换成虚拟机”子菜单,可将模板重新转为虚拟机。当模板系统需要更改配置或是多安装某些软件时,可通过此方法实现。


 vSphere部署系列之10——虚拟机模板和规范_第6张图片

▲部署模板对话框,名称和位置设置,在这里为虚拟机命名、选择位置

这里只看到数据中心SQ-DataCenter,如果数据中心中有归类的文件夹,也是可见、可选的。


 vSphere部署系列之10——虚拟机模板和规范_第7张图片

▲主机和群集设置,在此选择虚拟机将要驻留的主机

由于环境中配置了群集,这里要先选择群集 


 vSphere部署系列之10——虚拟机模板和规范_第8张图片

▲主机和群集设置,在此选择虚拟机将要驻留的主机

如果群集中有配置了资源池,还会有选择资源池的步骤。


 vSphere部署系列之10——虚拟机模板和规范_第9张图片

▲存储器设置,在此选择虚拟机将要使用的存储位置,这里选择共享存储SQST01-244001

虚拟机磁盘格式设置为默认的与格式相同。


 vSphere部署系列之10——虚拟机模板和规范_第10张图片

▲自定义设置, 在此选择是否对虚拟机自定义,这一步很关键,这里选择“不自定义”,

如果选择“使用现有自定义规范自定义”,则需要使用相关的规范。后文会讲述。

“创建后打开此虚拟机的电源”默认是不勾选的,这里手动勾选。


 vSphere部署系列之10——虚拟机模板和规范_第11张图片

▲虚拟机设置摘要,在此单击“完成”按键,即完成该模板部署操作

注,此处不建议选择“编辑虚拟机硬件”,可在虚拟机部署完毕后再修改


模板部署完成后,在任务栏中,可看到虚拟机被创建的进度。虚拟机创建完成后,在“清单->主机和群集”和“清单->虚拟机和模板”的列表中可见。


通过以上步骤部署的虚拟机跟模板一模一样,有相同的IP、主机名及配置,对于Windows操作系统而言,其SID也是一样。这在网络中,尤其有域环境中,会出现问题。需要进系统使用sysprep对系统重新封装。在批量部署的情况下,工作量还是挺大的。


有一个工具可以帮助解决这些问题,那就是自定义规范管理器。



三、创建用于自定义部署的自定义规范


vCenter可使用sysprep程序对Windows Server等产品进行后期定制,其底层的原理与Widows系统里的重封装是一样的,只是把sysprep重新封装的准备工作集成到vCenter中,并且是在通过模板部署虚拟机时进行,而不是在制作模板前进行。


下面通过对Windows Server 2008 R2 SP1行定制,介绍"定制规范"的使用。


1、把操作系统对应的sysprep文件拷贝到vCenter服务器特定的目录下


对于Windows Server 2008 R2 SP1而言,sysprep文件在系统安装目录中可以找到,具体路径为C:/windows/sysyem32/sysprep,在运行窗口中运行sysprep命令,并按回车,即可进入C:/windows/sysyem32/目录。


本案中,由于 vCenter所在的系统(本案为虚拟机sqvcenter)就是Windows Server 2008 R2 SP1。直接登录该系统,将C:/windows/sysyem32/ 目录下的sysprep文件拷贝到C:/program Files/VMware/infrastructure/VirtualCenter Server/目录下(VirtualCenter Serve目录是vCenter安装时自动生成的)即可。


vSphere部署系列之10——虚拟机模板和规范_第12张图片


如果模板为Windows Server 2003/2003R2的系统,sysprep文件,需要从系统镜像对/support/tooles/deploy.cab解压得到,然后通过远程操作,将其拷贝到

C:/program Files/VMware/infrastructure/VirtualCenter Server/目录下。


2、创建自定义规范


这项操作是在“自定义规范管事器”中进行。


 vSphere部署系列之10——虚拟机模板和规范_第13张图片

▲在“主页”中找到“自定义规范管理器”,单击进入


在自定义规范管事器中,可创建适用于Window Server和Linux操作系统的规范。


下面,创建一个适用于Winodws Server(包括2003/2008/2012等版本)系统的规范。


 vSphere部署系列之10——虚拟机模板和规范_第14张图片

▲在“自定义规范管事器”中,右击,在弹出的菜单里选择“新建”,将会弹出“新建自定义规范”对话框。 


 vSphere部署系列之10——虚拟机模板和规范_第15张图片

▲“新建自定义规范”对话框,第一步是选择目标虚拟机操作系统和设备规范名称,

在“目标虚拟机操作系统”下拉列表框中有“Windows”和“Linux”两项,这里选择Windows,

规范名称需自行填写,为了便于识别,一般以“操作系统+业务类型”进行命名,这里填写为Win2008R2_SP1。也可填写更详细的描述。


 vSphere部署系列之10——虚拟机模板和规范_第16张图片

▲注册信息设置


 vSphere部署系列之10——虚拟机模板和规范_第17张图片

▲计算机名称设置,选择“在部署向导中输入名称”


 vSphere部署系列之10——虚拟机模板和规范_第18张图片

▲Windows许可证设置,本案模板是通过KMS激活了的,这里不需要设置产品密钥。


vSphere部署系列之10——虚拟机模板和规范_第19张图片 

▲管理员密码设置,管理员密码可留空以保留原镜像虚拟机管理员密码,或指定一个新的密码


 vSphere部署系列之10——虚拟机模板和规范_第20张图片

▲时区设置


 vSphere部署系列之10——虚拟机模板和规范_第21张图片

▲登录时命令运行设置,保留为空


 vSphere部署系列之10——虚拟机模板和规范_第22张图片

▲网络设置,选择“自定义设置”


 vSphere部署系列之10——虚拟机模板和规范_第23张图片

▲网络接口自定义设置,IP地址默认为DHCP获取方式,单击“…”属性按键,将弹出“网络属性”对话框


 vSphere部署系列之10——虚拟机模板和规范_第24张图片

▲网络属性对话框,在此设置子网掩码、网关和DNS等,单击“确定”按钮,返回网络接口自定义对话框


 vSphere部署系列之10——虚拟机模板和规范_第25张图片

▲网络接口自定义设置,此时IP地址为“提示用户”方式


 vSphere部署系列之10——虚拟机模板和规范_第26张图片

▲工作组或域设置,这里设置为本地工作组WORKGROUP


 vSphere部署系列之10——虚拟机模板和规范_第27张图片

▲操作系统选项设置,这一项是为了生成新SID,一定要勾选


 vSphere部署系列之10——虚拟机模板和规范_第28张图片

▲设置摘要,单击“完成”按钮以完成自定义规范。


*按类似的步骤,再创建适用于Linux系统的规范CentOS6.5_x64。

其中在“属性”的目标虚拟机操作系统一项中,选项Linux;

在“计算机名称”一项中需要设置域名,将其至为“localhost”,如下图所示;

“工作组或域”一项则没有,这三处跟Windows规范有所不同。


 vSphere部署系列之10——虚拟机模板和规范_第29张图片

▲Linux规范中计算机名一项,将域名设置为“localhost”


规范创建完成后,会在自定义管理器中罗列。


 vSphere部署系列之10——虚拟机模板和规范_第30张图片

新建的CentOS6.5_x64规范和Win2008R2_SP1规范



四、从模板部署虚拟机,使用自定义规范方式 


下面以Windows系统为例,通过使用自定义规范的方式,从模板Win2008R2-Temp部署虚拟机Win2k8_241.42。


在“清单->虚拟机和模板”中,定位到模板Win2008R2-Temp,用鼠标右键单击,从弹出的快捷菜单中选择“从该模板部署虚拟机”,将会弹出“部署模板”对话框。


前面的步骤与前面第二节中的是一样的,依次设置虚拟机名称、驻留的主机、存放的存储等,直到“客户机自定义”。


 vSphere部署系列之10——虚拟机模板和规范_第31张图片

▲客户机自定义,这里选项“使用现在自定义规范自定义”并选择规范“Win2008R2_SP1”


 vSphere部署系列之10——虚拟机模板和规范_第32张图片

▲用户设置,在此设置NetBIOS名称(即系统主机名)和IP地址

因为在规范“Win2008R2_SP1”规定了NetBIOS名称为“在部署向导中输入名称”,IP地址为“当使用规范时,提示用户输入地址”方式。

这也是使用规范后, 唯一需要进行的手动设置的地方。其他设置交由规范自动处理。


 vSphere部署系列之10——虚拟机模板和规范_第33张图片

▲虚拟机设置摘要,在此单击“完成”按键,即完成该模板部署操作

注,此处不建议选择“编辑虚拟机硬件”,可在虚拟机部署完毕后再修改


由于在“客户机自定义”步骤中,勾选了“创建后打开此虚拟机的电源”,该虚拟机创建完成后,会自行启动。首次启动后,系统会自动按已设定的规范进行配置,并更新SID,此过程不需要人为干预。


 vSphere部署系列之10——虚拟机模板和规范_第34张图片

▲虚拟机自动重装封装过程


打开该虚拟机控制台,观察访虚拟机的运行情况,可以看到,虚拟机先开机到登录界面,过大概10秒左右(此期间不需要人为操作),会自动启起,然后自动进行sysprep重新封装。直到系统再次重启到登录界面时,使用规范中设置的管理员密码进行登录即可。


 vSphere部署系列之10——虚拟机模板和规范_第35张图片

▲从Win2k8_241.42摘要中,可看到该虚拟机此时的IP地址和主机名


 vSphere部署系列之10——虚拟机模板和规范_第36张图片

▲进入虚拟机系统,在cmd命令窗口中输入“whoami /user”,可查看本机的SID号


*按类似的操作,从CentOS-Temp模板部署虚拟机。



五、关于CentOS使用自定义规范方式 


在vSphere5.5环境中,在做了CentOS6.5 x64模板,并创建了linux自定义规范之后,在从CentOS6.5 x64模板部署虚拟机时,会出现不能使用自定义规范的情况。如下图所示。


 vSphere部署系列之10——虚拟机模板和规范_第37张图片

▲从CentOS6.5 x64模板部署虚拟机时,被提示不支持自定义客户机操作系统。



本案在操作过程中,也遇到这个问题。将CentOS-Temp模板重新转换成虚拟机,运行并查看,发现Perl默认已安装(网上很多资料说跟这个有关),VMTools已安装(当前vSphere5.5中最新的版本)并正常运行。但就是不能使用自定义规范。有资料说VMware早已不支持CentOS的自定义规范,但在官方资料未到明确的说法。


后经排查,发现以上情况与模板/虚拟机的“客户机操作系统”性质有关。笔者初时在创建CentOS-Temp虚拟机时,“客户机操作系统”选择的是“CentOS4/5/6 (64位)。”后来重新建虚拟机,将“客户机操作系统”性质一项设置为“Red Hat Enterprise Linux 6 (64位)”,虚拟机配置完成后,再转换成模块,便可以从自定义规范部署。

 

vSphere部署系列之10——虚拟机模板和规范_第38张图片

▲CentOS-Temp模板的摘要,

从中可以看到该模板的客户机操作系统属性为“Red Hat Enterprise Linux 6 (64位)”。


 vSphere部署系列之10——虚拟机模板和规范_第39张图片

▲从CentOS-Temp模板部署虚拟机,这里可选择之前创建的CentOS6.5_x64规范。



在常规的按“不自定义”方式部署的虚拟机时,会出现因虚拟机MAC地址(在虚拟机属性中可查看)与虚拟机客户系统MAC地址(在ifcfg-eth0配置文件中可查看)不一致而出现虚拟机无法上网的情况。需要在客户系统的配置文件ifcfg-eth0中修改MAC,使之与虚拟机的MAC地址一致,并重启系统(需要连接重启两次),才能连通网络。


在这里使用自定义规范后,虚拟机客户系统内会自动生成一个ifcfg-eth1(即多了一个网卡eth1)配置文件,该配置文件的MAC(ifcfg-eth1中没有列出来)与虚拟机实际MAC地址是一致的,且IP为创建虚拟机时在“用户设置”一步中指定的,系统通过该eth1上网。


但在由于模板中为eth0是指定了网关,虚拟机客户系统在创建eth1时无法为其指定网关(从上图可看出,缺少GATEWAY字段),因而出现网络只局限在本地VLAN网段——本案中VLAN241是可以pin通baidu.com的,但此时的CentOS虚拟机ping baidu.com被提示找不到主机。


解决的方法是,将ifcfg-eth0中的GATEWAY字段删除,并在ifcfg-eth1中添加GATEWAY字段和具体网关地址,本案为“GATEWAY=10.1.241.254”,修改完成后,重启network服务后,ping baidu.com有返回。


vSphere部署系列之10——虚拟机模板和规范_第40张图片

▲ifcfg-eth0配置内容


vSphere部署系列之10——虚拟机模板和规范_第41张图片

▲ifcfg-eth1配置内容


vSphere部署系列之10——虚拟机模板和规范_第42张图片

▲虚拟机属性中的MAC地址


不过,对于一些应用场景,多出了一个网卡eth1会让人感到不习惯。若要使用ifcfg-eth0,手动将ifcfg-eth1文件删除,同时修改ifcfg-eth0中的MAC地址(当然也要更改IP地址),使之与虚拟机的MAC地址一致,并重启系统(需要连接重启两次)即可。


以上eth0的MAC地址与虚拟机MAC不匹配的情况,与虚拟机中/etc/udev/rules.d/70-persistent-net.rules有关,此文件记录了虚拟机在第一次创建时系统得到的网卡信息及MAC地址。在上述的“不自定义”和“使用自定义规范”克隆的虚拟机中,为解决MAC问题,更改ifcfg-eth0是一种方法,另一种方式则是删除该70-persistent-net.rules文件,并重启系统(也是需要连接重启两次),这样客户系统就可以学习到新的eth0 MAC地址了。