从零搭建PXE+Kickstart无人值守Linux批量部署平台
2026/7/16 9:57:13 网站建设 项目流程

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-tools

3. 核心服务配置

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 dhcpd

3.2 TFTP服务部署

TFTP负责传输小文件,就像"快递小哥"送启动文件:

yum install -y tftp-server xinetd # 配置tftp sed -i 's/disable.*/disable = no/' /etc/xinetd.d/tftp systemctl restart xinetd

4. 安装文件准备

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

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

6. 服务联调测试

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 EOF

6.2 客户端验证

启动客户端后,你应该会看到这样的流程:

  1. 获取IP地址(DHCP)
  2. 下载pxelinux.0(TFTP)
  3. 加载内核和initrd
  4. 自动开始安装

我曾遇到过一个典型问题:客户端卡在TFTP传输。最后发现是防火墙没关,所以切记检查服务端口是否畅通。

7. 生产环境优化建议

7.1 安全加固方案

虽然我们测试时关闭了防火墙,但生产环境应该:

# 只开放必要端口 firewall-cmd --permanent --add-service=dhcp firewall-cmd --permanent --add-service=tftp firewall-cmd --permanent --add-service=http firewall-cmd --reload

7.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" 解决方法:

  1. 检查DHCP服务是否运行
  2. 确认网络连通性
  3. 验证DHCP配置中的next-server参数

8.2 安装过程中断

可能原因:

  1. Kickstart文件语法错误
  2. 软件包依赖问题
  3. 磁盘分区配置冲突

查看安装日志:

tail -f /var/log/anaconda/journal.log

记得第一次部署时,我因为分区配置错误导致安装卡住2小时。现在养成了先用虚拟机测试的好习惯。

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

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

立即咨询