VMware workstation批量创建虚拟机和自动化安装操作系统(二)

一. 简述

在上一篇《VMware workstation批量创建虚拟机和自动化安装操作系统(一)》中,主要介绍了VMware workstation自定义创建虚拟机的过程,和一些其他的有利于管理虚拟机的配置等操作。
本篇博客主要是基于上一篇博客的基础 ,进行88台虚拟机的批量化部署和操作系统自动化安装。

二. 涉及知识点

  • 网络引导服务器部署(无人值守安装)
  • centos网络配置
  • vmtools的安装和使用
  • 共享文件的和虚拟机安装目录设置
  • shell脚本语言编辑和sed用法
  • DHCP绑定MAC分配IP

三. 部署过程

因为采用网络引导安装的方式,因此需要首先部署好网络引导服务器。网络引导服务器采用无人值守安装的引导安装方式,因此需要做一下准备。

1. 虚拟机console01安装操作系统

基于前一篇博客,采用虚拟机通过虚拟硬件CDROM打开系统镜像ISO文件的方式安装操作系统,因为之配置了内存为512M,故安装过程为精简安装。安装过程略。
console01配置如下:
4vCPU(2x2),512M内存,8G系统盘,2块以太网卡(NAT&Hostonly)
NAT:eth_mac 00:00:00:80:00:03
Hostonly:eth_mac 00:00:00:10:00:03
OS:CentOS6.5_x86_64

注:采用此种方式安装时,实际安装的软件包只有200多个。很多配置都不齐全。因此需要做一些初始配置。比如vim安装,YUM源配置等,这些就不在赘述。

a. 编辑网络配置

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=00:00:00:80:00:03
TYPE=Ethernet
UUID=6cf3f3f4-ccf5-48a2-8ba3-db09068942f5
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.80.3
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=192.168.80.2

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
HWADDR=00:00:00:10:00:03
TYPE=Ethernet
UUID=c82f9c62-49b3-4282-9533-55e909c484d8
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.10.3
NETMASK=255.255.255.0

编辑完成之后,启动网卡
ifup eth0 && ifup eth1

b. 远程登陆

上述过程完成之后,可以通过ssh客户端,如xshell登陆console01

2. 安装vmtools

选择console01,右键点击,可发现有安装vmtools选项。
当以这种方式安装vmtools时,实际上是以光驱挂载镜像文件的方式,将载有vmtools光驱设备,接入到虚拟机console01中,但是并没有挂载,因此需要以下操作。

注,此时VMware workstation会有如下提示:
在客户机中装载虚拟CD驱动器,启动终端,使用tar解压安装程序,然后执行vmware-install.pl安装VMware Tools

a. 挂载vmtools光驱设备

mkdir -p /mnt/cdrom && mount -o loop /dev/cdrom

进入到/mnt/cdrom中,加压到指定目录

cd /mnt/cdrom && tar -zxvf VMwareTools-10.1.6-5214329.tar.gz -C /root

b. 执行安装vmtools的脚本

进入到/root/vmware-tools-distrib中,执行安装脚本(-d选项免交互默认安装)

./vmware-install.pl -d

提示结束后,基本完成了vmware tools的安装。

注:
vmtools能够带来很多好处。
其一就是虚拟机可以全屏显示;
其二就是能够进行宿主PC和虚拟机之间的粘贴复制或者拖曳复制;
其三就是设置时间同步,使得虚拟机的时间和宿主机同步;
其四就是文件共享,这一点十分好用。

通过菜单的首选项,设置共享目录,则共享目录挂载在/mnt/hgfs目录下,VMware workstation可以设置多个共享目录。

共享目录的权限,在虚拟机CentOS6.5的系统中,显示为777(可读可写可执行模式),因此在此共享目录中的文件,能够被读取编辑和执行。
之所以说共享目录用处很大,不仅仅在于它能够在Linux中看到和使用windows的文件,同时可以作为一种全局文件系统的存在,即不添加其他数据磁盘,直接使用/mng/hgfs目录下的共享目录,来使用windows的文件系统,进行数据的存储,如网站数据,软件安装目录等,控制台的维护脚本等。这样做的好处是,即便虚拟机不存在了,但是那些数据依然存在,并且可使用性极高。具备了数据的冷备性质,保证了数据的安全性。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
※※※ 写到此,大多读者应该能够猜到我是如何来批量创建虚拟机和安装操作系统的了 ※※※
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

