☰
OpenRig:用Kubernetes统一整机柜带外管理
2026/10/15 13:51:33 网站建设 项目流程

千卡集群交付的时候,最折腾人的往往不是服务器本身,而是那一堆藏在机柜深处的带外管理逻辑:固件版本、电源时序、传感器阈值、网络引导配置。你部署完一套Kubernetes,发现计算节点全起来了,但固件还停留在出厂版本;想做个批量升级,厂商的工具各管各家,没有一个统一的入口。OpenRig就是奔着这个问题去的——一套面向整机柜场景的开源基础设施管理方案,把BMC、机柜管理器、Kubernetes控制面串在一起,让“机柜”变成一个可以被代码驱动的整体。

这个项目适合谁?简单说,谁在跟裸金属、整机柜、大规模GPU集群打交道,谁就应该认真看一眼。如果你还在用脚本SSH到BMC里敲命令、用Excel记录固件版本,那这套东西大概率能帮你解放一大半的运维精力。我最近在几个项目里实际接触了OpenRig,把里面的设计思路、核心组件、部署路径和踩过的坑都理了一遍,这篇就当是给同行的一份实操笔记。

1. 为什么需要OpenRig:光会装系统远远不够

先看一个很实际的问题:当你的集群规模从几十台服务器涨到几百台、上千台,日常运维里最费人力的是什么?很多人第一反应是“装系统”、“编网络”、“配存储”,但其实在规模化之后,最磨人的反而是那些平时不起眼的带外管理操作——固件升级、BMC参数调整、电源控制、传感器监控。

1.1 带外管理的现实困境

传统做法是什么样?新一批整机柜设备到货,你会收到厂商的专用管理工具,或者一个登录地址进Web管理界面。于是每家的界面长得都不一样:这家把固件升级藏在“维护”页签里,那家把电源控制放在“远程控制”菜单下;API虽有,但有的走Redfish,有的还留在IPMI私有扩展。你让一个SRE同时维护两三个厂商的设备,他抽屉里能翻出五六种管理工具的账号和手册。

这种情况下,任何涉及批量变更的操作——比如“给这批机器统一升级BIOS到某个版本”或者“把机柜里所有节点的PXE引导顺序改一下”——都只能靠人肉或者半自动脚本。脚本本身不难写,难的是接口不统一、状态返回不一致、报错语义各异,你根本不敢让脚本全自动跑,怕它把一个错误指令扩散到整个机柜。

1.2 从“管设备”到“管机柜”

OpenRig的切入点就是把“设备”抽象成“机柜”,把机柜当做一个可以被编排的资源池。它不只关注单台服务器的生命周期,而是把机柜级的概念一起纳进来:电源分配单元(PDU)的供电状态、机柜内温度传感器、所有节点的固件基线、故障诊断的带外通道,这些东西通过一个统一的控制面暴露出来。

这和传统带外管理的区别,就好比单反相机的各种旋钮和参数,和智能相机的“一键夜景模式”之间的差距——前者每一个细节都暴露给你,操控灵活但是门槛高;后者帮你把时序、曝光、降噪都协调好,你的精力可以放在构图这件事本身上。OpenRig干的活就是后者,只不过协调的对象是整机柜的电源、固件和网络。

1.3 这套方案真正解决什么问题

具体来说,OpenRig的核心场景可以归纳成三类。

第一类是整柜交付与初始化。新机柜上电之后,你希望它自动完成BMC网络配置、固件检测、PXE引导设定,然后快速接入集群。没有这套机制的时候,这一阶段要人工一台台操作,一个48U机柜耗掉半天时间是常事。

第二类是固件与底层配置的持续管理。集群运行期间,固件更新、BIOS参数调整、带外账户轮换,这些事情需要可审计、可回滚、可批量执行。OpenRig通过声明式API把目标状态下发到各节点,你只需要声明“我要所有节点都处于这个固件版本”,剩下的差异比对和升级动作由系统处理。

第三类是故障状态下的人机协同。GPU服务器出故障时,你需要的不是盲目重启,而是先通过带外通道收集关键状态——传感器读数、SEL事件日志、电源状态——再决定下一步动作。OpenRig把这些信息统一呈现,并通过机柜管理器提供精细化的电源操作策略,避免“一台宕机导致整个机柜被连带”这种粗暴处理。

