Kibotos

核心概念

Template、Workspace 与 Volume 是每次使用 Kibotos 都会遇到的对象。本页介绍它们和其他对象、Workspace 的状态,以及控制面与数据面两条访问路径。

对象

flowchart LR
  T["Template<br/>revision"] -->|创建时确定| W[Workspace]
  W ---|绑定 0 或 1 个| V[Volume]
  W -.->|网络策略引用| E[Egress]
  W -.->|网络策略引用| R[Resolver]
  X[Exposure] -->|公开一个端口| W
  W -->|导出| TR[Transfer]
  TR -->|恢复为新的| W2[Workspace]

Template 与 revision

Template 是创建 Workspace 用的系统镜像,例如最小系统、编程工具链或桌面环境。

  • 每次发布产生一个不可变的 revision,部署方为每个 Template 选定一个默认 revision(default revision)。
  • 创建 Workspace 时可以只写 Template,由系统选当前的默认 revision;也可以指定 revision。
  • 选定后不再改变:部署方之后发布新版本、改了默认 revision,已经存在的 Workspace 不跟着换。

Workspace

Workspace 是 Agent 工作的环境,每个 Workspace 运行在自己的 MicroVM 里。

  • 创建后 ID 不变。
  • 每次成功启动是一次新的运行,称为执行代(generation),从 1 开始递增。停止后,这一次运行的凭证、进程和连接全部失效,下次启动要重新申请凭证。
  • 属性有 CPU、内存、可写层大小、到期时间、网络策略、labels 与 annotations。可写层(writable layer)是根文件系统上可写的部分,保留规则见保证与边界。
  • Volume 与可写层存放在部署方的存储池里。每次启动时,系统选一台能访问这些存储池的宿主运行它,可能与上次不是同一台。

Volume

Volume 是独立于 Workspace 的持久卷。

  • 创建 Workspace 时默认同时创建一个独占的 Volume,挂在 /data;也可以绑定已有的 Volume,或不要 Volume。
  • 一个 Workspace 最多绑定一个 Volume,一个 Volume 同时只属于一个 Workspace。Workspace 停止后可以换绑或解绑,下次启动时生效。
  • 默认创建的 Volume 随 Workspace 一起删除,绑定的已有 Volume 默认保留,都可以在绑定时改。数据在什么情况下保留见保证与边界。

其他对象

对象是什么详见
Exposure把 Workspace 里的一个 HTTP 端口换成一条公开的 https:// 地址公开 URL
Egress调用方提供的出站代理。网络策略引用后,出站连接经由它。要求 v0.3.0 或更新版本调用方自带的出口
Resolver调用方提供的 DNS 服务器。网络策略引用后,DNS 查询经由它。要求 v0.3.0 或更新版本调用方自选的 Resolver
Transfer把已停止 Workspace 的 Volume 导出成归档,再导入成新的 Volume、恢复成新的 Workspace(ID 不同)导出、导入与恢复
labels 与 annotations挂在 Workspace、Volume 等对象上的键值对。labels 可以用来筛选列表,annotations 只保存labels 与 annotations

Workspace 的状态

stateDiagram-v2
  CREATING --> AVAILABLE
  AVAILABLE --> STOPPING: 停止 / 到期
  STOPPING --> STOPPED
  STOPPED --> STARTING: 启动
  STARTING --> AVAILABLE
  AVAILABLE --> FAILED: 出错
  FAILED --> STOPPED: 强制停止
  STOPPED --> DELETING: 删除
  DELETING --> DELETED
状态含义
CREATING正在选宿主、准备 Template、启动 MicroVM
AVAILABLE正在运行,可以访问文件和进程
STOPPING正在停止
STOPPED已停止,不占用 CPU 和内存
STARTING正在启动
FAILED创建、启动或运行中出了问题
UNKNOWN一个操作的结果暂时无法确认
DELETING正在删除
DELETED已删除,仍能按 ID 查询

图中只画了主干:

  • 除 DELETING 与 DELETED 外,任何状态都可以直接删除。
  • 创建和启动过程中出错也会进入 FAILED。
  • guest 是否在回应(RESPONDING 或 UNRESPONSIVE)单独报告,不改变状态。

每个状态下能做哪些操作、FAILED 怎样恢复,见各状态下能做的操作与从 FAILED 恢复。

控制面与数据面

访问 Kibotos 有两条路:

控制面(control plane)数据面(data plane)
做什么创建、查询、停止、删除 Workspace,管理 Volume、Exposure 等对象读写文件、运行进程、打开终端和桌面
发给谁ctrl运行 Workspace 的宿主
怎样认证部署方签发的 Operator 身份,双向 TLS先向 ctrl 申请的短期会话凭证(data-plane session credential)

文件和进程的流量不经过 ctrl,所以大文件和长时间的输出不受控制面的负载影响。代价是多一步申请凭证,并在 Workspace 重新启动后重新申请;kibo 和 E2B 网关会自动完成这一步。请求怎样流动见架构。

写操作的约定

约定做法
幂等键(command ID)每个写请求带一个调用方生成的幂等键。用同一个幂等键重发不会重复执行,结果已经出来时直接拿到结果
期望版本(expected revision)修改已有对象时带上读到的版本号。别人先改过时请求被拒绝,不会悄悄覆盖
结果未知请求超时或连接中断时,用原来的幂等键重发,或查询该命令的结果。换一个幂等键会变成一个新的操作

具体字段与错误码见原生 API 的写操作的约定。

本页内容