没错,是这样:
通过虚拟机的shell脚本,来创建多个虚拟机目录,同时以拷贝和修改虚拟机配置文件,使得每个虚拟机具有固定的MAC地址。
在无人值守引导安装的部署过程中,配置DHCP通过MAC分配IP的方式,进行所有虚拟机的IP设定。
基本上是这个思路了,方向很明显,技术实现不是很难,只是比较费时间,在费时过程中学习和实践。

3. 创建软RAID1

这里通过RAID1存储系统镜像,一方面是提供数据的读取速度,一方面是认识和使用RAID

a. 添加两块10G数据盘,创建RAID1

  1. 检查系统是否安装有mdadm软件包 :
    rpm -qa|grep mdadm
  2. 安装mdadm软件:
    yum -y install mdadm
  3. 不重启扫描SCSI总线获取添加的磁盘:
    echo "- - -" > /sys/class/scsi_host/host0/scan
  4. 查看磁盘并格式化
    fdisk -l|grep dev
  5. 创建RAID1设备/dev/md1
    mdadm -C /dev/md1 -l raid1 -n /dev/sdb /dev/sdc
    mdam -D -s > /etc/mdadm.conf

b. 格式化挂载RAID1设备

  1. 格式化/dev/md1
    mkfs.ext4 /dev/md1
  2. 编辑/etc/fstab内容
# /etc/fstab
# Created by anaconda on Sat Jul 22 13:34:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=3172fd83-981b-49ce-b0ca-96a8288d1ffc /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/md1				/var/www/html			ext4	rw,quota,acl	0 0

执行mount -a ,然后df -h看一下是否正确挂载

至此,其实完成了第一步,即以RAID1设备/dev/md1作为存储CentOS6.5镜像文件的位置。

将/dev/md1挂载在Http默认的网站根目录,只需要我们部署镜像网站即可。

因为是多版本安装,因此我们需要区分不同的网络镜像,这里以目录的形式区分,即创建目录

mkdir -p /var/www/html/centos6.5

4. 部署HTTP服务

HTTP服务,是网络引导时,从改HTTP服务器上加载完整的系统镜像站点。这里采用的时HTTP服务,当然也可以采用FTP,或NFS协议

a. 安装httpd

yum -y install httpd

b. 配置httpd服务

  1. 修改:ServerName=192.168.80.3
  2. 取消注释:NameVirtualHost *:80
  3. 添加以下内容
<VirtualHost *:80>
    ServerAdmin yunweintoe@163.com
    DocumentRoot /var/www/html
    ServerName www.osimage.com
    ErrorLog logs/www.osimage.com-error_log
    CustomLog logs/www.osimage.com-access_log common
</VirtualHost>

c. 启动HTTP服务

service httpd start && chkconfig httpd on

d. 创建CentOS6.5系统镜像站

通过console01的CDROM加载CentOS6.5的ISO文件后,可在系统里挂载

mount -o loop /dev/cdrom /mnt/cdrom

或者在/mnt/hgfs中直接挂载

mount -o loop /mnt/hgfs/share/osimage/CentOS-6.5-x86_64-bin-DVD1.iso /mnt/cdrom/

测试可以通过浏览器输入:http://192.168.80.3/centos6.5/RELEASE-NOTES-en-US.html 来看是否能够访问站点

5. 部署TFTP服务

TFTP主要提供在CentOS6.5从网络引导时,提供压缩内核vmlinuz和文件系统镜像文件initrd.img,TFTP的根目录在/var/lib/tftpboot
因此 ,当存在多个版本操作系统压缩内核和文件系统镜像时,则需要和完全镜像站点一样,通过创建目录的方式,把不同版本的对应文件放置其中

a. 安装TFTP

这里以xinetd的方式来运行tftp,而非守护进程的方式

yum -y install xinetd tftp-server

b. 编辑xinetd配置

vim /etc/xinetd.d/tftp

# default: off
# description: The tftp server serves files using the trivial file transfer 
#	protocol.  The tftp protocol is often used to boot diskless 
#	workstations, download configuration files to network-aware printers, 
#	and to start the installation process for some operating systems.
service tftp
{
	socket_type		= dgram
	protocol		= udp
	wait			= yes
	user			= root
	server			= /usr/sbin/in.tftpd
	server_args		= -s /var/lib/tftpboot
	disable			= no
	per_source		= 11
	cps			= 100 2
	flags			= IPv4
}