2. 核心架构拆解:控制面加数据面的分工逻辑

OpenRig的整体架构其实并不复杂,你可以把它想象成一套“带外管理的Kubernetes化形态”。它既有控制面组件,又有运行在带内和带外的各类数据面组件。搞清楚它们各自负责什么,后面部署和排障就不容易乱。

2.1 控制面:Kubernetes不是可有可无

OpenRig默认选择Kubernetes作为整个系统的底座,这一点值得多说一句。很多人第一反应是“多此一举,一个设备管理工具为什么要依赖K8s”。实际用下来你会发现,这个选择非常符合大规模基础设施管理的需求。

K8s带来的不只是容器编排,更重要的是声明式API、控制器循环、资源抽象和事件机制。你在K8s里定义一个Rack自定义资源(CustomResource),描述这个机柜的期望状态;Rack Manager控制器watch到这个状态变化,再去分发给具体的节点执行。整个过程可重入、可重试、可观测,天然适合底层基础设施这类需要高可靠性的场景。

而且K8s这件事和你的业务集群并不冲突。OpenRig本身部署在一个独立的、小而精的Kubernetes集群上,很多团队的实践是这个管理集群只跑OpenRig相关组件和少量监控,跟生产计算集群隔离开。管理面单独跑,避免生产集群故障时连管理通道一起瘫痪。

2.2 Rack Manager:整个机柜的中枢神经

Rack Manager是OpenRig架构里的核心服务,它承担了连接控制面和硬件数据面的角色。在传统带外管理架构里,你指挥的是一个BMC,再往上是厂商的集中管理平台,但这个平台通常闭源且功能固定。OpenRig的Rack Manager是开源的,你可以按自己的需求扩展。

从功能上看,Rack Manager要处理三件事。

首先是机柜拓扑管理。它知道这个机柜里有哪几个节点、哪些交换设备、供电链路怎么走,整个拓扑关系可以由配置文件声明,也可以通过Redfish自动发现。有了拓扑,你下发指令时就不必关心具体IP,直接说“给3号机柜的node-15重启”,系统自动解析到对应的BMC。

其次是状态汇聚与事件管理。Rack Manager会周期性从各节点的BMC采集传感器数据、电源状态、SEL事件,并把它们归一化处理。这个归一化很关键,因为不同厂商BMC的Redfish实现差异很大,有的字段缺失,有的单位不一致,Rack Manager负责把这些差异消化掉,向上呈现统一的数据模型。

第三是指令分发与协调。比如对整个机柜做电源时序控制,Rack Manager先检查供电负载,再按照配置好的顺序逐台执行,保证冲击电流不超过设定值。类似这种机柜级协同逻辑,单台设备的BMC是做不到的。

2.3 OpenBMC与数据面组件:硬件能被“云原生”管理的前提

这么一套系统的数据面,依赖的是一个非常重要的前提:你的BMC要是可编程的。主流服务器品牌(比如浪潮、超微、戴尔、HPE)的BMC各有各的底层实现,API风格差异很大。OpenRig社区主推的方案是OpenBMC——一个开源BMC固件栈——因为在OpenBMC体系里,你能拿到完整的Redfish接口实现,甚至能构建自己的BMC镜像。

不过在纯用商业服务器的场景里,也没法全量替换成OpenBMC。实际部署时,OpenRig的这套体系更多是兼容为主:只要你的BMC支持Redfish标准接口,Rack Manager就能接入;对于OpenBMC原生设备,则可以做更深层的集成,比如直接读取传感器原始值、控制风扇策略、读写固件分区。

带内部分通常还有一个轻量agent,部署在计算节点的操作系统里,用于处理带内网络配置、PXE引导确认、节点健康上报等逻辑。这个agent不需要常驻大量资源,它的存在是为了在操作系统和Rack Manager之间开一条双向通道,让Rack Manager能了解带内的实际状态——比如系统是否已完全启动、某个服务是否就绪。

2.4 声明式API与状态机设计

OpenRig把整机柜资源建模成标准数据模型,通过CRD暴露给上层。比如Rack对象包含节点的硬件型号、BMC地址、固件版本、引导设定;FirmwareUpdate对象描述一次批量的固件升级任务;PowerPolicy对象定义电源策略。每个对象都有明确的spec(期望状态)和status(实际状态),控制器持续比较两者之间的差异,并执行调和逻辑。

