一、自动化部署原理
1、PXE原理
PXE(Preboot execution Environment),即全程预启动执行环境,也称之为预执行环境。此环境提供了一种使用网络接口启动计算机的机制。这种机制使计算机的启动不用依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。
2、Kickstart
Kickstart是一种无人值守的安装方式。其工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成ks.cfg文件。在安装过程中,安装程序会首先去查找ks.cfg这个文件,当找到合适的参数时,就会采用所找到的参数进行进一步的安装,然而,当没有找到合适参数的时候,就需要安装人员进行手工干预填参了。
3、DHCP
dhcp用来给将要安装系统的客户主机分配IP地址,也可以指定文件位置。
4、HTTPD
httpd,即超文本传输协议,本服务主要提供系统镜像源以及kickstart的配置文件等。
5、TFTP
本服务主要用来存放PXE的相关文件,例如:系统引导文件。
6、部署流程
(1)PXE客户机发出DHCP请求,向DHCP服务器申请IP地址。
(2)DHCP服务器响应PXE客户机的请求,自动从IP地址池中分配一个IP地址给PXE客户机,并且告知PXE客户机:TFTP服务器的IP地址和PXE引导程序文件pxelinux.0,默认存放在TFTP服务的共享目录/var/lib/tftpboot/中。
(3)PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。
(4)TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。
(5)PXE客户机向TFTP服务器发起获取ldlinux.c32和pxeilnux.cfg/default的PXE引导配置文件请求。
(6)TFTP服务器响应PXE客户机的请求,将ldlinux.c32和pxeilnux.cfg/default文件传输给PXE客户机。PXE客户端展示pxelinux.cfg/default文件中的引导项,由用户指定选择其中一个引导项,或等待默认时间后根据文件配置中的默认引导项进行自动引导。
(7)PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的vmlinuxz压缩的虚拟机linux内核文件的请求。
(8)TFTP服务器响应PXE客户机的请求,将其共享的vmlinuxz文件传输给PXE客户机。
(9)PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的initrd.img临时文件系统文件的请求。
(10)TFTP服务器响应PXE客户机的请求,将其共享的initrd.img文件传输给PXE客户机。
(11)PXE客户机根据default文件向http、htp、nfs等网络共享服务发起获取对应ks.cfg文件。
(12)PXE客户机读取ks.cfg文件,其参数包括系统语言、时区、root用户密码、磁盘分区、安装文件位置、完成安装后自动重启等。
二、自动化部署流程
1、实验环境
PXE server:
系统:RHEL7.9
IP地址:172.25.254.10
2、基础配置
#配置vmset.sh脚本文件,可通过此脚本快速配置IP地址、DNS、网关、主机名、解析
[root@nginx ~]# cat /bin/vmset.sh
#!/bin/bash
rm -fr /etc/sysconfig/network-scripts/ifcfg-$1
cat > /etc/sysconfig/network-scripts/ifcfg-$1 <<EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=$1
DEVICE=$1
ONBOOT=yes
IPADDR=$2
PREFIX=24
GATEWAY=172.25.254.2
DNS1=114.114.114.114
EOF
nmcli connection reload
nmcli connection up $1
hostnamectl set-hostname $3
cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
$2 $3
EOF
#给脚本添加执行权限
[root@nginx ~]# chmod +x /bin/vmset.sh
#执行脚本,配置相应信息
[root@nginx ~]# vmset.sh ens33 172.25.254.10 pxe-server
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@nginx ~]# bash
[root@pxe-server ~]#
3、关闭防火墙及selinux
#firewalld
#disable 关闭开机自启
#--now 立刻关闭
[root@pxe-server ~]# systemctl disable --now firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#selinux
[root@pxe-server ~]# grubby --update-kernel ALL --args selinux=0
[root@pxe-server ~]# reboot #重启生效
[root@pxe-server ~]# getenforce
Disabled
3、配置本地yum源
#挂载镜像源
[root@pxe-server ~]# mount /dev/sr0 /rhel7/
mount: /dev/sr0 is write-protected, mounting read-only
#配置yum本地源
[root@pxe-server yum.repos.d]# cat base.repo
[repo]
name=repo
baseurl=file:///rhel7
gpgcheck=0
4、kickstart部署
在rhel7上,我们可以通过图形界面进行kickstart的配置
#下载system-config-kickstart软件包
[root@pxe-server ~]# yum install system-config-kickstart -y
然后执行system-config-kickstart命令进入图形界面,进行配置
生成ks.cfg文件到/root目录后,我们还可以添加一些内容,如安装httpd软件包
5、网页访问ks.cfg
#下载httpd软件包
[root@pxe-server ~]# yum install httpd -y
#将ks.cfg文件移动到httpd服务的默认发布目录/var/www/html
[root@pxe-server ~]# cp ks.cfg /var/www/html/
#启动httpd服务,并设置开机自启动
[root@pxe-server ~]# systemctl enable --now httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
然后我们通过浏览器访问IP/ks.cfg,即可看到ks.cfg文件内容
6、网页访问镜像源
#将我们挂载镜像的目录/rhel7链接到httpd默认发布目录/var/www/html
[root@pxe-server ~]# ln -s /rhel7/ /var/www/html/
同理,我们通过可以通过浏览器访问IP/rhel7,即可看到我们挂载镜像源的文件内容
7、部署DHCP服务
#首先,下载dhcp安装包
[root@pxe-server ~]# yum install dhcp -y
#进入dhcp配置文件,我们可以发现仅有注释,没有任何配置内容
[root@pxe-server ~]# cd /etc/dhcp/
[root@pxe-server dhcp]# vim dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#我们可以根据注释,将/usr/share/doc/dhcp*/dhcpd.conf.example这个文件复制到我们默认的配置目录中
#cp前的\即转义符,表示使用cp原命令,而不是alias命名后的命令。-f表示强制覆盖拷贝
[root@pxe-server dhcp]# \cp -f /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#然后进入/etc/dhcp/dhcpd.conf配置文件进行一些修改
[root@pxe-server ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "example.org";
option domain-name-servers 114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 172.25.254.0 netmask 255.255.255.0{ #DHCP地址池子网,子网掩码
range 172.25.254.30 172.25.254.40; #DHCP地址池范围
option routers 172.25.254.2; #网关
next-server 172.25.254.10; #引导服务tftp的地址
filename "pxelinux.0"; #引导程序文件名
}
#修改完配置文件后,启动DHCP服务,并设置开机自启动
[root@pxe-server ~]# systemctl enable --now dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
8、部署TFTP服务
#同样,我们要先下载安装包,这里需要下载的是tftp-server这个安装包
[root@pxe-server ~]# yum search tftp
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
================================ N/S matched: tftp ================================
syslinux-tftpboot.noarch : SYSLINUX modules in /var/lib/tftpboot, available for
: network booting
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)
Name and summary matches only, use "search all" for everything.
[root@pxe-server ~]# yum install tftp-server -y
#在rhel7中,共享pxelinux.0数据文件的网络服务是由syslinux这个软件包所提供的
[root@pxe-server ~]# yum install syslinux -y
#下载完成后,我们需要将pxelinux.0以及/rhel7/isolinux/中的所有文件移动到/var/lib/tftpboot/下
[root@pxe-server ~]# cd /var/lib/tftpboot/
[root@pxe-server tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@pxe-server tftpboot]# cp /rhel7/isolinux/* .
[root@pxe-server tftpboot]# ll
total 112148
-r--r--r-- 1 root root 2048 Aug 4 20:46 boot.cat
-r--r--r-- 1 root root 84 Aug 4 20:46 boot.msg
-r--r--r-- 1 root root 321 Aug 4 20:46 grub.conf
-r--r--r-- 1 root root 51211620 Aug 4 20:46 initrd.img
-r--r--r-- 1 root root 24576 Aug 4 20:46 isolinux.bin
-r--r--r-- 1 root root 3166 Aug 4 20:46 isolinux.cfg
-r--r--r-- 1 root root 190896 Aug 4 20:46 memtest
-rw-r--r-- 1 root root 26743 Aug 4 20:46 pxelinux.0
-r--r--r-- 1 root root 186 Aug 4 20:46 splash.png
-r--r--r-- 1 root root 2438 Aug 4 20:46 TRANS.TBL
-r--r--r-- 1 root root 56427369 Aug 4 20:46 upgrade.img
-r--r--r-- 1 root root 153104 Aug 4 20:46 vesamenu.c32
-r-xr-xr-x 1 root root 6769496 Aug 4 20:46 vmlinuz
#然后,在/var/lib/tftpboot/中创建pxelinux.cfg目录,并将isolinux.cfg引导文件模板拷贝到此目录中,并改名为default
[root@pxe-server tftpboot]# mkdir pxelinux.cfg
[root@pxe-server tftpboot]# mv isolinux.cfg pxelinux.cfg/default
然后,对/var/lib/tftpboot/pxelinux.cfg/default文件进行修改
修改完成后,由于此文件没有修改权限,我们通过:x!或者:wq!强制保存退出即可,然后启动tftp服务并设置开机自启动
[root@pxe-server tftpboot]# systemctl enable --now tftp
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
三、自动化部署装机验证
因为我们在PXE服务器中已经设置了DHCP服务,所以一定要注意,关掉虚拟机软件中的DHCP服务,否则会与我们服务器中的DHCP产生冲突
我们新建一台rhel7的虚拟机,并且删除CD/DVD(SATA)
然后通过打开电源时进入固件,开机后就会进入BIOS模式
进入BIOS界面后,我们切到Boot,将Net'work boot from Intel E1000移动到首行,即通过网卡模式启动
然后保存退出,启动虚拟机
启动后,就能够进行全自动化装机,我们等待装好即可。
安装完成后,进行验证即可