从零搭建PXE+Kickstart无人值守Linux批量部署平台

📅 2026/7/16 9:57:18
从零搭建PXE+Kickstart无人值守Linux批量部署平台
1. PXEKickstart无人值守部署原理想象一下这样的场景公司新采购了50台服务器需要全部安装CentOS系统。传统方式需要运维人员带着U盘或光盘一台台机器手动安装不仅效率低下还容易出错。而PXEKickstart组合就像一位不知疲倦的机器人管家能自动完成所有安装工作。PXE预启动执行环境相当于一个网络启动器让裸机通过网卡就能启动安装程序。这就像给没有操作系统的电脑插上了网络翅膀直接从服务器获取启动文件。而Kickstart则是自动应答脚本预先定义好分区方案、软件包选择等配置彻底告别安装过程中的手动交互。实际工作中我遇到过最夸张的案例是某游戏公司需要同时部署300台服务器。使用这套方案后从开始部署到全部完成只用了不到2小时而传统方式至少需要3天。2. 基础环境搭建2.1 网络拓扑规划在生产环境中我建议采用这样的网络架构[PXE Server] ├── [DHCP服务] ├── [TFTP服务] ├── [HTTP/NFS存储] └── [待装机客户端群]关键点在于确保PXE服务器能同时提供DHCP、TFTP和文件共享服务。我曾见过有人把服务分散在多台机器导致安装失败所以推荐所有服务部署在同一台服务器上。2.2 系统准备以CentOS 7为例先准备好基础环境# 关闭防火墙和SELinux生产环境请谨慎 systemctl stop firewalld setenforce 0 # 安装必要工具 yum install -y vim net-tools3. 核心服务配置3.1 DHCP服务配置DHCP服务就像IP地址分发员告诉客户端去哪里获取启动文件。这是我的生产环境配置模板yum install -y dhcp cat /etc/dhcp/dhcpd.conf EOF subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; option domain-name-servers 8.8.8.8; filename pxelinux.0; # 关键引导文件 next-server 192.168.1.10; # PXE服务器IP } EOF systemctl start dhcpd3.2 TFTP服务部署TFTP负责传输小文件就像快递小哥送启动文件yum install -y tftp-server xinetd # 配置tftp sed -i s/disable.*/disable no/ /etc/xinetd.d/tftp systemctl restart xinetd4. 安装文件准备4.1 系统镜像部署我习惯用HTTP方式共享镜像比FTP更稳定mkdir -p /var/www/html/centos7 mount /dev/cdrom /mnt cp -rf /mnt/* /var/www/html/centos7/4.2 启动文件配置这些文件就像系统安装的钥匙# 复制内核文件 cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ # 安装引导程序 yum install -y syslinux cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/5. Kickstart自动化配置5.1 生成应答文件使用system-config-kickstart工具生成基础配置后我通常会手动优化# 示例ks.cfg关键配置 lang en_US keyboard us timezone Asia/Shanghai url --urlhttp://192.168.1.10/centos7 rootpw --iscrypted $1$加密密码 clearpart --all --initlabel autopart %packages ^minimal %end5.2 高级定制技巧通过%post段可以实现安装后自动化%post # 自动配置YUM源 cat /etc/yum.repos.d/local.repo EOF [local] nameLocal Repository baseurlhttp://192.168.1.10/centos7 enabled1 gpgcheck0 EOF # 部署监控agent curl -s http://192.168.1.10/scripts/deploy_agent.sh | bash %end6. 服务联调测试6.1 PXE菜单配置创建引导菜单文件mkdir /var/lib/tftpboot/pxelinux.cfg cat /var/lib/tftpboot/pxelinux.cfg/default EOF default linux prompt 0 label linux kernel vmlinuz append initrdinitrd.img kshttp://192.168.1.10/ks.cfg EOF6.2 客户端验证启动客户端后你应该会看到这样的流程获取IP地址DHCP下载pxelinux.0TFTP加载内核和initrd自动开始安装我曾遇到过一个典型问题客户端卡在TFTP传输。最后发现是防火墙没关所以切记检查服务端口是否畅通。7. 生产环境优化建议7.1 安全加固方案虽然我们测试时关闭了防火墙但生产环境应该# 只开放必要端口 firewall-cmd --permanent --add-servicedhcp firewall-cmd --permanent --add-servicetftp firewall-cmd --permanent --add-servicehttp firewall-cmd --reload7.2 批量部署技巧对于不同硬件配置的服务器可以采用这样的策略pxelinux.cfg/ ├── default # 通用配置 ├── 01-aa-bb-cc-dd-ee-ff # 按MAC地址定制 └── 192.168.1.x # 按IP段定制8. 常见故障排查8.1 网络引导失败典型症状客户端报错PXE-E51: No DHCP or proxyDHCP offers received 解决方法检查DHCP服务是否运行确认网络连通性验证DHCP配置中的next-server参数8.2 安装过程中断可能原因Kickstart文件语法错误软件包依赖问题磁盘分区配置冲突查看安装日志tail -f /var/log/anaconda/journal.log记得第一次部署时我因为分区配置错误导致安装卡住2小时。现在养成了先用虚拟机测试的好习惯。