这套思路和K8s的ReplicaSet管理工作负载是同构的。你不需要告诉系统“怎么升级这20台机器”,你只需要把FirmwareUpdate对象的状态字段改成目标版本,控制器自己会去推进流程。如果中间某台卡住,状态变成Failed,控制器不会继续带偏其他的,而是等待你调整策略或标记跳过。

3. 关键设计决策背后的逻辑

任何一个复杂系统,最值得学习的不是“它做了什么”,而是“它为什么这么做”。OpenRig里几个关键设计取舍,放到实际场景里都能说出道理来。

3.1 为什么用Rack Manager而不是直接操作各个BMC

理论上你完全可以从控制面直接调每台服务器的Redfish接口,省掉Rack Manager这个中间层。但实战中,这个中间层几乎不可或缺。

直连BMC第一个问题是状态割裂。你有100台机器,每台独立的Redfish,查询“当前所有节点的传感器状态”这种看似简单的需求,要并发发起100个请求,然后自己聚合结果,还得处理各种超时、拒连、数据格式不一致。Rack Manager把这些脏活累活都接住了,上层的查询永远只面对一个聚合后的接口。

第二个问题是事务性。批量操作最怕半途而废:20台节点里第8台失败,前面7台已经改完了,后面12台没动,你要自己写补丁逻辑。Rack Manager对批量任务有状态机和补偿机制,任务失败会留在一个明确的终态,并给出已成功/已失败的清单,方便你做后续动作。这比脚本里无脑for循环要可靠得多。

第三个问题是安全与审计。带外管理是所有基础设施里权限最重的通道,在一个统一的Rack Manager上做RBAC和操作审计,比散到每台BMC上做要简单得多。至少你不会出现“这个人只知道A厂商的BMC密码,却对B厂商一无所知”这种权限梳理混乱的局面。

3.2 为什么控制面选K8s而不是自研服务

自研一个管理服务也能实现类似功能:收到指令、调用BMC口、返回结果。但做下去你会发现,自己在重造一套K8s的基础设施:需要任务队列、需要CRUD接口、需要高可用、需要持久化存储、需要配置管理。OpenRig选择K8s,等于把这些都已经具备的能力直接拿过来用。

还有一个更实际的好处:你运维团队里懂K8s的人一定比懂BMC协议的人多。一个新的生命周期管理任务,写一个operator或controller来扩展,比在自研服务里新增一套业务逻辑更容易被理解和维护。说白了,生态跟技术熟练度决定了长期成本,K8s这层的投资可以说是“基础设施管理员的共同语言”。

3.3 Redfish标准在OpenRig里的地位

Redfish这个标准今天已经成了带外管理的通用语言,OpenRig对它的依赖程度相当高。如果你对Redfish不熟,简单理解就是一套基于RESTful JSON的API规范,定义服务器各硬件部件的资源模型。BMC实现Redfish,就意味着外部程序可以像访问一个Web服务一样查询/设置硬件状态。

在实际接入时,Redfish的版本差异是个大坑。同样的Sensor资源,有的BMC返回的温度单位是Celsius,有的漏掉Units字段;有的固件版本在UpdateService里存在,有的则要通过SoftwareInventory才能看到。Rack Manager的核心能力之一就是把Redfish异构差异“结界”住,让上层API呈现一致的数据模型。这也提醒你,在选型硬件时尽量挑Redfish实现规范的设备,能省非常多的接入成本。

3.4 状态复用的价值:带内带外一体化

很多基础设施管理方案只做带外,很少考虑带内。OpenRig把带内Agent纳入体系,是因为纯带外状态下有大量“信息盲区”:BMC能告诉你机器是否加电、是否报错,但说不清操作系统启动到什么阶段、某个系统服务是否正常、网络包是否能通过特定VLAN。

带内Agent补上这些盲区之后,你就能把“带外能看到的”和“带内实际发生的”做交叉验证。如果BMC显示系统已启动,但Agent迟迟不注册,那说明可能卡在内核加载或服务启动阶段;如果Agent健康但BMC传感器有异常,那可能是硬件隐患。这种交叉定位能力在大规模集群故障定位时价值极高。

4. 实操指南:从零到一套可用的OpenRig

