Skip to content

集群装机: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 /mnt

1.2 关闭安全限制

PXE 涉及多个服务间的通信(UDP 67/69),建议在部署阶段关闭防火墙和 SELinux。

bash
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2. 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/tftpboot

2.2 启动服务

bash
systemctl start xinetd tftp
systemctl enable xinetd tftp
# 验证 UDP 69 端口
netstat -anu | grep 69

3. DHCP 服务 (地址分配与引导)

DHCP 负责分配 IP,并告知客户端 "Next Server" (TFTP) 的位置。

3.1 安装 DHCP

bash
yum install -y dhcp

3.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 dhcpd

4. 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.efi

5.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.img

6. 常见问题排查 (Troubleshooting)

现象可能原因解决方案
卡在 "DHCP..."DHCP 服务未启动 / 防火墙拦截检查 systemctl status dhcpd 及 UDP 67 端口
报错 "TFTP Open Timeout"客户端连不上 TFTP检查 next-server IP 是否正确
下载 vmlinuz 失败权限不足确保 /var/lib/tftpboot 目录有读取权限
HTTP 404/403Kickstart 文件不可达浏览器手动访问 URL 测试

7. 维护命令汇总

bash
# 检查所有端口
netstat -nutlp | egrep "67|69|80"

# 一键重启所有服务
systemctl restart xinetd tftp dhcpd httpd

AI-HPC Organization