酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

 ks凯时客户端登录     |      2022-12-09 15:08

  甜橙金融运维工程师,多年IDC运维经验。擅长IDC中服务器批量高效快速集成交付,精通各品牌型号服务器硬件产品及维护。

  PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。

  在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。

  严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC),即网卡中必须要有PXE Client。

  PXE协议可以使计算机通过网络启动。此协议分为Client端和Server 端,而PXE Client则在网卡的ROM中。

  当计算机引导时,BIOS把PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行。

  运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器会给PXE Client(将要安装系统的主机)分配一个IP地址,由于是给PXE Client分配IP地址,所以在配置DHCP服务器时需要增加相应的PXE设置。

  当计算机开机时第一次登录网络的时候,发现本机上没有任何IP地址设定。PXE Client会从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,源IP地址是0.0.0.0,发送DHCP discover发现信息来寻找DHCP服务器,即向目标IP地址是255.255.255.255发送特定的广播信息。

  网络上每一台安装了TCP/IP协议的主机都会接收到这个广播信息,但只有DHCP服务器才会做出响应。

  DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址和其他设置的DHCP offer信息。

  DHCP offer提供信息包括pxelinux启动程序(TFTP)位置,以及PXE配置文件所在位置(该文件一般是放在一台TFTP服务器上)。

  DHCP客户端接受到DHCP offer提供信息之后,选择第一个接收到的提供信息,然后以广播的方式回答一个DHCP request请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。

  当DHCP服务器收到DHCP客户端回答的DHCP request请求信息之后,便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户端可以使用它提供的IP地址。

  另外,除了DHCP客户机选中的服务器外,其他的DHCP服务器将收回曾经提供的IP地址。这是第一次初始化网络。

  客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通 过什么安装介质来安装Linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络(这是第二次初始化网络),并定位安装源位置。

  接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

  PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序,从而进行两次获取IP地址过程,但IP地址在DHCP的租期内是一样的。

  Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。

  如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。

  所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。

  等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

  DHCP是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

  所有客户机的IP地址设定资料都由DHCP服务器集中管理,并负责处理客户端的DHCP请求;而客户端则会使用从服务器分配下来的IP地址。

  自动分配(Automatic Allocation),当DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址。

  动态分配(Dynamic Allocation),当DHCP客户端第一次从DHCP服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP客户端就得释放这个IP地址,以给其他客户端使用。

  注意:在实际生产环境中,可能会有多个网络环境而且环境不会互通,可以结合自己公司的情况进行优化:

  物理机一般不止一块网卡,为了确保主机能分配到地址,最好指定网卡启动dhcp

  默认租约时间要设小一点,因为是用来做pxe安装大量服务器系统,在ip地址有限的情况(本段地址可能已经被用掉很多地址,剩下的不够被所有机器分配)下,尽量缩小默认租约时间,以防止安装时第一批机器装完,IP地址没有释放,第二批机器分配不到IP地址的情况

  条件足够的情况下,最好专门分配一个vlan用于装机,这样可以防止很多意外发生。

  TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

  TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。

  由于我们要获取安装系统服务的yum源以及内核文件,虚拟根文件,这些文件都是大文件,在传输时我们必须保证其能够安全传输,所以我们选择了HTTP服务,当然了,选择FTP服务也是可以的。

  HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。是互联网上广泛试用的协议。是用于从务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分等。

  HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

  syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。

  它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。不仅支持采用BIOS结构的主板,而且从6.0版也开始支持采用EFI结构的新型主板。

  通常,我们在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,kickstart就诞生了。

  使用这种kickstart,只需事先定义好一个Kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。

  方法1:每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于 /root/anaconda-ks.cfg)

  方法2:Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己 的kickstart配置文件。kickstart配置工具命令为system-config-kickstart

  方法3:阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。

  键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项

  每个项目都由关键字来识别;关键字可跟一个或多个参数;如果某选项后面跟随了一个等号(=),它后面就必须指定一个值。

  install(可选) 明确指定系统此次进行的是全新安装系统,而不是升级upgrade;是默认项;

  harddrive (可选) 以硬盘分区中包含的镜像为源(安装树)安装新系统;当以该种方式安装系统时,即使指定clearpart --all项,源所在分区也不会被重新抹去;

  --append= 可以指定内核参数,要指定多个参数,使用空格分隔它们。

  partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。

  clearpart (可选)在建立新分区前清空系统上原有的分区表,默认不删除分区;

  drivedisk (可选)如果使用特殊存储方式时,需要指定驱动程序盘位置以便加载存储驱动;

  reboot (可选) 在系统成功安装完成后默认自动重启系统(kickstart方法时);

  使用 reboot 选项可能会导致安装的死循环,这依赖于安装介质和方法。需要特别注意;

  其他选项还有shutdown、poweroff,需要使用请自行参考官方文档。

  graphical (可选)默认值,在图形模式下进行kickstart方式安装;

  --skip 跳过key设置,不进行设置;如果不设置可能跳转到交互模式让用户选取动作;

  lang (必需)设置安装过程使用的语言及系统的缺省语言;文本模式安装时可能不支持某些语言(中、韩...),所以可能仍以默认的英文方式安装;默认en_us,装中文时,需要后期%packages部分装上中文支持组件;

  network (可选) 配置网络信息;在网络安装(NFS/HTTP/FTP)时必须指定;

  --device= 设置安装时激活来进行系统安装的网卡设备;该参数只在kickstart文件为本地文件时有效;若kickstart配置文件在网络上,安装程序会先初始化网卡然后去寻找kickstart文件;

  --noipv6 禁用该设备的ipv6功能 如将网络模式设置为静态模式,则必须在一行内写上ip,netmask、dns、gateway等信息;

  xconfig (可选)配置X window ;如果不给出选项,在安装过程中需要手动调整设置;当然不安装X时不应该添加该项;

  --depth= 设置显示色深;可用值有8/16/24/32;确保设置值适合于显示设备;

  mntpoint:挂载点,是在创建普通分区时指定新分区挂载位置的项;挂载点需要格式正确

  raid.id: 表示创建的分区类型为raid型;必须用id号进行唯一区别;

  pv.id: 表示所创建的分区类型为LVM型;必须用唯一id号进行区别;

  --grow 让分区自动增长利用可用的剩余磁盘空间,或是增长到设置的maxsize值;

  --maxsize 设置分区自动增长(grow)时的最大容量值,以M为单位,但不能写单位;

  --noformat 设置不格式化指定的分区,在跟—onpart一同使用时,可以避免删除原有分区上的数据,在新安装的系统中保留使用数据;

  --asprimary 强制制定该分区为主分区;若指定失败,分区会失败,导致安装停止;

  --start 指定分区以磁盘上那个磁道开始;需要跟--ondisk参数一块使用;

  挂载点: 选取根/时,注意尽量避免/boot在RAID内,除非为RAID1;

  --byte-pre-inode= 设置该RAID分区上inode大小;若分区文件系统类型不支持该参数,会静默忽略参数;

  --fsoptions= 设置挂载该文件系统时自定义的一些参数,参数写入fstab文件;

  --fsoptions= 设置挂载该文件系统时自定义的一些参数,参数写入fstab文件;

  可以根据自己所需进行调整,ks文件需要用.cfg结尾,必须与default文件中指定的位置相同。

  # 创建分区,如果分区比较简单,可以放在上面,分区比较多的,可以像这样写脚本放在%pre块内

  ip.sh、ip.txt、zabbix_agent.sh是安装后所需要执行的脚本,配置在%post块内,使用wget下载下来,再进行执行。可以自行编写脚本实现功能,比如根据机器序列号进行IP配置,进行内核参数调优,权限设置,加入zabbix监控等等。

  以下附加一份IP配置脚本,因为比较特殊,需要在网卡上配置vlan,打vlan标签。

  上面具体说了有关于pxe+kickstart的原理,以及linux的自动化安装配置。下面简单说下esxi的自动化配置,原理是一样的。