项目概述
Kurrent(周流)是一套面向裸金属算力的无状态交付系统。该系统将身份、系统与数据从物理机器上剥离:计算节点本身不持有需要持久化的业务状态,启动时由网络与控制面授予身份、系统盘和凭据。节点因此成为可替换的位置,系统成为被交付与调度的对象。
身份在设备台账,系统盘在存储侧,声明在配置文件中,凭据由控制面签发。
节点上留下的,只有一次启动所需的临时连接。问题定义
云原生在过去十年解决了应用的弹性:容器可以重建、迁移、滚动升级,不再绑定于某台机器。但承载应用的物理节点仍按传统方式维护:安装系统、配置网络、重装、换机、迁移,均依赖人工或另一套独立的基础设施。
Kurrent 处理的是这一层的问题:使承载系统的机器同样可替换。它不替代应用编排,也不将状态隐藏于另一套存储抽象;它重新定义启动时身份与系统的来源,使“更换机器”不再等同于“重装系统”。
核心主张
节点不持有持久状态
计算节点可以随时断电、替换、重新上架。它的系统来自网络,身份由控制面按绑定关系授予,数据在系统盘上。节点本地不保存系统副本,也无需为每台机器维护一份安装记录。
设备 NVRAM 中保留的是启动身份密钥与服务器证书指纹。它们是身份锚点,不是系统状态:不承载业务数据,不随系统迁移,丢失后需要重新登记。
系统是调度单元
被交付的不是一个应用进程,而是一整个可启动系统:计算身份(Worker)、系统盘、启动凭据与设备绑定共同构成它。系统归属于身份,不归属于机器;机器只是系统此刻所在的位置。
这一定位决定了控制面的对象模型:设备、Worker 与系统盘是三个独立实体,绑定关系有唯一权威,磁盘与机器解耦。应用与上层编排运行在系统之内,不属于 Kurrent 的调度范围。
身份与系统盘解耦
设备通过 MAC 识别,计算身份由 Worker 表示,系统盘以 NQN 标识。三者之间的绑定关系可以变更:设备换绑到另一个 Worker,即一次冷迁移;系统盘保留在原处,无需重新制作。
盘内不写死机器身份。启动时由控制面按当前绑定投影连接信息,因此同一块系统盘可以在不同设备上启动,前提是身份与凭据匹配。
数据面不经过控制面
设备与存储节点之间的块读写走独立的数据面,控制面只负责开通、身份与配置。控制面故障会影响新的开通与引导,但不会中断已经建立的 I/O。
数据面默认加密:NVMe/TCP 单端口 4421 使用 TLS 1.3,固件段与内核段共用;认证使用 DH-HMAC-CHAP,TLS 预共享密钥由认证密钥派生。缺少密钥或端口未就绪时拒绝引导,不回落明文。
与 Kubernetes 的关系
Kubernetes 调度的单元是应用负载,它默认节点已经存在、系统已经装好。Kurrent 交付的单元是承载应用的系统,它处理的是 Kubernetes 之下的那一层。
两者不在同一层,可以叠加:Kurrent 将裸机转换为可替换的系统载体,Kubernetes 或其他编排系统运行在这些系统之内。Kurrent 不提供启动后的应用编排,也不要求替换现有的上层平台。
三类角色
| 角色 | 职责 | 主要组件 |
|---|---|---|
| 控制面 | 身份、台账、绑定、存储调度、引导变量、审计 | 控制面服务、nginx、dnsmasq、WebUI、CLI |
| 存储节点 | 承载母盘与系统盘,导出块设备 | Agent、nvmet-host、宿主内核 nvmet |
| 设备 | 无状态算力,网络启动后成为某个 Worker 的引导节点 | 设备固件(iPXE)、系统盘内的操作系统 |
管理面 443(唯一入口)
浏览器 / CLI ───────────────► 控制面服务器
│ dnsmasq:DHCP / TFTP
│ 控制面:身份 / 台账 / 调度
▼
裸机设备 ── PXE / HTTPS 引导 ──► 引导变量(盘 NQN、Host NQN、凭据)
│
└──── NVMe/TCP 4421(TLS 1.3)────► 存储节点(Agent + nvmet-host)三实体模型
| 实体 | 标识 | 权威归属 |
|---|---|---|
| 设备(Device) | MAC | 设备台账;绑定关系权威在设备侧 |
| Worker | worker_id(主机名) | 控制面台账;代表计算身份 |
| 系统盘(System Disk) | NQN | 存储节点上的盘文件;控制面记录归属 |
设备生命周期为 pooled → bound → revoked;Worker 的 readiness 由“是否绑定设备”和“是否有系统盘”派生。一台 Worker 可以挂多块系统盘,默认盘决定菜单超时后的启动项。
交付中的三个角色
控制面负责身份、台账与连接信息;存储节点从母盘克隆系统盘并将块设备导出;设备通过 DHCP/TFTP 取得引导脚本,经 HTTPS 完成身份应答后,从网络启动所属 Worker 的系统盘。更换设备时,仅需将设备重新绑定至同一 Worker,系统盘与身份保持不变。
部署采用一套标准流程:控制面与存储节点可分离或同机,完成后进入交付流程。母盘定制属于一次性准备,不随每次部署重复。
能力
- 零接触入池:注册窗口内,带有效公钥的设备可自动登记;窗口关闭后不再入池。
- 设备身份:设备私钥在 NVRAM 内生成,挑战-应答验签;支持密钥轮换。
- 绑定与换绑:设备与 Worker 一对一;换绑为原子操作,解绑后设备回池。
- 系统盘:母盘克隆、4K 原生 GPT 校验、放置策略、默认盘与多系统盘。
- 数据面:NVMe/TCP + TLS 1.3,单端口
4421,无明文回退。 - 凭据生命周期:建盘即签发 DHHC-1;轮换、吊销、推送对账与重启恢复。
- 声明式配置:控制面与节点各一份 YAML;写盘前全量校验,失败回滚。
- 管理入口:WebUI、CLI、REST API;证书、token 与会话三种认证方式。
- 身份与审计:三类 CA、主体类默认拒绝、逐序列号吊销、请求级审计与告警。
- 固件:独立仓库维护 iPXE 补丁与构建产物;设备固件负责引导层能力。
当前边界
Kurrent 当前聚焦控制面与数据面的最小闭环,不以“已经覆盖全部运维场景”为前提。
- 已验证发行版:Debian 12/13、Ubuntu 24.04/26.04、Fedora 44、AlmaLinux 10.2、openSUSE Leap 16.0 完成整机冷启动;验证范围不构成发行版限制。
- 部署前提:独立的 PXE 网段与存储节点宿主前置(内核 NVMe/TCP TLS 配置、
tlshd >= 1.5.0、支持 reflink 的文件系统)。 - 尚未提供:启动后的应用编排、控制面高可用、IPv6、ARM、数据盘挂载、活迁移;Windows 与 ESXi 在路线图中。
- 状态存储:控制面当前为单机、纯文件台账,没有数据库与多节点一致性机制。
- 引导信任边界:DHCP/TFTP 首跳没有密码学保护,部署要求将 PXE 网段作为独立信任边界;主线固件未签名。
- 固件现状:设备固件由独立仓库构建,主线不包含 Secure Boot 签名的操作路径;iPXE 侧 NBFT 生成仍是待实现项。