集群装机:CentOS 7.9 PXE 自动化部署实战
在构建 AI/HPC 集群时,面对数十台甚至上千台裸金属服务器(Bare Metal),手动安装操作系统显然不可行。 本文档详细介绍了基于 PXE (Preboot Execution Environment) 协议,结合 DHCP + TFTP + HTTP 服务,搭建全自动化装机环境的完整流程。
1. 环境准备与基础配置
注意:本文假设服务器 IP 地址统一规划。示例中:
- 部署节点 (Server) IP:
192.168.1.100 - 网段:
192.168.1.0/24
1.1 配置本地 YUM 源
为了保证安装软件的速度和稳定性,建议使用 ISO 镜像配置本地源。
bash
# 1. 备份原有 Repo 文件
cd /etc/yum.repos.d/ && mkdir backup && mv *.repo backup/
# 2. 创建本地源配置文件
cat > /etc/yum.repos.d/local.repo <<EOF
[centos79]
name=RedHat7.9
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
# 3. 挂载 ISO 镜像 (实际生产建议挂载到持久化目录)
mount -o loop /root/centos-server-7.9-x86_64-dvd.iso /mnt1.2 关闭安全限制
PXE 涉及多个服务间的通信(UDP 67/69),建议在部署阶段关闭防火墙和 SELinux。
bash
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config2. TFTP 服务 (传输微内核)
TFTP 用于向客户端发送启动引导程序(Bootloader)和内核文件。
2.1 安装与配置
bash
yum install -y xinetd tftp tftp-server
# 修改配置:开启 TFTP
vim /etc/xinetd.d/tftp
# 将 disable = yes 改为 disable = no
# 确保 server_args = -s /var/lib/tftpboot2.2 启动服务
bash
systemctl start xinetd tftp
systemctl enable xinetd tftp
# 验证 UDP 69 端口
netstat -anu | grep 693. DHCP 服务 (地址分配与引导)
DHCP 负责分配 IP,并告知客户端 "Next Server" (TFTP) 的位置。
3.1 安装 DHCP
bash
yum install -y dhcp3.2 配置文件详解
编辑 /etc/dhcp/dhcpd.conf,根据实际网段修改 IP:
nginx
authoritative;
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
# PXE 专属选项
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option arch code 93 = unsigned integer 16; # 架构识别
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.250; # IP 分配范围
next-server 192.168.1.100; # 本机 TFTP Server IP
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
# 00:07 = UEFI 模式, 00:00 = Legacy BIOS
if option arch = 00:07 {
filename "BOOTX64.efi";
} else {
filename "pxelinux.0";
}
}
}3.3 启动服务
bash
systemctl start dhcpd && systemctl enable dhcpd4. HTTP 服务 (托管镜像与 Kickstart)
HTTP 服务用于提供完整的 OS 镜像文件下载和 Kickstart 自动应答脚本。
4.1 安装与挂载
bash
yum install -y httpd
systemctl start httpd && systemctl enable httpd
# 创建挂载点并挂载 ISO
mkdir -p /var/www/html/centos79
mount -o loop /root/centos-server-7.9-x86_64-dvd.iso /var/www/html/centos79验证:访问 http://192.168.1.100/centos79/ 应看到光盘目录。
5. PXE 启动文件配置 (核心)
5.1 准备启动文件
从 ISO 或 syslinux 包中提取必要文件至 TFTP 目录。
bash
# 复制内核与初始镜像
cp /var/www/html/centos79/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
# 准备 UEFI 引导程序 (需提前准备 shim.efi 或 grubx64.efi)
# cp /path/to/BOOTX64.efi /var/lib/tftpboot/
chmod +x /var/lib/tftpboot/BOOTX64.efi5.2 编辑引导菜单 (UEFI 模式)
文件:/var/lib/tftpboot/pxelinux.cfg/efidefault (或 grub.cfg)
bash
default=10
timeout=15
label 10
title Install CENTOS-7.9-x86_64 (UEFI)
root (nd)
# ksdevice=link: 指定通过网线连接的网卡
# ks=...: 指定 Kickstart 文件位置
kernel /vmlinuz ksdevice=link ks=http://192.168.1.100/centos79.cfg ip=dhcp
initrd /initrd.img6. 常见问题排查 (Troubleshooting)
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 卡在 "DHCP..." | DHCP 服务未启动 / 防火墙拦截 | 检查 systemctl status dhcpd 及 UDP 67 端口 |
| 报错 "TFTP Open Timeout" | 客户端连不上 TFTP | 检查 next-server IP 是否正确 |
| 下载 vmlinuz 失败 | 权限不足 | 确保 /var/lib/tftpboot 目录有读取权限 |
| HTTP 404/403 | Kickstart 文件不可达 | 浏览器手动访问 URL 测试 |
7. 维护命令汇总
bash
# 检查所有端口
netstat -nutlp | egrep "67|69|80"
# 一键重启所有服务
systemctl restart xinetd tftp dhcpd httpd