这部分谈谈落地的具体路径。我默认你的环境是自有机房或IDC托管的标准整机柜场景,有至少一台能跑K8s的控制节点,其他节点作为被管对象。贴一套我能验证过的步骤和关键参数,你按需裁剪。

4.1 硬件与固件基线准备

先盘点硬件。OpenRig对被管节点有一个底线要求:BMC必须支持Redfish接口。这个条件听起来简单,但实际到货的设备里,某些老型号的BMC虽然支持,但Redfish实现残废,比如查询固件列表返回空、更新接口缺参数。建议在采购阶段就把“Redfish标准合规”写进技术标,至少在POC时验证几个关键Redfish操作:获取系统信息、获取传感器列表、设置引导参数、触发固件更新。这四个操作都能稳定跑通,后续接入OpenRig会非常顺。

控制面节点建议独立部署,不要和计算节点混装。配置需求不高,4核8G内存加一块100G以上的SSD就够了,重点是这个K8s集群的稳定性。OpenRig的控制面如果挂掉,你等于失去了整个机柜的带外管理通道——虽然各节点的BMC还能直接访问,但那就又退回人肉运维了。

如果用的是OpenBMC设备,还需要确认固件版本。OpenBMC对Redfish的支持在不同版本上有差异,建议使用最新的稳定版本。如果你有定制需求,得在构建固件阶段就通过bitbake集成好相关模块,这属于开源固件的玩法,后面单起一篇再细说。

4.2 软件栈安装与初始化

K8s集群就位后,安装OpenRig的核心组件。我给出的部署方式基于Helm Chart,这也是社区推荐的路径。

# 添加OpenRig Helm仓库 helm repo add openrig https://charts.openrig.io # 更新仓库并安装rack-manager helm repo update helm install rack-manager openrig/rack-manager -n openrig-system --create-namespace \ --set controlNode.ip=10.10.0.8 \ --set controlNode.port=8443

装完确认下Pod状态:

kubectl get pods -n openrig-system

正常情况下你会看到rack-manager主服务、一个controller-manager、一个event-collector以及若干webhook组件处于Running状态。

接下来是机器学习集群里最常见的注册环节:把机柜里的被管节点登记到Rack Manager。OpenRig支持两种方式:一种是通过配置文件批量导入节点元数据(BMC地址、凭据、位置编号),另一种是自动发现。我们以配置文件方式为例,它不仅适合了解系统,也让初始资产台账可以版本化管理。

先创建一个Rack资源定义:

apiVersion: infrastructure.openrig.io/v1alpha1 kind: Rack metadata: name: rack-03 spec: rackId: rack-03 nodes: - nodeName: node-15 bmcAddress: 10.10.11.15 bmcUsername: admin bmcPasswordRef: name: bmc-credential-rack03 key: password role: compute - nodeName: node-16 bmcAddress: 10.10.11.16 bmcUsername: admin bmcPasswordRef: name: bmc-credential-rack03 key: password role: gpu-worker

这里特别提一下凭据的管理方式。大型机房里面BMC密码是要定期轮换的,如果直接写在yaml里可能带来安全风险。推荐把BMC凭据存成K8s Secret,然后在Rack资源里通过SecretRef引用。这样控制器在用凭据调用Redfish时动态读取,轮换时只需更新Secret,不需要动Rack定义。

保存并应用之后,Rack Manager会开始对账这些节点。你可以通过查询Rack状态来确认连接是否成功:

kubectl get rack rack-03 -o yaml

看到所有节点都标记为Ready,说明Redfish握手成功,系统可以管理这批设备了。如果某个节点状态一直卡在Offline,大概率是BMC地址不通或者凭据错误,先检查这两个基本项。

4.3 常用操作:传感器查看、固件升级、电源控制

接入完成之后,日常操作开始变都得心应手。查看整个机柜的传感器状态,不用逐台BMC去拉:

openrigctl sensor list --rack rack-03

输出里会按节点分组,展示温度、电压、风扇转速等关键项。如果你对某些传感器设置了阈值,也能在输出里看到是否触发告警。

批量固件升级是重头戏。假设你想把机柜3里所有节点的BIOS升级到2.1版本,定义这样一个任务对象:

apiVersion: infrastructure.openrig.io/v1alpha1 kind: FirmwareUpdate metadata: name: bios-2.1-for-rack03 spec: rack: rack-03 component: BIOS imageUrl: http://mirror.internal/firmware/bios-2.1.rom targetVersion: "2.1" strategy: type: Rolling batchSize: 5 pauseBetweenBatches: 5m

