PXE与Kickstart实现CentOS批量无人值守部署实战
2026/9/17 5:36:54 网站建设 项目流程

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.cfg

5. Kickstart无人值守配置

5.1 配置文件生成

最快的方式是利用已有系统生成模板:

cat /root/anaconda-ks.cfg > /var/www/html/ks.cfg

5.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 %end

6. 安装源准备

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 httpd

7. 全流程测试验证

7.1 客户端启动流程

  1. 开机进入BIOS设置网络启动
  2. 观察DHCP获取过程
  3. 检查TFTP文件加载
  4. 验证Kickstart配置下载
  5. 监控自动安装过程

7.2 常见问题排查表

现象可能原因解决方案
无法获取IPDHCP服务未启动检查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.cfg

8.2 硬件指纹识别

在后安装脚本中收集硬件信息,生成资产报表:

%post dmidecode -t system > /root/system_info.txt lshw -html > /root/hardware_info.html %end

8.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 %end

9. 安全加固建议

  1. 部署完成后立即关闭PXE相关服务
  2. 为Kickstart文件设置IP白名单访问
  3. 使用HTTPS替代HTTP传输敏感配置
  4. 在ks.cfg中设置复杂root密码
  5. 启用安装日志审计功能

我在实际部署中发现,最容易被忽视的是TFTP目录权限问题。建议部署完成后执行:

chmod 644 /var/lib/tftpboot/* chown root:root /var/lib/tftpboot/*

这套方案经过多个数据中心实际验证,稳定支持过500+节点的批量部署。关键是要做好前期测试,建议先用虚拟机验证整个流程,记录各阶段耗时,这样在实际生产环境中才能从容应对。对于特别大规模的部署,可以考虑引入Cobbler等专业工具进行管理,但基本原理与本文介绍的方案是一致的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询