qq机器人 PXE + Kickstart 无人值守批量部署系统
在服务器运维场景中,手动逐台安装操作系统不仅效率极低,还容易出现配置不一致的人为失误,PXE + Kickstart 组合方案是行业内成熟度最高的自动化批量部署方案,可实现数百台服务器同时无人值守完成系统安装,全程无需人工介入,大幅降低运维人力成本。
一、方案核心原理
整套部署系统基于经典网络引导逻辑搭建,核心流程可分为5步:
待安装服务器从网卡启动,通过DHCP协议向网络中的DHCP服务器发送请求,获取IP地址与PXE引导文件地址
服务器通过TFTP协议从指定服务器下载PXE引导程序、内核镜像与初始化文件
引导程序加载完成后,自动通过HTTP协议拉取预定义的Kickstart无人值守配置文件
服务器根据Kickstart文件中的规则,自动完成磁盘分区、语言设置、软件包选择、密码配置等全流程操作
系统安装完成后自动执行后置脚本,完成初始化配置、安全加固、业务环境预装,最终自动重启进入可用状态
二、环境部署前置准备
部署前需提前准备一台CentOS 7/9系统的服务器作为部署主控机,关闭系统自带防火墙与SELinux避免端口拦截,同时确认服务器网卡处于同网段可广播环境,主控机需配置静态IP地址,示例网段规划为:
主控机静态IP:192.168.100.10
DHCP地址池范围:192.168.100.100 - 192.168.100.200
待部署系统镜像版本:CentOS Stream 9
三、分步搭建全流程
1. 安装核心依赖服务
一次性安装DHCP、TFTP、HTTP等所有必需组件,避免后续逐个配置出现依赖缺失:
bash
dnf install -y dhcp tftp-server httpd syslinux xinetd
2. 配置TFTP服务
TFTP用于传输轻量引导文件,修改配置文件开启服务并设置文件目录权限:
bash
vim /etc/xinetd.d/tftp
# 修改配置项:
server 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
}
启动服务并设置开机自启:
bash
systemctl start xinetd tftp
systemctl enable xinetd tftp
3. 配置DHCP服务
编辑DHCP配置文件,指定PXE引导相关参数,让客户端获取IP后自动定位引导文件:
bash
vim /etc/dhcp/dhcpd.conf
# 写入核心配置:
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.100 192.168.100.200;
option subnet-mask 255.255.255.0;
option routers 192.168.100.1;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.100.10;
filename "pxelinux.0";
}
启动DHCP服务并验证端口监听状态:
bash
systemctl start dhcpd
systemctl enable dhcpd
netstat -unlp | grep 67
4. 部署PXE引导文件
将syslinux中的核心引导文件复制到TFTP目录,同时导入系统镜像中的内核与初始化文件:
bash
# 复制基础引导文件
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/
# 挂载系统镜像并复制内核文件
mount /dev/cdrom /mnt
cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/
# 创建引导配置目录
mkdir /var/lib/tftpboot/pxelinux.cfg
编写引导菜单配置文件,指定Kickstart文件的HTTP地址:
bash
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
prompt 0
MENU TITLE PXE Auto Install System
label auto-install
menu label^Auto Install CentOS Stream 9
kernel vmlinuz
append initrd=initrd.img inst.ks=http://192.168.100.10/ks.cfg quiet
5. 配置HTTP服务托管镜像与Kickstart文件
将系统镜像全部解压到HTTP站点目录,同时编写Kickstart无人值守配置文件:
bash
mkdir /var/www/html/centos9
cp -r /mnt/* /var/www/html/centos9/
编写ks.cfg配置文件,定义全流程自动化规则:
bash
vim /var/www/html/ks.cfg
install
url --url="http://192.168.100.10/centos9"
lang zh_CN.UTF-8
keyboard us
timezone Asia/Shanghai --isUtc
rootpw --iscrypted $6$xyz...# 替换为自己加密后的root密码
bootloader --location=mbr
clearpart --all --initlabel
part /boot --fstype="xfs" --size=1024
part swap --size=4096
part / --fstype="xfs" --size=10000 --grow
%packages
@base
@core
vim
net-tools
%end
%post
systemctl disable firewalld
yum install -y zsh
echo "System Auto Deploy Success" > /etc/motd
%end
reboot
启动HTTP服务并验证文件可正常访问:
bash
systemctl start httpd
systemctl enable httpd
四、部署测试与常见问题排查
所有服务配置完成后,将待安装服务器设置为网卡优先启动,服务器会自动进入引导流程,全程无需人工操作即可完成系统安装。
常见故障快速定位方案:
服务器无法获取IP:检查DHCP服务状态,确认主控机与客户端处于同一广播网段
TFTP引导文件下载失败:排查xinetd服务是否正常运行,确认防火墙未拦截UDP 69端口
Kickstart文件加载失败:验证HTTP服务可正常访问,检查ks.cfg文件路径与配置语法是否正确
五、生产环境优化方案
在大规模服务器集群场景中,可通过多网卡绑定提升大流量镜像传输速度,搭配Ansible实现安装完成后的批量初始化配置,同时为不同业务线编写独立Kickstart模板,实现不同角色服务器的差异化自动部署,单台主控机最高可支持200台服务器同时并行安装,部署效率相比手动安装提升10倍以上。
需要我为你提供适配CentOS 7、Ubuntu双系统的Kickstart模板吗?你可以直接替换使用,快速适配不同发行版的批量部署需求。