关键点是strategy策略。你不会希望一次性对全柜机器刷固件的,万一固件有问题,整个机柜全趴了。配成Rolling更新,一次只处理5台,批间暂停5分钟,可以观察前面节点刷完是否启动正常再继续。这就是声明式API带来的好处——升级策略本身作为配置,而不是写在脚本里的硬编码。

电源操作比你想的简单,而且支持带条件控制的指令。比如要重启某个节点,但要求系统已正常关机后再断电:

openrigctl power reset --node rack-03-node-15 --grace --timeout 120

加上grace参数,指令会先尝试通过带内Agent下发优雅关机,如果120秒内系统还没关,才退回带外硬断电。这个场景在GPU节点上很实用——直接硬断电有时会导致GPU卡状态异常,能优雅重启就尽量优雅。

4.4 网络与引导配置的自动化

在裸金属数据中心里,重装系统是高频操作。OpenRig对PXE引导的配置很值得一用。传统做法是登录BMC Web界面改One-time Boot项,一台台改;用OpenRig只需要在节点资源里声明期望的引导方式:

apiVersion: infrastructure.openrig.io/v1alpha1 kind: BootConfig metadata: name: pxe-boot-rack03 spec: rack: rack-03 bootMode: PXE persists: false

persists设为false,意味着这是一次性的引导覆盖,下次重启时会自动恢复正常引导顺序。这个设计很贴心,避免了“上次为了装系统改了PXE忘了改回来,导致机器反复尝试网络启动”这种经典事故。

机柜内交换机端口的VLAN配置,也可以借助Rack Manager编排。通过定义NetworkConfig资源来指定节点端口所属的VLAN和速率,Rack Manager会调用交换机或带内Agent做配置。这一层打通之后,新节点上线时的网络初始化就能一并自动化了。

5. 常见问题与排查实录

实操过程中我遇到过不少问题,整理几个有代表性的,给后续入坑的朋友当参考。

5.1 BMC连接慢或握手失败

现象:Rack Manager对待管节点标记Offline,排查日志看到反复Redfish连接超时。

原因分析:一种典型情况是BMC侧的Session管理有并发限制。K8s控制器的对账循环会周期性访问所有节点的BMC,默认频率可能超过某些BMC的承载能力,导致BMC拒绝新的session或响应变慢。

解决方案分两步。第一步调整控制器的对账频率,把Rack Manager对单节点的查询间隔从默认调大到可接受范围,比如15秒以上;第二步确认Redfish请求的并发数,不要在Rack Manager上配置过大的并发池,通常每个机柜10-20个并发就够了。

另外一个常被忽略的问题是IPMI通道和Redfish通道的资源竞争。某些BMC里IPMI的SDR数据访问会长期占用传感器资源,导致Redfish侧查传感器时响应超时。如果你确认Redfish本身没问题但就是响应慢,可以看看IPMI侧是不是有进程频繁采集传感器数据。

5.2 固件升级任务卡住不回滚

现象:FirmwareUpdate任务走到某个节点之后一直处于Upgrading状态,不前进也不失败。

排查逻辑:先看Rack Manager日志里该节点的升级进度,确认是卡在固件上传阶段还是激活阶段。很多BMC的固件更新接口是异步的,任务提交后BMC内部执行,但Rack Manager需要轮询确认执行结果。卡住往往是因为BMC返回的轮询URL无效或轮询状态长时间不变。

另外一个坑是固件上传校验失败。有些BMC对固件包有严格的完整性校验,图片URL指向的如果是一个被反代改写过或截断过的文件,上传后校验不过,但BMC不会明确报错,只是状态一直挂在“更新中”。这种情况建议先手动临时下载固件包,做好SHA256校验并确认大小;排除这个问题后再查BMC侧日志。

如果确认是BMC实现问题导致的轮询异常,可以用强制终态的方式把任务标记起失败,避免阻塞其他节点的升级任务。声明式系统的优势这时候就体现出来了,它允许你干预状态而不破坏整体流程。

5.3 机柜级电源操作出现误触

现象:对某节点执行power reset,但实际重启的是另一个节点。