c. 启动tftp服务

chkconfig xinetd on && service xinetd start

d. 拷贝压缩内核和文件系统镜像

mkdir -p /var/lib/tftpboot/centos6.5

cp /var/www/html/centos6.5/isolinux{initrd.img,vmlinuz} /var/lib/tftpboot/centos6.5/

e. 创建pxelinux.cfg 目录

pxelinuc.cfg内部存放的是网络引导启动时的配置文件和展示列表。
pxelinux.0则是如同mbr一样的网络引导程序,会从pxelinux.cfg的配置中获取引导配置参数和列表,从而引导不同的操作系统

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

假如系统没有/usr/share/syslinux/pxelinux.0文件,则需要通过以下命令来安装

yum -y install syslinux

f. 编辑pexlinux.cfg/default和list.txt文件

default文件用来指定引导默认时间,需要加载的内核参数,内核镜像位置等,list.txt表示引导前展示的内容

编辑/var/lib/tftpboot/pxelinux.cfg/default:

#设置默认安装系统
default 1
prompt 1
#设置默认超时6秒
timeout 60
#要显示的信息
display pxelinux.cfg/list.txt
#内核参数等
label 1
kernel	/centos6.5/vmlinuz
#ksdevice寻找镜像的设备
  #http
  append ksdevice=eth0 ks=http://192.168.80.3/centos6.5/ks.cfg initrd=/centos6.5/initrd.img
  #nfs
  #append ksdevice=eth0 ks=nfs://192.168.80.3/centos6.5/ks.cfg initrd=/centos6.5/initrd.img
  #ftp
  #append ksdevice=eth0 ks=ftp://var/lib/tftpboot/centos6.5/ks.cfg initrd=/centos6.5/initrd.img

label 2
kernel	/centos7.2/vmlinuz
  #http
  append ksdevice=eth0 ks=http://192.168.80.3/centos7.2/ks.cfg  initrd=/centos7.2/initrd.img

注:
http,nfs,ftp都可以用来存放完整系统镜像。
kernel /centos6.5/vmlinuz指定的时压缩内核的位置,实际路径是从/var/lib/tftpboot/centos6.5/vmlinuz;initrd=/centos6.5/initrd.img 实际位置是/var/lib/tftpboot/centos6.5/initrd.img。
append指定引导内核时的参数,ksdevice=eth0指定从虚拟机的eth0网卡寻找站点,ks指定安装系统中的配置文件位置,这里采用http协议,说明ks.cfg文件放置在和完整镜像同一个位置

编辑/var/lib/tftpboot/pxelinux.cfg/list.txt:

#**********************************#
# choise which os you want install
# (1)	centos6.5 (default)
# (2)	centos7.2
#**********************************#

6.创建和编辑kf.cfg文件

自动化安装操作系统的一个重要环节则是ks.cfg文件,这个文件记录了交互安装过程中各个部分的值。
ks.cfg的文件生成有三种方式:
1.通过安装和启动来生成system-config-kickstart来生成。这种方式需要在centos6.5系统中安装和启动system-config-kickstart,通过kickstart来创建ks.cfg文件,并保存到/var/www/html/centos6.5/目录下。
2.通过VMware workstation安装虚拟机来生成。事实上,当安装操作系统之后,都会在/root目录下生成anaconda-ks.cfg文件,这个同样也是ks.cfg的文件。使用VMware workstation创建虚拟机时,生成的该文件,需要做一定的修改,才能够应用在网络引导安装的过程中。
3.手动编辑ks.cfg文件。这个是比较专业的人士的选择。

本篇博客就是使用了第一种方式。或者根据第一种ks.cfg文件,来修改第二种方式生成的ks.cfg文件。
ks.cfg文件的内容主要是安装过程中的参数,通过文件的形式直接指定给安装程序。其实还可以编写一些简单的脚本,使得在虚拟机安装完成之后,执行这些脚本。我的ks.cfg内容如下:

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.80.3/centos6.5/"
# Root password
#rootpw --iscrypted $1$pOt10Fdi$4zP5vQOnGj1qPp.0/olif.
rootpw  --iscrypted $6$ZspR1hpO4tq5c0dh$xLhgGsVtFkCFh9oB6xgXwIfMga5MXYvf7JHAnfkBwPC29yhk7UY9uPWBTR0aGQCbD6j2uegZTJL7myluYl1we/
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
network  --bootproto=dhcp --device=eth1 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=256
part swap --fstype="swap" --size=500
part / --fstype="ext4" --grow --size=1

