1. PXE+Kickstart无人值守部署原理
想象一下这样的场景:公司新采购了50台服务器,需要全部安装CentOS系统。传统方式需要运维人员带着U盘或光盘,一台台机器手动安装,不仅效率低下还容易出错。而PXE+Kickstart组合就像一位不知疲倦的机器人管家,能自动完成所有安装工作。
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 --url="http://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] name=Local Repository baseurl=http://192.168.1.10/centos7 enabled=1 gpgcheck=0 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 initrd=initrd.img ks=http://192.168.1.10/ks.cfg EOF6.2 客户端验证
启动客户端后,你应该会看到这样的流程:
- 获取IP地址(DHCP)
- 下载pxelinux.0(TFTP)
- 加载内核和initrd
- 自动开始安装
我曾遇到过一个典型问题:客户端卡在TFTP传输。最后发现是防火墙没关,所以切记检查服务端口是否畅通。
7. 生产环境优化建议
7.1 安全加固方案
虽然我们测试时关闭了防火墙,但生产环境应该:
# 只开放必要端口 firewall-cmd --permanent --add-service=dhcp firewall-cmd --permanent --add-service=tftp firewall-cmd --permanent --add-service=http 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小时。现在养成了先用虚拟机测试的好习惯。