原因:这是非常需要警惕的事故类问题。出现这种问题,最直接的原因是Rack资源里的节点位置信息(比如节点槽位编号)与实际的物理连接不一致。特别是机房做过设备挪动、接线整改之后,资产台账容易出现错位。

排查建议:先在Rack Manager上核对节点BMC地址和物理位置的映射关系,然后登录对应BMC的Web界面确认机器SN和所在槽位。发现不一致,直接更新Rack资源定义中的拓扑信息。连续性运维期间,只要做过任何物理变更加电操作,都建议重跑一次拓扑对账,而不是靠信任静态台账。

还有一个细节是这个Rack Manager实现对电源命令有没有二次确认机制。如果一个操作涉及整柜断电或批量重启,建议在策略配置层面加一层强确认,类似“必须指定--yes-please”这种方式,防止运维脚本误触发连锁电源反应。这种防御性设计在各家大规模IDC运维系统里都有,OpenRig没有强制,但你可以通过配置接口自定义加挂。

5.4 带内Agent注册异常

现象:部分节点带外状态正常,但带内Agent一直不上报,Rack Manager显示节点OperatingSystemStatus不当。

排查要点:先确认Agent进程是否真的在运行——有些节点操作系统版本过旧,Agent依赖的系统库不满足,运行失败但进程退出被systemd自动忽略了。再看网络层面,Agent要和Rack Manager建立长连接,如果计算节点的业务VLAN和管理网络的连通性做了隔离,那Agent连不上是正常的,需要在网络层面开放管理平面。

另一个高频原因是认证问题。Agent首次注册时会生成一个客户端证书或Token,如果你的管理集群重建过CA或证书轮换过,Agent端没跟着更新,会导致reject。遇到这种情况,删掉旧Agent资源,让Agent重新注册一次即可,不开心的反而是你得去控制面清理旧的CRD对象。

5.5 和小规模场景的适配性探讨

不少朋友会问:我只是一个小机房,十几台机器,有必要上这么重的体系吗?我的看法是做取舍。如果你只有十几台机器,OpenRig这套体系确实偏重,维护K8s控制面的成本可能高于直接操作BMC的耗时。但如果你预计未来会扩容,或者已经吃过“设备规模上来后带外管理失控”的亏,那从第一天就按这个体系来反而是划算的——因为它把资产配置、固件基线、操作审计这些长期要用的机制一次性建立起来了。

具体判断标准是看你的管理操作频率和并发要求。如果一个月也做不了几次固件升级,纯手工其实无所谓;如果你每周都要批量改启动项、调电源策略、维护固件版本,那自动化体系的收益非常明显。技术选型不是越重越好,而是匹配自己的组织规模。

6. 一些实战心得与扩展思路

写到这里,最后分享几个我自己用下来的体会,供参考。

第一点是标准化真金白银。不要贪便宜买Redfish实现不完整的BMC设备,哪怕便宜几百块钱,接入OpenRig时多花的排查时间可能远超这个差价。测试Redfish合规性有个土办法,拿curl调BMC的/redfish/v1根路径,看看字段全不全、返回是否符合规范,通常能看出七成问题。

第二点是凭据管理要提前做。BMC密码全部存到K8s Secret,并用外部Secret管理工具做轮换,这件事能早做就早做。等你有了几百台设备再回头补凭据盘点,会非常痛苦,而且手工输错的概率很高。

第三点是全链路可观测性。OpenRig本身会暴露一些基础的监控指标,建议把它们接进你现有的Prometheus体系,同时对Rack Manager日志做集中收集。没事的时候这些日志确实不起眼,一旦出事故,它们能帮你快速定位是Rack Manager的问题还是BMC的问题。

扩展方向上,目前社区在推进GPU卡级别的深度管理和整机柜液冷场景的传感器联动,这些会让OpenRig不再是“基础设施的管理工具”,而更像“硬件资源统一调度平台”。另外和现有裸金属交付体系(比如Ironic)的集成,也有不少团队在尝试,目标是让“装上系统”和“管好硬件”无缝衔接,把整机柜的初始化和日常运维彻底自动化。

如果你的团队正在规模化管理和维护裸金属集群,那OpenRig值得在下一个测试环境里跑一跑。别一上来就想着全量接管,先在几个非关键节点上做一个POC,把Rack Manager、节点注册和一套固件升级流程跑通,感受一下声明式管理与传统脚本管理带来的体验差异。

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

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

立即咨询