如何在20分钟内批量部署20台ESXi服务器?

您所在的位置:网站首页 服务器部署esxi 如何在20分钟内批量部署20台ESXi服务器?

如何在20分钟内批量部署20台ESXi服务器?

2024-01-11 21:13| 来源: 网络整理| 查看: 265

 

图片

【作者】陈着峰,某银行主机管理员

 

近期新到20台华为RH2288V5服务器,需要部署ESXi,由于机器偏移,于是考虑是否能用pxe实现分配部署,经过两天的摸索实践,最终也实现了上述目标,现存记录一下过程。

先介绍一下背景。这次新到的RH2288V5,前面没有配硬盘,只在后面PCI卡位置配了一块M2的SSD。经过查看BIOS,机器配了两块RAID卡,一块用于管理前硬盘背板,服务器另外的RAID配置,没有划分VD,配的唯一一块SSD配为Unconfigure Good状态,且RAID控制器没有开启JBOD模式。

由于整机只配了一块SSD,RAID卡或把这唯一的一块SSD划分一个RAID0的VD,然后打开RAID控制器的JBOD模式让这块SSD以直通模式被操作系统识别。那么问题来了,如何需要说明的是,华为RH2288V5服务器设置是开启了UEFI引导的,基本上各大品牌现在新出的服务器,都是UEFI模式了。

经过一番搜寻,发现Broadcom提供了一个叫StorCLI的命令行工具,这个工具可以实现对RAID卡所有的配置,下载地址https://docs.broadcom.com/docs/MR_SAS_Unified_StorCLI_7.8-007.0813.0000.0000。 zip。那是否能通过pxe引导一个实时模式的linux,然后自动运行storecli把控制器JBOD模式启用起来呢?目标是在最短的时间实现批量配置RAID,所以最好是拿一个开箱即用的linux,不能涉及到复杂的修改或自定义linux启动媒体等工作,最终通过一番测试后在clonezilla上实现了所需的功能。

clonezilla是一个基于debian / ubuntu修改的发行版,不带图形界面,其主要用途其实是备份/恢复系统,那为什么会选择用它呢?首先是这个发行版体积比较小,整个ISO只有不到300M ;其次最重要的是它支持在grub的内核参数初始化一些它自定义的参数,来实现很多额外的功能,其中最重要是有我们需要的直接运行命令的参数!

版本使用是用的clonezilla-live-20180812-bionic-amd64.iso,它是基于ubuntu 18.04LTS修改而来。下载地址:https://sourceforge.net/projects/clonezilla/files/clonezilla_live_alternative/

让我们首先来详细分析如何使用pxe + clonezilla + storcli实现批量配置服务器RAID。

1,首先需要准备一台RHEL7的虚拟机(当然你要喜欢的话用物理机也行,网络能通就行),这台机用于提供dhcp + tftp + nfs服务,这些服务都需要先配置好,具体关于如何配置以及PXE引导更多的内容,可以参考我的上一篇文章。在介绍文章中,用于dhcpd分配IP的是虚拟机第二块网卡,地址配的是192.168.3.1,网段当然就是192.168.3.0了。

2,准备前期所需的脚本和storcli主程序。这里使用的NFS目录为/ nfs / pxe,在这个目录里面,准备好3个文件,分别是jbod.sh,storcli64,ks_esxi.cfg。

jbod.sh用于clonezilla引导成功之后,通过该脚本来执行storcli配RAID,该文件内容如下:

echo "";echo "**** Ready to run StorCli! ****";echo "";sleep 5; sudo /opt/storcli64 /c1 set jbod=on;sleep 5;echo "";sudo /opt/storcli64 show;sleep 10; echo "";echo "**** Going to REBOOT NOW! ****";echo "";sleep 5;sudo reboot;

这里需要解释两条命令。

 

 

storcli64 show 是查看当前系统的RAID卡基本信息,RH2288V5配的两个RAID卡会显示为第0块和第1块RAID控制器,M2 SSD所在的RAID卡为第1块。

storcli64 / c1 set jbod = on 是指将第1个RAID卡的jbod功能设置为on,即打开接了M2 SSD的RAID卡的JBOD功能。

 

 

