裸金属服务器自动装机与零接触交付
裸金属交付如果依赖人工挂载ISO、逐台设置RAID和手工输入网络参数,规模增加后必然产生配置漂移。零接触交付应把资产发现、固件、PXE启动、操作系统安装、Cloud-init、配置管理、验收和入库串成可审计流水线。
一、交付目标
设备上架
↓
BMC发现与资产核对
↓
BIOS/RAID/固件基线
↓
PXE/iPXE启动
↓
无人值守安装
↓
首次启动初始化
↓
配置管理与安全基线
↓
验收、入CMDB、交付业务
每一步应有输入、输出、超时、失败状态和人工接管方式。
二、网络与安全域
建议划分:
- BMC带外管理网;
- Provisioning/PXE网;
- 业务管理网;
- 存储或集群网;
- 镜像与软件仓库。
PXE服务不应无边界响应整个办公网络。DHCP、TFTP、HTTP和BMC接口应限制来源,安装完成后撤销临时Token和安装权限。
三、DHCP与PXE流程
传统PXE:
- 服务器DHCP获取地址;
- DHCP返回TFTP服务器和启动文件;
- 下载PXE Bootloader;
- 下载内核和initrd;
- 访问安装源和无人值守配置。
UEFI和Legacy BIOS使用不同启动文件。混合环境必须按客户端架构返回正确Bootloader。
四、iPXE优势
iPXE支持HTTP/HTTPS、脚本、菜单、参数和更灵活的链式启动,比TFTP传输大文件更高效。
#!ipxe
dhcp
kernel http://provision.example.com/images/linux/vmlinuz \
initrd=initrd.img ip=dhcp autoinstall \
ds=nocloud-net;s=http://provision.example.com/seed/${mac}/
initrd http://provision.example.com/images/linux/initrd.img
boot
生产脚本应验证设备身份,不能让任意客户端读取含密钥的配置。
五、无人值守安装方式
- RHEL/Rocky/Alma:Kickstart;
- Ubuntu:Autoinstall/Subiquity;
- Debian:Preseed或现代自动安装方案;
- Windows:WDS/MDT/Autounattend;
- 通用首次启动:Cloud-init。
配置文件版本化,按硬件角色、站点和环境渲染。密码只通过短期Secret或首次启动注册获取,不写入公共模板。
六、磁盘与RAID
安装前从BMC/Redfish或RAID工具获取:
- 磁盘数量、容量、类型、序列号;
- 控制器和缓存保护;
- 现有虚拟盘;
- 介质错误;
- NVMe拓扑;
- 启动模式。
按角色定义RAID策略:系统盘镜像、数据盘直通、HBA/JBOD或硬RAID。Ceph、ZFS等软件定义存储通常要求避免不透明硬RAID。
清盘是破坏性操作,必须通过资产状态、工单和双重确认防止误装生产服务器。
七、分区与文件系统
模板需要考虑:
- UEFI ESP;
/boot;- LVM;
- 根分区;
/var、日志和容器目录;- Swap;
- XFS/ext4;
- 加密;
- 未来扩容。
不要让日志、容器镜像和根分区无边界共享空间。数据库和容器节点可独立数据卷。
八、Cloud-init
Cloud-init适合首次启动:
- 主机名;
- 网络;
- 用户与SSH Key;
- 软件源;
- 时区和NTP;
- 安装Agent;
- 注册配置管理;
- 清除临时凭据。
脚本必须幂等。失败时保存 /var/log/cloud-init.log 与输出,不要仅靠重装解决。
九、网络配置
动态安装地址和最终静态地址可以不同。需要处理:
- Bond/LACP;
- VLAN;
- 多网卡命名;
- MTU;
- 默认路由;
- DNS/NTP;
- IPv4/IPv6;
- NetworkManager、Netplan或systemd-networkd。
根据MAC、PCI地址和接口序列生成稳定映射,避免网卡枚举顺序变化导致配错网络。
十、镜像与软件仓库
- ISO、内核、initrd和软件包校验哈希;
- 使用内部镜像和代理;
- 固定版本快照;
- 保留已交付版本;
- TLS和访问控制;
- 防止安装过程中依赖不可控互联网;
- 记录每台服务器使用的镜像版本。
十一、MAAS与Foreman
MAAS适合裸金属发现、Commission、部署和网络管理;Foreman可结合Katello管理生命周期、内容和配置。
选型考虑:
- Linux/Windows支持;
- BMC驱动;
- IPAM/DHCP/DNS边界;
- 多站点;
- 模板能力;
- API;
- 审批与RBAC;
- 现有CMDB集成。
平台不能替代标准化数据模型和安全流程。
十二、硬件Commission
正式安装前执行:
- CPU、内存和NUMA清单;
- 内存ECC状态;
- 磁盘SMART;
- 网卡链路和速率;
- BMC健康;
- BIOS版本和配置;
- 短时CPU/内存/磁盘测试;
- 序列号和位置核对。
测试要控制时长和温度,不在已承载数据的设备执行破坏性写测试。
十三、固件与BIOS基线
基线包括:
- BIOS/BMC/RAID/NIC/HBA固件;
- UEFI与Secure Boot;
- 虚拟化扩展;
- NUMA与超线程;
- 电源策略;
- 启动顺序;
- SR-IOV;
- Watchdog。
固件升级应分批、检查兼容矩阵并保留恢复路径。不要在全批服务器同时升级同一固件。
十四、安装身份与短期令牌
每台服务器使用一次性注册Token,绑定MAC、序列号、工单和有效期。首次注册后换取正式机器身份并撤销安装Token。
禁止在Kickstart、Cloud-init或iPXE公共URL中存放长期Root密码、私钥或云凭据。
十五、配置管理接管
操作系统安装后由Ansible、Salt、Puppet等接管:
- 安全基线;
- 账号和SSH;
- 时间同步;
- 软件源;
- 日志和监控;
- EDR;
- 内核参数;
- 应用角色。
安装模板只完成最小引导,避免在安装阶段塞入全部业务逻辑。
十六、验收测试
验收至少包括:
- 硬件数量与CMDB一致;
- RAID/磁盘/文件系统正确;
- 管理、业务和存储网络可达;
- DNS、NTP正常;
- 固件和OS版本符合基线;
- 监控、日志、备份和安全Agent在线;
- 重启后自动恢复;
- 业务端口和性能抽测;
- 无默认密码和临时凭据。
十七、失败与重试
状态机示例:
discovered → inspected → approved → provisioning
→ configuring → validating → ready
↘ failed/manual-review
重试必须从安全检查点开始。磁盘清理、RAID重建等动作不能因为网络超时就无条件重复。
十八、带外回退
自动装机失败时应能:
- 通过BMC查看Console;
- 获取安装日志;
- 重新设置一次性启动;
- 挂载受控救援镜像;
- 禁止继续批次;
- 转人工工单。
不要把同一个共享BMC管理员密码写入自动化平台。
十九、重装与数据保护
重装前强校验:
- 资产状态为待重装;
- 业务已下线;
- 备份确认;
- 序列号与工单一致;
- 目标磁盘清单;
- 双人审批;
- 带外位置确认。
高风险环境可要求现场扫码确认资产标签,防止IP或主机名复用造成误清盘。
二十、监控与上线清单
- [ ] DHCP/PXE范围与办公网络隔离;
- [ ] UEFI和Legacy启动链均测试;
- [ ] 镜像、模板和软件源版本化并校验;
- [ ] BMC、磁盘和RAID在安装前检查;
- [ ] 清盘与重装有工单和双重确认;
- [ ] 安装凭据一次性且自动撤销;
- [ ] 网络接口映射稳定;
- [ ] Cloud-init和配置管理幂等;
- [ ] 验收覆盖硬件、网络、安全和业务;
- [ ] 失败可停止、可人工接管、可审计。
二十一、结语
零接触交付不是让服务器无人值守地“装完系统”,而是让每台设备从资产发现到业务可用都有确定状态、可信输入和可验证输出。把清盘、固件、网络和凭据等高风险动作纳入审批与审计,才能在提高交付速度的同时避免自动化扩大事故。
参考资料
- iPXE Documentation:https://ipxe.org/docs
- Ubuntu Autoinstall:https://canonical-subiquity.readthedocs-hosted.com/en/latest/
- Cloud-init Documentation:https://cloudinit.readthedocs.io/