%packages
@base
@compat-libraries
@network-tools
@performance
device-mapper-persistent-data
ncurses-term
python-dmidecode
star
yum-plugin-verify
zsh
-cpuspeed

%post
#修改IP为静态IP
sed -i 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth1
#获取IP
ETH0IP=$(ifconfig eth0|grep "192"|awk '{print $2}'|awk -F : '{print $2}')
ETH1IP=$(ifconfig eth1|grep "192"|awk '{print $2}'|awk -F : '{print $2}')
#eth0 写入固定IP地址,网关,DNS1
echo "IPADDR=${ETH0IP}" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "NETMASK=255.255.255.0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "GATEWAY=192.168.80.2" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "DNS1=192.168.80.2" >> /etc/sysconfig/network-scripts/ifcfg-eth0

#eth1 写入固定IP地址,网关,DNS1
echo "IPADDR=${ETH1IP}" >> /etc/sysconfig/network-scripts/ifcfg-eth1
echo "NETMASK=255.255.255.0" >> /etc/sysconfig/network-scripts/ifcfg-eth1
#关闭IPV6
echo "NETWORKING_IPV6=no" >> /etc/sysconfig/network
echo "alias net-pf-10 off" >> /etc/modprobe.d/ipv6off.conf
echo "options ipv6 disable=1" >> /etc/modprobe.d/ipv6off.conf

%end

7. 部署DHCP服务器

无人值守自动化安装,希望裸机在启动时,能够根据自己的MAC从DHCP获取IP,然后通过IP地址和TFTP通信,获取vmlinuz和initrtd.img文件,加压内核之后,和HTTP的镜像站点通信,获取完整的系统镜像。因此DHCP在此过程中充当着重要的角色。
这里采用绑定MAC分配IP的方式,实际上是想要固定的MAC的虚拟机具有固定的IP,对以后的管理和实践环境有很高的辨识度。其实实际工作中,需要手动获取集群节点的MAC地址。本篇博客只适合实践环节的场景,主要是掌握这门技术。

a. 安装DHCP服务器

yum -y install dhcp

b. 创建主机的信息列表

这个主机信息列表值得是,希望创建的节点名称,192.168.80.0/24网段的MAC和IP,192.168.10.0/24的网段和IP。因为要从node11-node99,因此采用shell环节的for循环来生成这个信息列表

for num in $(seq 11 99)
do
    echo "node${num} 00:00:00:80:00:${num} 192.168.80.${num} 00:00:00:10:00:${num} 192.168.10.${num}" >> nodes_info.txt
done

查看生成的nodes_info.txt内容如下(部分):

node11 00:00:00:80:00:11 192.168.80.11 00:00:00:10:00:11 192.168.10.11
node12 00:00:00:80:00:12 192.168.80.12 00:00:00:10:00:12 192.168.10.12
node13 00:00:00:80:00:13 192.168.80.13 00:00:00:10:00:13 192.168.10.13
node14 00:00:00:80:00:14 192.168.80.14 00:00:00:10:00:14 192.168.10.14
node15 00:00:00:80:00:15 192.168.80.15 00:00:00:10:00:15 192.168.10.15
node16 00:00:00:80:00:16 192.168.80.16 00:00:00:10:00:16 192.168.10.16
.........
node91 00:00:00:80:00:91 192.168.80.91 00:00:00:10:00:91 192.168.10.91
node92 00:00:00:80:00:92 192.168.80.92 00:00:00:10:00:92 192.168.10.92
node93 00:00:00:80:00:93 192.168.80.93 00:00:00:10:00:93 192.168.10.93
node94 00:00:00:80:00:94 192.168.80.94 00:00:00:10:00:94 192.168.10.94
node95 00:00:00:80:00:95 192.168.80.95 00:00:00:10:00:95 192.168.10.95
node96 00:00:00:80:00:96 192.168.80.96 00:00:00:10:00:96 192.168.10.96
node97 00:00:00:80:00:97 192.168.80.97 00:00:00:10:00:97 192.168.10.97
node98 00:00:00:80:00:98 192.168.80.98 00:00:00:10:00:98 192.168.10.98
node99 00:00:00:80:00:99 192.168.80.99 00:00:00:10:00:99 192.168.10.99


