先把现场摆出来。机房通知新到 40 台机器,交付窗口给的是两天,团队里三个人带着镜像 U 盘和一份 Excel 进场上架。第一天做物理:拆箱、上导轨、理线、贴标签、接电源、接管理网;第二天做系统:一台一台从 U 盘引导,进安装界面选语言、分区、主机名、地址,装完重启,配置 bond,配 SSH 密钥,然后手工把这台机器的序列号、资产编号、磁盘序列号抄回 Excel。两天结束时系统确实都起来了,但压测一跑,有两台的网卡顺序和其余 38 台不一致,bond 绑错了口,业务流量全压在一条链路上,另外还有一台的磁盘型号和其余不同,分区脚本写死的盘符落到了错误的设备上。这三台机器不是"没装好",是"装出来的东西和别人不一样"——而后面所有自动化脚本都默认这 40 台是一模一样的。
批量交付真正的成本不在"把系统装进去"这一步的速度上。一台机器手工装系统的时间是可以压缩的,压缩到极致也就是少几分钟;真正吃掉交付窗口的是三件看不见的事:状态一致、可追溯、可复现。状态一致指的是 40 台装完之后,网卡命名顺序、分区布局、内核参数、时区与NTP、软件基线必须是同一套,任何一台偏离都会在后续某次批量操作时被放大成事故;可追溯指的是任何一台机器当前是什么系统、谁申请的、装了哪些基线、磁盘序列号是多少,能在一张表里查到,而不是靠翻聊天记录;可复现指的是同一台机器退租再上租时,能用同一条流水线恢复到同样的状态,不需要某位同事凭记忆重来一遍。手工装机在这三项上全军覆没,因为它没有状态机——每一台机器在装完之后就只是一个"装好了"的模糊事实,系统并不知道它下一步可以做什么。
把装机从人肉变成流水线,核心动作就是给它装一个状态机:机器被登记进来是一个状态,被探测完是一个状态,被池化待分配是一个状态,被某个项目预定并锁定是一个状态,正在写入镜像是一个状态,跑着业务是一个状态,被标记硬件故障是一个状态,被回收并擦除以后回到池子里又是一个状态。Canonical 的 MAAS(Metal as a Service)就是按这个思路做的——它把物理服务器当云实例来管理,是一套私有云基础设施管理系统,以 IPAM 为中心,自带高可用 DHCP 与 DNS,用 PXE 引导机器,并通过 BMC 驱动电源(IPMI、Redfish、iLO 等电源类型)。而 Cobbler 则是这条路上更早出现的一件工具,解决的是另一半问题。两者之间不是简单的新旧替代关系,本文要讲清楚的就是它们在一条交付链路上各自占哪一段。
在讨论任何装机平台之前,先说一条会一票否决所有方案的链路:网络启动。它的完整路径是——服务器上电后固件按启动顺序走到网卡,网卡里的 PXE ROM 发起 DHCP 请求;DHCP 服务器除了给地址,还要在响应里带回引导服务器的地址和引导文件名;固件拿到之后用 TFTP 去取引导器(如今常见的是先取一个 iPXE 再链式加载);引导器起来之后再用 HTTP 去取内核、initramfs 和根文件系统镜像。这四跳里任何一跳断掉,机器就只是傻傻地停在"尝试从网络启动"或者干脆跳到下一个启动项然后报无可引导设备。要注意的是这四跳分属不同的协议与不同的服务器:DHCP 是 UDP 广播(跨网段要靠中继)、TFTP 是 UDP 且对丢包和 MTU 敏感、HTTP 是 TCP 且吃带宽。把它们当成一件事来对待,是排障时最常见的误区。
逐台验证的办法不是等到批量装机那天一起上。建议在机器上架接好线之后,先挑一台走完整流程:进固件界面确认网卡的 PXE 已启用、启动顺序里网络启动排在硬盘之前、UEFI 与 Legacy 的模式和装机平台提供的是同一套(混用会导致引导器取错);然后手动触发一次网络启动,用抓包或在 DHCP 服务端看这台机器有没有拿到租约、租约里有没有带回正确的 next-server 与文件名;接着看 TFTP 有没有被请求、传完没有;最后看 HTTP 有没有取到内核与镜像。这一台走通之后,剩下的机器按批次以十台、二十台为梯度往上加,每加一批观察服务端日志与网络设备的端口计数。之所以要分梯度,是因为批量场景下最先暴露的往往不是配置错误,而是并发下的超时与丢包——单台正常不代表四十台同时拉镜像时 TFTP 还扛得住。
还有一个经常被忽略的细节:装机网段必须能被 DHCP/TFTP/HTTP 所在的服务端覆盖。很多机房的网络是按业务 VLAN 划分的,装机用的管理 VLAN 与业务 VLAN 之间路由策略、ACL、防火墙规则各不相同。如果 DHCP 服务端不在装机网段内,就要靠中继把请求转过去,而中继是否放行了相应的选项、中继后的报文源地址是否能让服务端正确识别所属网段,都需要实测。真正稳妥的做法是给装机单独规划一个或者数个 VLAN,把它当成一个有明确边界的"交付区"来对待,装完之后再通过配置管理把机器的网络切到业务 VLAN 上去。这个思路后面会反复出现,因为 VLAN 模型与现网不一致是裸金属编排三大易错点之一。
第二条硬前提是远程电源。装机平台要能自己把机器关机、开机、重启,否则它就只能"等待有人去按按钮"。这一层依赖的是服务器的带外管理控制器(BMC),通过 IPMI、Redfish、iLO 等电源类型来驱动。它的必要性体现在两个地方:一是装机过程中的重试——探测失败、镜像下载超时、测试脚本卡住,平台都需要能把机器重启一遍重新走流程;二是回收与再利用——机器退租之后需要被擦除并回到资源池,没有远程电源就意味着每一次回收都要有人进机房。换句话说,网络启动链路决定了机器能不能"被装",电源链路决定了机器能不能"被反复装"以及"被自动化地处置",这两条断了任何一条,整套系统就退化成一个漂亮的镜像仓库加一堆手工操作。
BMC 的接入本身也有讲究。首先是网络位置:带外管理口有共享口与专用口两种形态,共享口与业务网共用物理链路,专用口是独立的,后者在隔离性上更干净。无论哪种,建议把 BMC 放在独立的管理网段,与业务网做访问控制,因为这个口能开关机和挂载镜像,权限等同于物理接触机器。其次是协议选择:IPMI 是较早期的实现,历史上有过若干安全问题与实现缺陷的披露,Redfish 作为基于 HTTPS 的现代接口在认证与可审计性上更合适,优先用 Redfish,把 IPMI 作为无法升级的老机型的兜底。再次是凭据管理:装机平台上会存一批机器的带外账号口令,这批凭据的集中存储、定期轮换、与人员离职回收流程挂钩,是必须提前设计的,而不是等平台上线之后再补。
验证方式和网络启动链路一样要逐台做,而且要做得更笨一点:逐台 ping BMC 地址,逐台用带外工具执行一次状态查询,逐台执行一次关机再开机的完整 cycle,并记录响应时间与是否成功。会遇到的典型问题是凭据不一致(出厂默认口令在到货时被改成各不相同且没有登记)、管理网地址冲突、固件版本过旧导致 Redfish 路径不通、以及少数机器的 BMC 根本没接网线。这些在批量装机当天集中爆发会非常痛苦,因为表现为"平台随机地在某些机器上失败",很难一眼看出是电源侧的问题。把电源链路做成一张 40 行的验收表,每台一行,签字确认,是最省事的办法。
MAAS 的机器生命周期是一条明确的状态链,理解每一段背后实际发生的操作,是排障和设计交付流程的基础。第一段是 New:机器被登记进系统(通过自动发现或者手工录入带外地址与电源类型),此时它还没有被信任,系统只知道"有这样一个东西",不知道它的硬件是什么、能不能被控制。从 New 往前走,平台会用带外接口去开机并让它从网络引导,这一步如果失败,通常指向的就是前面那两条硬前提:拿不到 DHCP 租约、引导器下载失败、或者电源指令没有被响应。
接下来是 Commissioning:机器用一个临时的 Ubuntu 镜像启动起来,跑探测流程,把 CPU、内存、存储、网卡等信息采集回来,这一步还可以做基线配置和硬件测试。这一段的耗时主要花在三处:网络引导与临时镜像的拉取、探测脚本本身的执行、以及可选的硬件测试(比如内存测试与存储读写测试,跑与不跑对时长影响很大)。Commissioning 失败会进入 Failed commissioning,定位的抓手是这一段的日志输出——先看是卡在引导(网络或电源问题),还是卡在镜像下载(带宽与并发问题),还是卡在脚本执行(机型兼容性或脚本自身问题)。把这三类的日志位置提前摸清楚,比临时翻文档要高效得多。
Testing 是可选的一段,用来跑管理员定义的测试脚本,比如更严格的压力测试或者机型验收项;通过之后进入 Ready,机器被池化,成为可以被分配的干净资源。Ready 状态的含义很关键:它意味着这台机器的硬件已经被系统认识、基线已经就位、随时可以被交付。Ready 池子的大小就是团队真正的"可交付库存"。很多团队在上线初期容易犯的错,是把 Commissioning 当成一次性的验收动作,装完就放任机器进入业务使用;实际上每一次硬件变更(加盘、换网卡、换内存、搬机架)都应该重新走一遍探测,否则系统里的资产快照会和物理现实脱节,后续所有依赖这份快照的自动化都会踩空。
Ready 之后是 Allocated:机器被某个用户或项目预定,记录被锁定。锁定这件事的价值在于防止两个人同时盯上同一台机器、也防止后台的自动化任务在这台机器上做残留操作。Allocated 之后进入 Deploying,真正的装机动作在这一段发生:平台按照既定的存储与网络布局写盘、灌入操作系统镜像、并通过 cloud-init 注入用户数据,把主机名、网络配置、SSH 密钥、初始化脚本交给新系统。这里有一个容易被误解的点——GPU 驱动、CUDA 这类基线并不在部署阶段由平台自动完成,它们是部署之后由 cloud-init 或者配置管理角色来装的。也就是说,平台负责把机器交到一个"能跑配置管理"的状态,往后是配置管理的事,两者的边界要划清。
Deploying 结束时进入 Deployed,机器在跑业务。这一段看似平静,但它是周期里最长的一段,也是状态最容易"悄悄漂移"的一段:业务方手工改了内核参数、临时挂了块盘、换了根网线,系统里的记录并不会自动更新。所以建议在运维规范里约定,Deployed 期间的硬件变更必须走工单回流到平台,必要时把机器放回池子重新探测。Deploying 失败则会进入 Failed,失败原因里最常见的两类是镜像与机型不兼容(比如存储控制器驱动缺失导致装完起不来)和用户数据脚本自身报错(cloud-init 脚本在某一台机器上因为主机名冲突或网络未就绪而失败),后者尤其隐蔽,因为机器"起来了"但业务没起来。
最后是 Releasing:机器被释放,这一步可选地执行磁盘擦除,然后回到 Ready。Releasing 是整条状态链的闭环,也是租用与托管业务里最不能省的一段——机器要交还给资源池给下一个客户用,盘上不能留东西。擦除的策略与耗时是单独的一笔账,后面会专门算。这里要强调的是,Releasing 完成回到 Ready 之后,如果期间发生过硬件变动,应当重新 commission 一次,让系统的资产快照与物理现实对齐,否则下一次部署可能会把分区布局套到一个已经换过盘的机器上。
状态机里除了主链,还有几个处理异常与维护的状态,用对它们能让排障过程不至于把机器从池子里"踢出去"。Rescue mode 是让机器进入一个临时环境用于排障,可以对 Deployed 或 Broken 状态的机器使用:比如一台跑着业务的机器起不来了,管理员可以进救援模式挂载原来的磁盘去捞日志、改配置、修复引导,而不必立刻重装。这个状态的价值在于"先保现场再决定",因为一旦直接重装,故障的第一手证据就没了。
Broken 是管理员标记硬件故障的状态,它和 Failed 的区别要分清:Failed 是流程执行失败(可能是软件、配置、网络问题,机器本身未必坏),Broken 是认定这台机器硬件有问题,需要从可用库存里摘出来。标记 Broken 之后,机器不会被自动分配出去,避免业务方拿到一台带病机器;修好之后要重新 commission 才能回到链路上。Locked 则是加锁,防止误操作——比如一台机器正在做硬件维护、或者涉及某个争议中的工单,加锁之后自动化流程不会动它。这几种状态看着琐碎,但它们的存在恰恰是"有状态机"和"手工装机"的分水岭:手工模式下,一台坏机器和一台忙机器在 Excel 里长得一模一样,都是一行看不出区别的记录。
回到开篇那两台网卡顺序不一致的机器。手工装机的流程里没有任何一步会去"认识"这台机器的硬件,它只是照着脚本执行;而 Commissioning 的价值,恰恰在于它让系统先认识硬件,再决定怎么装。探测采集回来的是 CPU 型号与核心数、内存容量与插槽分布、磁盘型号与容量与拓扑、网卡型号与接口、以及 PCIe 设备列表。这份清单不是给报表看的,它是后面所有自动化的输入。
具体地说,至少有几类动作依赖它。第一类是存储布局:分区该落在哪块盘、RAID 或直通怎么配、日志盘与数据盘怎么分,都要先知道盘有几块、各自多大、控制器是什么型号;按"第一块盘"写死脚本在混盘机型上必然出错。第二类是网络布局:bond 该绑哪两个口、网卡命名是否稳定、有没有管理口与业务口之分,都要先知道网卡拓扑;开篇那个问题的根治办法就是让平台按探测到的网卡信息生成网络配置,而不是靠人工按顺序猜。第三类是驱动与固件基线:某些 RAID 卡、某些万兆网卡需要特定驱动或固件版本,探测到型号之后才能决定要不要额外注入。第四类是加速卡定位:GPU、FPGA、DPU 这些 PCIe 设备在哪个槽位、有没有被正确识别,决定了后续算力调度能不能做。第五类是容量与退租核对:池子里还有多少核、多少内存、多少盘,退租时磁盘序列号有没有被换过,都要以这份清单为准。
把资产清单当成地基还有一个现实收益:它让"机型混装"变得可管理。一个租用业务的库存里不可能永远是同一个型号,到货批次不同、客户定制不同,混装是常态。手工模式下混装意味着每台都要特殊照顾;有资产数据之后,可以按机型打标签,给不同标签配不同的存储与网络布局模板,让同一条流水线处理多种机型。这也是 MAAS 从 3.1 起支持把存储与网络布局克隆到硬件兼容的其他机器的意义所在——它不是简单地复制粘贴配置,而是在有资产数据支撑的前提下,把"这一类机器该怎么装"沉淀成可复用的模板。
承接上文,MAAS 3.1 起提供了两条能省不少事的路径。第一条是克隆配置:把一台机器上调好的存储布局与网络布局,复制到硬件兼容的其他机器上。它的适用前提是"硬件兼容"——盘的数量与容量档位、网卡的型号与数量一致或者至少可以被同一套布局覆盖;如果不兼容而强行克隆,轻则布局套不上,重则数据盘落在错误的设备上。所以克隆之后必须抽查部署结果,而不是默认它一定对。第二条是纳管已经在跑业务的机器:直接把它们标记为 deployed,跳过 commissioning。这对"先把存量机器收进系统、日后再逐步规范"的团队很有用,避免了为了纳管而重装一遍业务机器。
但这两条路径都有明确边界,用错了会埋雷。纳管存量机带来的最大问题是:这些机器没有探测数据,也就是说它们在系统里是"有状态但没有资产快照"的。前面说过资产清单是后面所有自动化的地基,那么这批机器就是地基上的空洞——你不知道它们的磁盘序列号、不知道网卡拓扑、不知道有没有换过件,后续任何依赖这些数据的自动化(比如按机型批量刷固件、比如退租时核对磁盘)在这批机器上都会失效。合理的用法是把纳管当成过渡态:先纳入管理、拿到带外权限和台账,然后在业务允许的窗口里分批重新 commission,把空洞补上。至于克隆出的布局,它解决的是"配置复用",不解决"硬件验收"——克隆之前那台母机自身的探测与测试仍然要做,不能因为要克隆就跳过。
把 Cobbler 放进来对照,二者的分工就清楚了。Cobbler 是较早期的 Linux 装机服务器,源自 Red Hat 系,用于集中管理 DHCP、TFTP、镜像与 kickstart/preseed 应答文件,实现网络批量装机;Cobbler 3.x 起转向 Python 3。它解决的是"应答文件与引导物料的集中管理"——把以前散落在各个 U 盘和各个管理员脑子里的分区方案、软件包清单、主机名与地址分配规则,集中到一处,让一批机器按同一份应答文件装机。这在"一次性批量交付、机型单一、装完就交给业务方长期不动"的场景下非常有效,也足够轻。
但它不解决另一半问题:资产与生命周期。Cobbler 里没有"这台机器的 CPU 是几核、磁盘序列号是什么"的资产库,也没有"谁预定了它、它现在处于什么状态、回收时要不要擦除"的状态机。你当然可以在 Cobbler 之外用 CMDB 和工单系统把这一层补上,但那意味着自己维护两套数据的一致性——而一致性恰恰是最难维护的东西。什么时候 Cobbler 够用:交付是一次性的、机型高度统一、交付之后机器长期不动、没有反复回收再分配的需求、也没有多团队共享同一批库存的诉求。什么时候必须上 MAAS:机器会被反复分配与回收(租用与托管业务的常态)、需要资产数据驱动后续自动化、需要多租户与配额与 RBAC、需要把装机能力通过 API 暴露给上层平台或工单系统。
MAAS 在这些维度上的答案是成体系的:它提供 Web UI、REST API 与 CLI/Python 绑定,支持 RBAC 与 LDAP/AD/SAML 对接,部署阶段通过 cloud-init 注入用户数据。这意味着它可以被嵌进现有的审批与工单流程里——业务方在内部平台提交申请,平台调 MAAS 的接口分配机器并部署,部署完成后回调更新台账。Cobbler 要做同样的事,就需要在外面再搭一层编排,而那一层本质上就是在重新实现状态机。所以更现实的判断不是"哪个工具更好",而是"我现在的业务要不要为状态机付这笔建设成本":如果库存只有十几台且不流动,答案是不用;如果是几十上百台且每月都在进出,答案是要。
装机平台本身也要占资源,这笔账在规划阶段不算清楚,上线之后就会以"莫名其妙的超时"形式还回来。第一笔是镜像仓库与同步的存储与带宽。基础镜像、包索引、以及同步上游产生的历史版本,占用的空间是持续增长的;如果同步策略是"全量镜像 + 保留多个版本",存储量会比你按单个镜像大小乘出来的数字大得多。带宽方面,同步是周期性 inbound,装机时是突发 outbound,两者的峰值不重合但都要预留。建议的做法是先定同步策略(同步哪些发行版、哪些版本、保留几代),再据此反推存储配额,同时给仓库盘留出扩容余量。
第二笔是 DHCP 与 DNS 的高可用。这两者在装机链路里是"第一跳",它们挂了整条线就断了,所以不能单点。MAAS 自带高可用 DHCP 与 DNS 能力,但高可用部署意味着多个 rack/region 组件与多份租约状态的一致性,规划时要把节点数量、管理网地址、以及故障切换期间的租约行为想清楚——尤其是"两台 DHCP 同时应答"这种会直接导致装机混乱的场景。DNS 这边要考虑的是正向与反向记录、以及装机完成后业务域名的解析切换由谁负责,避免装完机器解析还指向旧记录。
第三笔是并发装机时的 TFTP 与 HTTP 压力。这一笔可以用很朴素的方式估算:假设单台机器一次性拉取的内核加 initramfs 加根镜像总共是若干 GB(具体数字取决于你选择的镜像与是否用 squashfs 形态,需以实测为准),那么 N 台同时装机的聚合吞吐就是单次量乘以 N,再除以可接受的完成时间,得到服务端需要提供的带宽下限。这里的关键不是带宽数值本身,而是两个衍生结论:一是并发数必须设上限,否则服务端网卡与磁盘会同时成为瓶颈,且表现为随机超时而非明确报错;二是 TFTP 阶段虽然传的东西小,但它对丢包敏感且通常是串行的小块传输,并发一高最容易先崩的反而是它,所以实际部署中常把重活交给 HTTP,只让 TFTP 承担引导器这一小段。建议上线前做一次梯度压测:十台、二十台、四十台分别跑一遍,记录每批的总耗时与失败台数,用实测曲线来定并发上限。
退租回收时最容易被低估的就是擦除时长。先给口径:快速擦除通常只处理分区表与元数据,让盘在系统层面"看起来是空的",速度快,但盘上原有数据仍有被恢复的可能;安全擦除则是对整盘做覆写,把每一位都写过一遍(有些场景要求多遍,遍数取决于内部合规要求),速度慢但能达到交付标准。两者不是"快一点"和"慢一点"的关系,是不同的安全口径,业务上要先定清楚哪一种对外承诺、哪一种用于内部周转。对于租用与托管业务,机器要交给下一个客户,安全擦除是默认选项。
时长的推导方式很简单,但前提必须摆明。单盘的覆写时间近似等于"盘容量 ÷ 顺序写速率"。这里的速率是一个假设值,取决于盘型(机械盘与固态盘差别很大)、接口与控制器、是否多盘共享背板带宽、以及擦除工具是随机写还是顺序写;建议在自家环境里实测一次拿到数字,再代入公式。以一个纯示例说明量级:假设某块盘的容量在数 TB 量级、顺序写速率在百 MB/s 量级,那么把容量换算成 MB 再除以速率,得到的秒数落在"万秒"这个区间,也就是数小时量级——注意这里给的是量级而不是承诺值,实际值需以实测为准。
真正影响交付窗口的是并行与瓶颈转移。一台机器往往有多块盘,如果多盘并行覆写,理想情况下整机时长约等于最慢的那块盘;但盘并不是各自独立的,它们共享控制器、背板与电源,并发一上去,顺序写速率会下降,瓶颈从"单盘速率"转移到"控制器与背板总带宽",整机时长就不再随并行度线性下降。所以规划窗口时不能简单地"单盘时长除以盘数",而应该按"整机作为一个单位、批次作为一个单位"来估:一批机器同时擦除,机柜级的供电与散热、以及服务端的作业调度都会成为约束。实操上更稳的做法是先拿一批机器实测整机擦除时间,再据此定退租到再上架之间的间隔,把这个间隔写进交付 SOP,而不是让销售侧凭感觉承诺交期。
| 能力维度 | Cobbler 的做法 | MAAS 的做法 | 什么时候前者就够用 | 常见坑 |
|---|---|---|---|---|
| 应答文件与镜像物料 | 集中托管 kickstart/preseed 与镜像、管理 DHCP/TFTP | 自带镜像同步与部署,用户数据由 cloud-init 注入 | 机型单一、应答文件一版通用 | 多机型共用一份应答文件,盘符与网卡名打架 |
| 资产探测与台账 | 不产出资产数据,需外部 CMDB 补 | Commissioning 采集 CPU/内存/存储/网卡/PCIe 并入库 | 已有成熟 CMDB 且能维护一致性 | 两台系统数据与实物不一致,自动化按错数据执行 |
| 生命周期状态机 | 无状态概念,装完即结束 | New/Commissioning/Testing/Ready/Allocated/Deployed/Releasing 全链 | 交付一次性、机器长期不动 | 坏了的和忙着的在台账里长得一样 |
| 远程电源与自动重试 | 不驱动电源,靠人工开机 | 通过 BMC 驱动 IPMI/Redfish/iLO 等电源类型 | 机器就在手边、随时能按按钮 | BMC 没接管理网或凭据未登记,随机机器失败 |
| 回收与擦除 | 无回收流程,需外部脚本 | Releasing 阶段可选磁盘擦除后回池 | 机器不退租、一次性交付给客户自管 | 擦除时长被低估,退租到再上架的窗口排不开 |
| 多租户、配额与权限 | 无租户与配额模型 | 支持 RBAC 与 LDAP/AD/SAML,可按项目约束分配 | 只有一个团队独占这批机器 | 多人同时盯上同一台,无锁定导致重复部署 |
| 对接上层系统 | 以命令行与配置文件为主 | 提供 Web UI、REST API 与 CLI/Python 绑定 | 装机与业务系统不需要联动 | 上层拿到 API 但没做幂等,重复调用重复装机 |
装机平台不是从零建一张网,它要插进已经跑着业务的网络里,这是最容易出事的地方。第一大坑是 DHCP 抢占:现网业务 VLAN 里通常已经有一台 DHCP 在服务,装机平台再在同一个二层域里起一个 DHCP,两台服务器会同时应答,新机器拿到谁的租约是不确定的,表现就是"有的机器装得上、有的装不上、而且每次不一样"。处理办法不是去调优先级,而是从物理与二层上把两者分开——给装机规划独立的 VLAN,让平台的 DHCP 只在这个域里可见,业务 VLAN 的 DHCP 不受影响;跨三层时用中继,并确认中继只把请求转发给预期的那一台。另外要注意交换机的 DHCP snooping 等安全特性,它可能直接把平台的应答判为非法而丢弃。
第二大坑是 VLAN 与子网模型与现网不一致。平台里的子网、VLAN ID、网关、MTU、DNS 必须和现网的实际规划对得上,否则会出现"装得很顺利、装完不通"的尴尬——机器拿到了地址,但网关不在同一个子网,或者 MTU 不一致导致大包不通,或者 DNS 指向了一个业务网里不可达的地址。建议在平台初始化时就把现网的地址规划表导入并逐条核对,尤其是那些历史遗留的、只在某几个机柜生效的特殊网段。MTU 这一项要特别留意,如果业务网启用了巨帧而装机网没有,装完切网之后的性能问题会非常难查。
第三与第四个注意点是机架映射与标签配额。机架与机柜在平台里应该映射成清晰的组织结构:把物理位置(机房、机架、机柜位)映射到资源池与可用域,这样分配机器时可以按"要分散在不同机架"或"必须在同一机架内低延迟互通"来约束,避免把同一个业务的两台机器装到相隔很远的机柜。标签则用来承载机型、用途、是否带加速卡、是否做过固件升级等维度,配合配额限制每个项目能分配的台数与规格。这两件事在只有几十台时看起来多余,但当库存到几百台、多个项目同时在池子里取机器时,没有组织结构与标签的池子会迅速变成一个谁都不敢动的黑盒。
退租是这批机器生命周期里最后一个环节,也是最容易产生纠纷的环节。先把擦除口径说清楚并写进合同与 SOP:快速擦除只处理分区表与元数据,让盘在系统层面不再呈现原有数据,适用于内部周转、机器不离开自己控制的场景;安全擦除对整盘做覆写,适用于机器要交给下一个客户或离开自己的控制范围。两者都要留下证据——擦除执行的机器序列号、盘序列号、执行时间、执行方式、执行结果,形成一条可查的记录。光说"已经擦过了"是不够的,要有能拿出来的记录。
擦除之后是否需要重新 commission,答案是"凡是有过物理变动的都要"。退租机器往往经历下架、搬运、入库、再上架,这个过程里可能被换过盘、换过内存、被撞过网卡、甚至整台被调包成同型号的另一台。重新 commission 的作用是刷新资产快照,让系统的记录与物理现实重新对齐:盘子还是不是原来那些、序列号变没变、网卡数量对不对、内存容量对不对。跳过这一步直接部署,等于把一个未经验证的硬件交给下一个客户,而一旦这台机器在客户手上出问题,责任划分会非常麻烦。至于 GPU 驱动、CUDA 这类基线,则是在部署之后由 cloud-init 或配置管理角色重新装上,不用在擦除阶段考虑。
最后是资产台账与序列号核对。核对的对象至少包括:整机出厂序列号、BMC 的管理地址与序列号、每块磁盘的序列号与容量、每张网卡的 MAC 地址与型号。这些数据的来源有两个:平台探测出来的结果,和到货/退租时人工抄录的记录,两者要能对上。对不上的情况通常意味着换件或者录入错误,必须在交付前查清。建议把这份核对做成退租交接单的固定栏目,交接双方签字确认,与擦除记录一起归档。这样做的好处不只是"出了事能说清",更是让整个池子的资产数据保持可信——而资产数据可信,是前面所有自动化能够成立的前提。
选型这件事,一手信息要去官方文档:MAAS 的机器生命周期状态定义、电源类型支持范围、镜像同步与部署机制、API 与权限模型的准确表述,以 Canonical 官方 MAAS 文档为准;Cobbler 的安装配置、应答文件语法与 3.x 起的 Python 3 迁移状况,以项目官方文档为准。文档能告诉你"这套东西的设计是什么、能力边界在哪、配置项叫什么",它们是判断"我该不该上"的依据。但文档不会告诉你的是机房侧的实际条件:我的这批机器能不能 PXE、带外网段通不通、装机 VLAN 能不能单独划、退租擦除的窗口排得开排不开。这些是"能不能落地"的问题,答案在机房侧而不是文档里。
一万网络深耕 IDC 行业 19 年(成立于 2007 年),在华南、华东、华北及中国香港、海外多地整合自营节点与 BGP 多线资源,提供服务器租用、机柜托管与带宽接入的一体化交付;具体机型、带宽与报价以官网实时信息或咨询确认为准。放到本文的场景里,工单侧能帮到的部分集中在硬前提与交付衔接:带外管理口的接入方式与管理网地址规划、BMC 凭据的交接与登记、装机网段与现有业务网络的隔离方案(避免 DHCP 抢占这一类前置风险)、机架与机位信息如何映射成可管理的资源结构、以及退租时的擦除执行与台账交接。这些事情本身不神秘,但它们必须在机器上架之前谈妥,等到批量装机那天才发现带外网没通,代价是整个交付窗口。
平台跑通只是开始,真正决定这套体系能不能长期用下去的,是三件需要提前定死的事。第一件是装机窗口:一批机器从到货到交付需要多久,要把链路拆开算——上架与接线、逐台硬前提验收(网络启动与电源各一次)、commissioning 与测试(测试跑不跑对时长影响很大)、部署与配置管理收敛、业务验收。每一段都要有实测下来的量级,而不是拍一个总数;同时要定并发上限,因为并发上去之后失败率会非线性上升,盲目加并发反而拖长总时长。
第二件是擦除时长与口径:内部周转用哪一种、对外交付用哪一种、执行结果如何留证、擦除与再上架之间的间隔排几天。这笔账前面已经给了推导方式——容量除以顺序写速率,速率需实测,多盘并行时瓶颈会转移到控制器与背板——按自家环境代入之后得到一个量级,再据此排窗口。第三件是台账口径:序列号采哪些、以谁的记录为准、硬件变更怎么回流到平台、Deployed 期间的变更由谁负责更新。这三件事定下来,状态机才不会在半年后退化成一个好看但没人信的界面。
回到开头那 40 台机器。如果重来一次,正确的顺序是先花半天把两条硬前提逐台验完,再让平台把 40 台一起 commission,从探测结果里发现那两台网卡顺序不一致和那台磁盘型号不同的机器,给它们单独配布局模板,然后按统一的存储与网络布局批量部署,装完用配置管理收口。同样的交付窗口,装出来的东西是一致的、可查的、可复现的——这才是批量交付该有的样子。一万网络深耕 IDC 行业 19 年(成立于 2007 年),在华南、华东、华北及中国香港、海外多地整合自营节点与 BGP 多线资源,提供服务器租用、机柜托管与带宽接入的一体化交付;具体机型、带宽与报价以官网实时信息或咨询确认为准。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品