1. 项目背景与核心价值
在IT基础设施运维领域,批量部署操作系统一直是项既基础又关键的工作。传统的光驱/U盘安装方式在面对几十上百台服务器时显得力不从心,而PXE(Preboot eXecution Environment)配合Kickstart的方案恰好能解决这个痛点。这套组合拳可以实现:
- 裸机从网络启动自动安装系统
- 无需人工干预的无人值守部署
- 同时为多台设备并行装机
- 统一化的系统配置标准
我在数据中心运维工作中,曾用这套方案在3小时内完成了200台服务器的CentOS部署,相比传统方式效率提升近20倍。下面将完整还原这个实战方案的技术细节和避坑指南。
2. 基础环境搭建
2.1 网络拓扑设计
典型部署需要以下组件:
- DHCP服务器:分配IP地址并告知PXE引导文件位置
- TFTP服务器:存放引导文件和内核镜像
- HTTP/FTP/NFS:存储系统安装文件和kickstart配置
- 交换机:建议使用千兆网络环境
关键提示:生产环境务必隔离PXE网络,避免影响正常业务网段。可通过VLAN划分或独立物理网络实现。
2.2 服务组件安装
以CentOS 7为例,基础软件包安装命令:
yum install -y dhcp tftp-server httpd syslinux各组件作用说明:
- dhcp:动态主机配置协议服务
- tftp-server:轻量级文件传输服务
- httpd:提供安装源访问
- syslinux:包含PXE引导所需的文件
3. DHCP配置详解
3.1 主配置文件模板
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; # PXE关键配置 filename "pxelinux.0"; next-server 192.168.1.10; # TFTP服务器IP }3.2 特殊参数说明
filename:指定PXE引导文件名next-server:指向TFTP服务器地址- 地址池范围应根据实际设备数量调整
常见问题:如果客户端获取不到IP,先检查防火墙是否放行了67/68端口(UDP)。
4. TFTP服务配置
4.1 目录结构准备
mkdir -p /var/lib/tftpboot/pxelinux.cfg cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/ cp /mnt/isolinux/vmlinuz /var/lib/tftpboot/ cp /mnt/isolinux/initrd.img /var/lib/tftpboot/4.2 引导菜单配置
创建默认配置文件/var/lib/tftpboot/pxelinux.cfg/default:
default menu.c32 prompt 0 timeout 30 label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img ks=http://192.168.1.10/ks.cfg5. Kickstart无人值守配置
5.1 配置文件生成
最快的方式是利用已有系统生成模板:
cat /root/anaconda-ks.cfg > /var/www/html/ks.cfg5.2 关键参数解析
# 语言和键盘设置 lang en_US keyboard us # 网络配置 network --bootproto=dhcp --device=eth0 # 分区方案(根据实际需求调整) clearpart --all --initlabel part /boot --fstype="xfs" --size=500 part swap --size=4096 part / --fstype="xfs" --size=1 --grow # 软件包选择 %packages @^minimal @core vim-enhanced %end # 后安装脚本 %post echo "Hello from Kickstart!" > /etc/motd %end6. 安装源准备
6.1 挂载ISO镜像
mkdir -p /mnt/iso /var/www/html/centos mount -o loop CentOS-7-x86_64-Minimal-2009.iso /mnt/iso cp -r /mnt/iso/* /var/www/html/centos/6.2 HTTP服务配置
确保Apache能访问安装目录:
chcon -R -t httpd_sys_content_t /var/www/html/ systemctl restart httpd7. 全流程测试验证
7.1 客户端启动流程
- 开机进入BIOS设置网络启动
- 观察DHCP获取过程
- 检查TFTP文件加载
- 验证Kickstart配置下载
- 监控自动安装过程
7.2 常见问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无法获取IP | DHCP服务未启动 | 检查dhcpd状态和防火墙 |
| 卡在TFTP加载 | 文件权限问题 | chmod -R 755 /var/lib/tftpboot |
| 安装源不可达 | SELinux限制 | 调整安全上下文或临时禁用 |
| 分区失败 | 磁盘有残留数据 | 在ks.cfg中添加clearpart --all |
8. 高级优化技巧
8.1 多系统支持方案
通过修改PXE引导菜单,可以实现不同系统的选择安装:
label centos7 menu label ^Install CentOS 7 kernel centos7/vmlinuz append initrd=centos7/initrd.img ks=http://192.168.1.10/ks/centos7.cfg label ubuntu2004 menu label Install Ubuntu 20.04 kernel ubuntu2004/linux append initrd=ubuntu2004/initrd.gz auto=true url=http://192.168.1.10/ubuntu/preseed.cfg8.2 硬件指纹识别
在后安装脚本中收集硬件信息,生成资产报表:
%post dmidecode -t system > /root/system_info.txt lshw -html > /root/hardware_info.html %end8.3 自动化扩展实践
结合Ansible实现部署后自动配置:
%post yum install -y ansible cat > /root/bootstrap.yml <<EOF - hosts: localhost tasks: - name: Update system yum: name=* state=latest EOF ansible-playbook /root/bootstrap.yml %end9. 安全加固建议
- 部署完成后立即关闭PXE相关服务
- 为Kickstart文件设置IP白名单访问
- 使用HTTPS替代HTTP传输敏感配置
- 在ks.cfg中设置复杂root密码
- 启用安装日志审计功能
我在实际部署中发现,最容易被忽视的是TFTP目录权限问题。建议部署完成后执行:
chmod 644 /var/lib/tftpboot/* chown root:root /var/lib/tftpboot/*这套方案经过多个数据中心实际验证,稳定支持过500+节点的批量部署。关键是要做好前期测试,建议先用虚拟机验证整个流程,记录各阶段耗时,这样在实际生产环境中才能从容应对。对于特别大规模的部署,可以考虑引入Cobbler等专业工具进行管理,但基本原理与本文介绍的方案是一致的。