c. 编辑生成配置文件的脚本

本篇博客命令的生成配置文件的脚本为make_dhcpd.sh
这个脚本的作用,就是读取上面生成的nodes_info,然后生成dhcpd.conf配置中,绑定MAC和IP的配置部分,这里是虚拟机的两块网卡都绑定

#!/bin/bash
CONFIGLIST=$1
DHCPCONFIG="/etc/dhcp/dhcpd.conf"
while read HOST_NAME ETH0MAC HOSTIP0 ETH1MAC HOSTIP1
do
cat >> ${DHCPCONFIG} << EOF
host ${HOST_NAME}-eth0 {
     hardware ethernet ${ETH0MAC};
     fixed-address ${HOSTIP0};
}
host ${HOST_NAME}-eth1 {
     hardware ethernet ${ETH1MAC};
     fixed-address ${HOSTIP1};
}
EOF
done < ${CONFIGLIST}

执行这个脚本,生成dhpcd.conf有关绑定MAC和IP的部分

./make_dhcpd.sh nodes_info

脚本执行后,可以查看生成的配置文件,部分如下:

host node97-eth0 {
     hardware ethernet 00:00:00:80:00:97;
     fixed-address 192.168.80.97;
}
host node97-eth1 {
     hardware ethernet 00:00:00:10:00:97;
     fixed-address 192.168.10.97;
}
host node98-eth0 {
     hardware ethernet 00:00:00:80:00:98;
     fixed-address 192.168.80.98;
}
host node98-eth1 {
     hardware ethernet 00:00:00:10:00:98;
     fixed-address 192.168.10.98;
}
host node99-eth0 {
     hardware ethernet 00:00:00:80:00:99;
     fixed-address 192.168.80.99;
}
host node99-eth1 {
     hardware ethernet 00:00:00:10:00:99;
     fixed-address 192.168.10.99;
}

d. 编辑/etc/dhcp/dhcpd.conf其他部分

除在/etc/dhcp/dhcpd.conf末尾部分生成了绑定MAC和IP的部分配置以外,还需要做其他的修改,来使虚拟机从DHCP获取IP时,指定虚拟机获取压缩内核的TFTP服务器
DHCP其实时bootstoop,网络引导启动协议的一部分,因此其在配置中保留了网络引导的那部分功能。
修改配置如下:

# Use this to enble / disable dynamic dns updates globally.
#修改的内容
ddns-update-style interim;
ignore client-updates;
......
# pxelinux启动文件位置;
filename    "pxelinux.0";
# TFTP Server的IP地址
next-server 192.168.80.3;
subnet 192.168.80.0  netmask 255.255.255.0 {
  range dynamic-bootp 192.168.80.10 192.168.80.254;
  option broadcast-address 192.168.80.255;
  option routers 192.168.80.3;
  default-lease-time 21600;
  max-lease-time 43200;
}
subnet 192.168.10.0  netmask 255.255.255.0 {
  range dynamic-bootp 192.168.10.10 192.168.10.254;
  option broadcast-address 192.168.10.255;
  default-lease-time 21600;
  max-lease-time 43200;
}

至此,DHCP的配置部分完成。

d. 启动DHCP服务器

service dhcpd start && chkconfig dhcpd on

至此,无人值守部分到此已经配置完成。此时如果单独创建一台虚拟机,并且配置虚拟机的MAC地址,然后启动,则会从网络引导自动安装操作系统。
如:
创建虚拟机node11,配置为4vCPU,512M内存,8G系统盘,2块以太网卡,MAC分别为:NAT eth0 00:00:00:80:00:11 ;Hostonly eth1 00:00:00:10:00:11
此时启动node11,可以发现node11从DHCP获取了IP:192.168.80.11,然后从TFTP获取了vmlinuz和initrd.img,开启加载操作系统,然后获取了ks.cfg,启动安装程序,安装ks.cfg中的软件包,通过查看HTTP的日志可以看到获取的软件包等信息。

8.批量创建虚拟机

