源码对象索引:模板、沙箱、节点、快照、端口
读源码时最常遇到的问题不是"这段代码做了什么",而是"这个对象到底存在哪个文件里"。
这份索引帮你快速定位 CubeSandbox 中最核心的源码对象。
1. 对象关系总览
2. 核心对象速查表
2.1 模板相关
| 对象 | 类型 | 所在模块 | 关键文件 | 说明 |
|---|---|---|---|---|
CreateCubeSandboxReq | 请求结构体 | CubeMaster | pkg/service/sandbox/types/ | 创建沙箱的完整请求 |
TemplateDefinition | 持久化对象 | CubeMaster | pkg/templatecenter/store.go | 模板定义,保存在 DB 中 |
NormalizeRequest() | 函数 | CubeMaster | pkg/templatecenter/store.go | 将原始请求规范化为模板语义 |
RootFS Artifact | 文件产物 | CubeMaster | pkg/templatecenter/template_image.go | 从 OCI 镜像导出的 rootfs |
AppSnapshot | 状态对象 | CubeMaster | pkg/templatecenter/cache.go | 模板的运行快照信息 |
LocalRunTemplate | 节点对象 | Cubelet | plugins/cube/ | 节点本地的运行模板 |
2.2 沙箱相关
| 对象 | 类型 | 所在模块 | 关键文件 | 说明 |
|---|---|---|---|---|
Sandbox | API 响应 | CubeAPI | src/models/mod.rs | 对外暴露的沙箱对象 |
SandboxDetail | API 响应 | CubeAPI | src/models/mod.rs | 沙箱详情(含资源信息) |
NewSandbox | API 请求 | CubeAPI | src/models/mod.rs | 创建沙箱的外部请求体 |
RunCubeSandboxRequest | gRPC 请求 | CubeMaster | api/services/cubebox/v1/ | 发给 Cubelet 的创建请求 |
RunCubeSandboxResponse | gRPC 响应 | CubeMaster | api/services/cubebox/v1/ | Cubelet 返回的创建结果 |
createSandboxContext | 内部上下文 | CubeMaster | pkg/service/sandbox/sandbox_run.go | 创建事务的完整状态 |
SandboxProxyMap | 路由对象 | CubeMaster | pkg/base/types/ | sandboxID → hostIP:port 映射 |
2.3 节点相关
| 对象 | 类型 | 所在模块 | 关键文件 | 说明 |
|---|---|---|---|---|
Node | 节点对象 | CubeMaster | pkg/base/node/ | 节点元数据(IP、资源、标签) |
SelectorCtx | 调度上下文 | CubeMaster | pkg/scheduler/selctx/ | 调度器使用的上下文 |
ReqRes | 资源需求 | CubeMaster | pkg/scheduler/selctx/ | CPU / 内存 / 磁盘需求 |
NodeSelector | 亲和性 | CubeMaster | pkg/scheduler/affinity/ | 节点选择条件 |
2.4 网络相关
| 对象 | 类型 | 所在模块 | 关键文件 | 说明 |
|---|---|---|---|---|
CubeVSContext | 网络上下文 | CubeAPI | src/cubemaster/mod.rs | CubeVS 网络配置 |
ExposedPort | 端口映射 | CubeMaster | pkg/service/sandbox/exposed_port_endpoint.go | 沙箱对外暴露端口 |
TAP | 网络设备 | network-agent | internal/service/ | TAP 设备管理 |
Session | NAT 会话 | CubeVS | CubeNet/src/session.h | NAT session map 条目 |
2.5 运行时相关
| 对象 | 类型 | 所在模块 | 关键文件 | 说明 |
|---|---|---|---|---|
Sandbox (agent) | guest 对象 | agent | src/sandbox.rs | guest 内沙箱状态 |
Container | 容器对象 | CubeShim | shim/src/container/ | Shim 管理的容器 |
Task | 任务对象 | CubeMaster | pkg/task/ | 异步任务(创建/销毁/恢复) |
3. 按模块查找
CubeAPI(Rust)
CubeAPI/src/
├── main.rs # CLI 参数、server 启动
├── routes.rs # 路由注册:build_router() → e2b + cubeapi
├── state.rs # AppState: rate_limiter, http_client, services, logger, config
├── config.rs # ServerConfig
├── constants.rs # 常量定义
├── handlers/
│ ├── sandboxes.rs # create / list / get / kill / pause / resume / connect
│ ├── templates.rs # create / list / get / rebuild / delete / update
│ ├── cluster.rs # cluster_overview / list_nodes / get_node
│ ├── health.rs # health check
│ ├── store.rs # store meta / refresh
│ └── config.rs # get config
├── services/
│ └── sandboxes.rs # SandboxService: 字段映射 + CubeMaster 调用
├── cubemaster/
│ └── mod.rs # CubeMasterClient: HTTP 客户端封装
├── middleware/
│ ├── auth.rs # unified_auth: Bearer / API-Key 鉴权
│ └── rate_limit.rs # governor token bucket 限流
├── error/
│ └── mod.rs # AppError 枚举 → HTTP status 映射
└── models/
└── mod.rs # Sandbox / SandboxDetail / NewSandbox 等CubeMaster(Go)
CubeMaster/
├── cmd/cubemaster/
│ ├── main.go # 进程入口
│ └── app/main.go # App.Run() → coreInit() → server.New()
├── pkg/
│ ├── server/server.go # gorilla/mux HTTP server + 路由注册
│ ├── service/
│ │ ├── httpservice/cube/sandbox_create.go # 创建 handler
│ │ └── sandbox/sandbox_run.go # CreateSandbox + createSandboxContext
│ ├── scheduler/
│ │ ├── init.go # InitScheduler()
│ │ ├── schedule.go # Select() 五阶段
│ │ └── selctx/ # SelectorCtx
│ ├── selector/
│ │ ├── prefilter/ # 预过滤
│ │ ├── filter/ # CPU / MEM / Disk / template_locality
│ │ ├── score/ # 打分
│ │ ├── postscore/ # 后处理
│ │ └── backofffilter/ # 降级选择
│ ├── templatecenter/ # 模板中心:store / cache / image
│ ├── localcache/ # 节点本地缓存 + Redis 路由表
│ ├── instancecache/ # 实例缓存
│ ├── nodemeta/ # 节点元数据
│ ├── task/ # 异步任务系统
│ └── cubelet/ # Cubelet gRPC 客户端
└── api/services/cubebox/v1/ # gRPC proto 定义Cubelet(Go)
Cubelet/
├── cmd/ # 进程入口
├── services/cubebox/ # 沙箱生命周期:create / destroy / update
├── plugins/
│ ├── workflow/ # 工作流引擎
│ ├── cube/ # 容器/MicroVM 创建
│ ├── network/ # 网络准备
│ ├── snapshots/ # 快照恢复
│ ├── mount/ # 存储挂载
│ └── metadata/ # 元数据管理
├── internal/ # 内部工具
└── api/ # 节点 API 定义4. 快速查找技巧
找某个 API 的实现:
- 先在
CubeAPI/src/routes.rs找路由注册 - 再去对应的
handlers/*.rs找 handler - handler 调用
services/*.rs中的 service 方法 - service 通过
cubemaster/mod.rs中的 client 调用 CubeMaster
找某个控制面逻辑:
- 先在
CubeMaster/pkg/server/server.go的registerHandlers()找路由 - 再去
pkg/service/httpservice/找 handler - handler 调用
pkg/service/sandbox/中的核心逻辑
找某个调度相关的代码:
CubeMaster/pkg/scheduler/schedule.go—Select()入口CubeMaster/pkg/selector/— 各阶段 selector 实现CubeMaster/pkg/scheduler/selctx/— 调度上下文
延伸阅读
- 源码阅读地图 — 全局组件拓扑
- 从一次创建请求看完整控制链路 — 创建链路串联
- 从一次 run_code 看完整数据链路 — 数据链路串联