storcli64主要程序,这个文件需要从storcli的包解压出来,从压缩包里面的ubuntu或Linux目录里面的deb / rpm包提取替代(可使用7zip来解压提取)。

ks_esxi.cfg为esxi自动启动部署用的,配RAID这个过程用不到,先创建备用。

3,准备使用PXE引导clonezilla。下载好clonezilla的ISO,将其解压到/ var / lib / tftpboot / images / clonezilla目录,然后将RHEL7的grubx64.efi到上述目录并创建grub的配置文件grub.cfg 。(至于为什么不直接使用clonezilla的ISO自带的grubx64.efi,是因为实测它自带的grubx64.efi无论如何都不认grub.cfg的配置文件,也可能是我放的路径不对吧)。

如果RHEL7是使用传统的非EFI模式安装的,那么就需要去RHEL7的ISO里面提取grubx64.efi,提取方法上一篇文章里面有写。然后把/etc/dhcp/dhcpd.conf里面定义的启动文件修改为:文件名“ images / clonezilla / grubx64.efi”。

 

cp /boot/efi/EFI/redhat/grubx64.efi /var/lib/tftpboot/images/clonezillatouch /var/lib/tftpboot/images/clonezilla/grub.cfg

4,配置PXE引导clonezilla。grub.cfg的完整内容如下:

set default=0set timeout=3menuentry "Clonezilla live (Default settings, VGA 1024x768)"{ linuxefi images/clonezilla/live/vmlinuz boot=live union=overlay username=user hostname=bionic config components noswap edd=on nomodeset locales= keyboard-layouts=NONE ocs_live_run="/opt/jbod.sh" ocs_live_batch="no" ip= net.ifnames=0 vmwgfx.enable_fbdev=1 fetch=tftp://192.168.3.1/images/clonezilla/live/filesystem.squashfs ocs_preload="mount -t nfs 192.168.3.1:/nfs/pxe /tmp/nfs" vga=791 initrdefi images/clonezilla/live/initrd.img}

上面这些参数实际上是从clonezilla自带的grub.cfg修改而来的,需要解释的参数有如下几个(跟自带的grub.cfg一样的地方就不解释了):

 

 

ocs_live_run =“ / opt / jbod.sh” 这个是指clonezilla引导完成后直接自动执行/opt/jbod.sh,而不是自带的clonezilla备份恢复菜单。

fetch = tftp://192.168.3.1/images/clonezilla/live/filesystem.squashfs 这个是让clonezilla以tftp协议获取192.168.3.1/images/clonezilla/live/filesystem.squashfs文件,这个文件是上一步已经解压出来的,这个文件是用于提供liveOS的文件系统合并(即普通linux的根目录下面的所有文件打的包)。

ocs_preload =“ mount -t nfs 192.168.3.1:/nfs/pxe / tmp / nfs” 这个是指clonezilla引导完成之前先挂载192.168.3.1:/nfs/pxe的NFS目录到/ tmp / nfs,clonezilla会自动把ocs_preload跟在后面的NFS目录内的所有文件都到/ opt目录里面去,现在明白为什么jbod.sh脚本里面要用sudo / opt / storcli64了吧?

 

 

5,上述工作都准备好之后,启动或重启RHEL7虚拟机的dhcpd / xinetd / nfs服务,然后把20台服务器都接上网线(建议先只接唯一的一条用于DHCP + PXE的网线,其他网线先不要接),注意一定要跟上面的RHEL7虚拟机的网络要通,要让这些服务器获取到RHEL7虚拟机DHCP分配出来的IP地址。

然后就可以把20台服务器都启动,DHCP获取到地址之后会通过PXE使用tftp获取grubx64.efi引导文件和grub.cfg配置文件,然后引导grub,读取配置文件并按配好的内核参数引导clonezilla ,自动挂载RHEL7虚拟机的/ nfs / pxe目录并把该目录里的3个文件副本到/ opt中,然后会执行/opt/jbod.sh脚本,即称为storcli64将SSD置于RAID卡JBOD功能打开,最后自动重启服务器(机器自动重启之后仍然会继续从PXE引导并再次执行jbod.sh,这个不会对RAID配置有什么影响)。

以下部分是RHEL7虚拟机上的/ var / log / messages执行DHCP分配引导clonezilla的部分日志:

Mar 7 21:19:21 RHEL76 dhcpd: DHCPDISCOVER from 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:22 RHEL76 dhcpd: DHCPOFFER on 192.168.3.16 to 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:24 RHEL76 dhcpd: DHCPREQUEST for 192.168.3.16 (192.168.3.1) from 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:24 RHEL76 dhcpd: DHCPACK on 192.168.3.16 to 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:24 RHEL76 xinetd[7426]: START: tftp pid=8860 from=192.168.3.16Mar 7 21:19:24 RHEL76 in.tftpd[8861]: Error code 8: User aborted the transferMar 7 21:19:25 RHEL76 in.tftpd[8862]: Client 192.168.3.16 finished images/clonezilla/grubx64.efiMar 7 21:19:25 RHEL76 in.tftpd[8872]: Client 192.168.3.16 finished /images/clonezilla/grub.cfgMar 7 21:19:25 RHEL76 in.tftpd[8877]: Client 192.168.3.16 finished /images/clonezilla/grub.cfgMar 7 21:19:30 RHEL76 in.tftpd[8879]: Client 192.168.3.16 finished images/clonezilla/live/vmlinuzMar 7 21:19:39 RHEL76 in.tftpd[8880]: Client 192.168.3.16 finished images/clonezilla/live/initrd.imgMar 7 21:19:45 RHEL76 dhcpd: DHCPDISCOVER from 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:45 RHEL76 dhcpd: DHCPOFFER on 192.168.3.16 to 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:45 RHEL76 dhcpd: DHCPREQUEST for 192.168.3.16 (192.168.3.1) from 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:45 RHEL76 dhcpd: DHCPACK on 192.168.3.16 to 00:0c:29:4e:1a:31 via ens34Mar 7 21:19:50 RHEL76 in.tftpd[8882]: Client 192.168.3.16 finished /images/clonezilla/live/filesystem.squashfs

jbod.sh在clonezilla自动执行的结果大概如下图所示:

(截图为虚拟机内部测试运行的结果,由于没有RAID卡所以会报未找到,实际在服务器上跑的时候下面会输出JBOD使之类的日志)

图片

关于clonezilla的PXE引导说明,以及clonezilla支持的内核参数说明,可以参考如下两个官方文档:

https://clonezilla.org/livepxe.php  https://clonezilla.org/fine-print-live-doc.php?path=clonezilla-live/doc/99_Misc/00_live-boot-parameters.doc

接下来就轮到使用PXE + Kickstart来批量自动部署ESXi了。

RAID配成JBOD之后,系统已经能认到SSD了,现在该批量部署ESXi了。

1,准备好esxi的ISO,把ISO里面的所有文件都放入RHEL7虚拟机的/ var / lib / tftpboot / images / esx60u3目录。然后把ISO自带的efi文件变成到当前目录。

cd /var/lib/tftpboot/images/esxi60u3cp efi/boot/bootx64.efi .

2,编辑/var/lib/tftpboot/images/esx60u3/boot.cfg,这个文件是esxi引导efi的配置文件。

主要需要修改2个地方,第一个是把kernel =和modules =后面跟的内容的/全部去掉,modules里面里面的的/比较多,如果编辑用的是vim,可以用如下命令快速全部替换: %s g,或者用如下命令sed -i's g'/var/lib/tftpboot/images/esxi60u3/boot.cfg;第二个是添加kickstart路径的参数,在kernelopt = runweasel后面加上ks = nfs://192.168.3.1/nfs/pxe/ks_esxi.cfg,即让安装程序从192.168.3.1的/nfs/pxe/ks_esxi.cfg获取kickstart自动安装配置文件。

修改完之后保存,文件内容大概类似如下这样:

bootstate=0title=Loading ESXi installertimeout=2kernel=tboot.b00kernelopt=runweasel ks=nfs://192.168.3.1/nfs/pxe/ks_esxi.cfgmodules=b.b00 --- jumpstrt.gz --- useropts.gz --- k.b00 --- chardevs.b00 --- a.b00 --- user.b00 --- uc_intel.b00 --- uc_amd.b00 --- sb.v00 --- s.v00 --- lsi_mr3.v00 --- lsi_msgp.v00 --- lsi_msgp.v01 --- bnxtnet.v00 --- net_tg3.v00 --- brcmfcoe.v00 --- elxnet.v00 --- ima_be2i.v00 --- lpfc.v00 --- scsi_be2.v00 --- i40en.v00 --- igbn.v00 --- ixgben.v00 --- concrete.v00 --- filetran.v00 --- fupb.v00 --- fwupdate.v00 --- immpasst.v00 --- pciinfo.v00 --- nmlx4_co.v00 --- nmlx4_en.v00 --- nmlx4_rd.v00 --- nmlx5_co.v00 --- qedentv.v00 --- qedf.v00 --- scsi_qed.v00 --- misc_cni.v00 --- net_bnx2.v00 --- net_bnx2.v01 --- net_cnic.v00 --- qlnative.v00 --- scsi_bnx.v00 --- scsi_bnx.v01 --- mtip32xx.v00 --- ata_pata.v00 --- ata_pata.v01 --- ata_pata.v02 --- ata_pata.v03 --- ata_pata.v04 --- ata_pata.v05 --- ata_pata.v06 --- ata_pata.v07 --- block_cc.v00 --- ehci_ehc.v00 --- emulex_e.v00 --- weaselin.t00 --- esx_dvfi.v00 --- esx_ui.v00 --- ima_qla4.v00 --- ipmi_ipm.v00 --- ipmi_ipm.v01 --- ipmi_ipm.v02 --- lsu_hp_h.v00 --- lsu_lsi_.v00 --- lsu_lsi_.v01 --- lsu_lsi_.v02 --- lsu_lsi_.v03 --- lsu_lsi_.v04 --- misc_dri.v00 --- net_e100.v00 --- net_e100.v01 --- net_enic.v00 --- net_forc.v00 --- net_igb.v00 --- net_mlx4.v00 --- net_mlx4.v01 --- net_nx_n.v00 --- net_vmxn.v00 --- nvme.v00 --- ohci_usb.v00 --- rste.v00 --- sata_ahc.v00 --- sata_ata.v00 --- sata_sat.v00 --- sata_sat.v01 --- sata_sat.v02 --- sata_sat.v03 --- sata_sat.v04 --- scsi_aac.v00 --- scsi_adp.v00 --- scsi_aic.v00 --- scsi_fni.v00 --- scsi_hps.v00 --- scsi_ips.v00 --- scsi_meg.v00 --- scsi_meg.v01 --- scsi_meg.v02 --- scsi_mpt.v00 --- scsi_mpt.v01 --- scsi_mpt.v02 --- scsi_qla.v00 --- uhci_usb.v00 --- vsan.v00 --- vsanheal.v00 --- vsanmgmt.v00 --- xhci_xhc.v00 --- tools.t00 --- lnvcusto.v00 --- xorg.v00 --- imgdb.tgz --- imgpayld.tgzbuild=updated=0

3,修改esxi的kickstart配置文件/nfs/pxe/ks_esxi.cfg,内容很简单,这个配置只定义了接受用户协议,在第一块硬盘执行覆盖安装,设置root密码为abcd1234并在安装完成后自动重启。

accepteulainstall --firstdisk --overwritevmfsrootpw abcd1234reboot

4,修改/etc/dhcp/dhcpd.conf,由原来的文件名“ images / clonezilla / grubx64.efi”改成文件名“ images / esxi60u3 / bootx64.efi”,然后重启dhcpd服务。dhcpd服务重启完之后,机器在clonezilla执行完jbod.sh重新启动之后就会开始自动获取esxi的efi引导文件,并开始自动进行esxi的批量安装部署了。

在安装完成之后服务器会自动重启,然后会自动引导刚安装完的esxi,因为安装esxi之后会生成esxi的efi引导项,服务器在没有引导项的时候才会从网卡PXE启动。

图片

最后来一下一下,这次实施主要是利用PXE,先引导一个实时模式的Linux自动运行storcli来修改RAID配置,然后利用PXE引导esxi安装程序通过kickstart进行自动esxi安装部署。

storcli的功能非常强大,这里中只用到了它开始RAID控制器jbod模式的功能,划分RAID配VD等这些都不在话下,有兴趣可以看一下broadcom官网的文档。

“ zhufeng的小站”授权转载

觉得本文有用,请转发或点击“在看”,让更多同行看到



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3