无人值守的环节已经完成了,这个时候只要能够创建快速创建具有固定MAC的虚拟机,便可启动虚机进行操作系统无人值守安装了
上面博客内容已经提到了共享文件和虚拟机配置文件的作用,在这个环节就有很重要的体现了

a.添加共享目录E盘

我的PC中,空出E盘来专门存放虚拟机的。因此可以把该盘通过共享目录的方式,共享给console01,共享名称为virtualcluster。
此时在console01的系统中,可以在/mnt/hgfs目录下,看到这个目录。后续的node11-node99,实际上使放置在/mng/hgfs/virtualcluster中,以nodexx命令的文件中,共88个
在windows系统下,进入E盘,可见virtualcluster文件夹下,分别使node11-node99的虚拟机安装目录。

b. 创建模板虚拟机

共享E盘到Linux系统中后,我首先要以一个模板为基础,来生成其他虚拟机。在这里是有技巧要求的,因为后期需要通过变量的方式,来拷贝和替换模块名称和内容,因此需要一个特殊的处理。
我的特殊处理是:
创建一个nodeAA的虚拟机,配置为:4vCPU,512G内存,8G系统盘,2块以太网卡,设置NAT的MAC为:00:00:00:80:00:AA,设置Hostonly的MAC为:00:00:00:10:00:AA
此时在nodeAA安装目录中,存在4个需要的虚拟机文件:nodeAA.vmdk nodeAA.vmsd nodeAA.vmx nodeAA.vmxf
其中,nodeAA.vmx为虚拟机配置文件,其中的内容可以修改,因为nodeAA安装在共享目录下,因为可以在shell环境中,轻松修改配置,当然离不开sed神器

c. 编辑批量创建虚拟机脚本

下面脚本是我自己实践环境中的路径,通过这种处理方式,在不超过30s的时间内,创建了从node11-node99台虚拟机。

#!/bin/bash
for node in $(seq 11 99)
do
    mkdir /mnt/hgfs/virtualcluster/node${node}
    cp nodeAA.vmdk /mnt/hgfs/virtualcluster/node${node}/node${node}.vmdk
    cp nodeAA.vmxf /mnt/hgfs/virtualcluster/node${node}/node${node}.vmxf
    cp nodeAA.vmsd /mnt/hgfs/virtualcluster/node${node}/node${node}.vmsd
    cp nodeAA.vmx  /mnt/hgfs/virtualcluster/node${node}/node${node}.vmx
    sed -i "s/AA/${node}/g" /mnt/hgfs/virtualcluster/node${node}/node${node}.vmx
done

注:将该脚本放置在模板虚拟机nodeAA目录下执行,便可在virtualcluster目录下产生需要的虚拟机,虚拟机内部的名称之类,都和设定的一样

d. 通过vmrun.exe来批量快速启动安装

在第一篇博客中,其实已经谈到了如何通过命令行执行vmrun.exe的方式来管理VMware workstation虚拟机,其中一个重要的管理就是启动虚拟机。
因此, 我们通过vmrun.exe可以快速,或者批量启动虚拟机,这些虚拟机从自己的配置文件中读取MAC地址启动,从DHCP获取了自己的IP,从TFTP和HTTP获取了自己的操作系统,启动自动化安装。
同时,我在ks.cfg文件中,编辑了启动后的一些脚本,主要是配置固定IP和禁用IPv6的操作。其中很多内容都值得深入探讨和研究。

总结:
至此,我基本上完成了以自己的方式来批量创建虚拟机和安装操作系统的整个过程。
其实,对于创建虚拟机不讲究的同学来说 ,分分钟复制N台虚拟机使用,其实非常EASY。
但是因为我后期需要根据这些虚拟机做其他的实验,比如上传到vsphere,比如根据虚拟机名称来管理虚拟机等操作,根据MAC地址和IP地址来协议分析等,对虚拟机的独立性有很高的要求,因此采用上述两篇博客的探索。
整个过程下来,对于各个知识点的学习和巩固,对学习的实践和思考,多少会有些帮助。
技术革新很快,但是人和思路都是活的。分享这篇博客,希望读者都能够有所获得。
读者朋友有任何问题,可致邮:yunweinote@126.com,欢迎探讨!

原文地址:https://www.cnblogs.com/liwanliangblog/p/7257995.html