|
| 1 | +--- |
| 2 | +title: "Cube on Kubernetes:K8s 做运维底座,Cube 负责 Sandbox 快路径" |
| 3 | +--- |
| 4 | + |
| 5 | +# Cube on Kubernetes:K8s 做运维底座,Cube 负责 Sandbox 快路径 |
| 6 | + |
| 7 | +## 摘要 |
| 8 | + |
| 9 | +Agent 应用正在把 sandbox 从“可选隔离手段”变成基础设施能力。过去我们习惯用 Pod、容器或虚拟机承载代码执行环境,但在高频创建、短生命周期、暂停恢复、模板预热和不可信代码隔离等场景下,传统 Kubernetes Pod 生命周期并不总是最合适的抽象。 |
| 10 | + |
| 11 | +本文讨论一种更适合 Agent Sandbox 的边界划分:Kubernetes 负责部署、节点、监控、日志、升级和资源池运维;Cube 负责 sandbox 创建、执行、暂停恢复、模板预热和 PVM/Micro-VM 隔离。换句话说,K8s 做运维底座,Cube 负责沙箱快路径。 |
| 12 | + |
| 13 | +## Agent 让 Sandbox 变成基础设施 |
| 14 | + |
| 15 | +随着 Agent、代码解释器、浏览器自动化、数据分析助手和自动化运维任务越来越多,应用不再只是调用模型,还需要动态创建一个可以执行代码、访问工具、处理文件、调用网络资源的隔离环境。 |
| 16 | + |
| 17 | +这个环境通常有几个特点: |
| 18 | + |
| 19 | +- 生命周期短,可能只存在几秒到几分钟。 |
| 20 | +- 创建频率高,单个 Agent 任务可能多次创建执行环境。 |
| 21 | +- 执行内容不完全可信,需要强隔离。 |
| 22 | +- 需要直接的 API,例如 `run_code`、`exec`、文件上传下载、端口访问。 |
| 23 | +- 可能需要暂停、恢复、快照和模板预热。 |
| 24 | + |
| 25 | +如果只是“跑一个长期服务”,Pod 是非常自然的抽象。但如果目标是“快速创建一个可执行的安全沙箱”,Pod 生命周期就不一定是最短路径。 |
| 26 | + |
| 27 | +## 常见误区:把 Sandbox 等同于 Pod |
| 28 | + |
| 29 | +在 Kubernetes 体系里,一个自然想法是:既然要在集群里创建隔离环境,那就把每个 sandbox 做成一个 Pod。 |
| 30 | + |
| 31 | +这种方式有明显好处: |
| 32 | + |
| 33 | +- 可以复用 Kubernetes API。 |
| 34 | +- 可以复用 scheduler、kubelet、CNI、ServiceAccount 等机制。 |
| 35 | +- 企业已有的运维和治理体系更容易接入。 |
| 36 | + |
| 37 | +但它也会带来一些不适合 Agent Sandbox 的问题。 |
| 38 | + |
| 39 | +首先,Pod 创建路径天然较长。一次 sandbox 创建要经过 kube-apiserver、scheduler、kubelet、CRI/runtime、CNI 等多个组件。对普通在线服务来说,这个路径是合理的;对高频短任务来说,它可能成为主要延迟来源。 |
| 40 | + |
| 41 | +其次,Pod 生命周期和 Agent Sandbox 生命周期并不完全一致。Agent 关心的是:创建一个沙箱、执行一段代码、保存或丢弃状态、暂停或恢复、暴露某个运行时端口。Pod 关心的是:声明式期望、容器状态、调度、重启策略、Service 发现。这两套语义有重叠,但不是一回事。 |
| 42 | + |
| 43 | +第三,Cube 的一些核心能力并不适合被完全压进 Pod 语义里。例如模板预热、Micro-VM 快速创建、PVM 隔离、快照恢复、运行时代码执行 API,这些能力更像一个 sandbox runtime 控制面,而不是传统工作负载编排。 |
| 44 | + |
| 45 | +所以问题不是“Kubernetes 好不好”,而是:**每个 sandbox 的生命周期是否必须由 Kubernetes API 承担。** |
| 46 | + |
| 47 | +## 推荐边界:K8s 管系统,Cube 管沙箱 |
| 48 | + |
| 49 | +更合理的方式是把边界拆开。 |
| 50 | + |
| 51 | +Kubernetes 负责系统层能力: |
| 52 | + |
| 53 | +- 部署 Cube 控制面。 |
| 54 | +- 部署节点侧 Daemon。 |
| 55 | +- 管理节点池和节点标签。 |
| 56 | +- 做健康检查、升级和回滚。 |
| 57 | +- 接入 Prometheus、日志、告警和审计。 |
| 58 | +- 提供基础资源池和运维体系。 |
| 59 | + |
| 60 | +Cube 负责 sandbox 运行时能力: |
| 61 | + |
| 62 | +- 创建和销毁 sandbox。 |
| 63 | +- 模板预热和版本管理。 |
| 64 | +- `run_code` / `exec` / 文件操作。 |
| 65 | +- 暂停、恢复、快照。 |
| 66 | +- PVM / Micro-VM 隔离。 |
| 67 | +- sandbox 网络入口和端口访问。 |
| 68 | + |
| 69 | +这不是绕开 Kubernetes,而是让 Kubernetes 做它擅长的事,让 Cube 做它擅长的事。 |
| 70 | + |
| 71 | +## 为什么不强行走 K8s API |
| 72 | + |
| 73 | +不强行走 K8s API,主要有四个原因。 |
| 74 | + |
| 75 | +第一,Agent Sandbox 需要快路径。 |
| 76 | + |
| 77 | +Agent 的一次工具调用或代码执行,可能只需要几十毫秒到几百毫秒的执行时间。如果创建环境本身要走完整 Pod 调度路径,端到端体验会被拉长。Cube 可以围绕模板预热、运行时复用和 sandbox API 设计更短路径。 |
| 78 | + |
| 79 | +第二,Sandbox API 更贴近 Agent 开发者。 |
| 80 | + |
| 81 | +Agent 应用开发者通常希望调用: |
| 82 | + |
| 83 | +```text |
| 84 | +CreateSandbox |
| 85 | +RunCode |
| 86 | +UploadFile |
| 87 | +ExposePort |
| 88 | +Pause |
| 89 | +Resume |
| 90 | +DestroySandbox |
| 91 | +``` |
| 92 | + |
| 93 | +而不是直接操作: |
| 94 | + |
| 95 | +```text |
| 96 | +Pod |
| 97 | +Job |
| 98 | +Service |
| 99 | +Ingress |
| 100 | +Exec subresource |
| 101 | +``` |
| 102 | + |
| 103 | +后者适合平台工程团队,前者更适合 Agent 应用。 |
| 104 | + |
| 105 | +第三,Cube 的优势在 runtime,而不是把自己伪装成 Pod。 |
| 106 | + |
| 107 | +Cube 的价值在于快速创建 sandbox、模板预热、PVM/Micro-VM 隔离、暂停恢复、高密和复用。如果强行把 Cube 完全包装成 Pod runtime,很多能力会被 Kubernetes 工作负载模型稀释。 |
| 108 | + |
| 109 | +第四,计算节点可以更干净。 |
| 110 | + |
| 111 | +对于专用 sandbox 节点,Cube 可以直接管理 VMM、网络、存储和运行时生命周期。Kubernetes 仍然可以负责部署和运维,但不必参与每个 sandbox 的创建路径。这样节点上的职责更清晰,也更容易围绕 sandbox 隔离模型优化。 |
| 112 | + |
| 113 | +## 这对 Kubernetes 用户有什么好处 |
| 114 | + |
| 115 | +这种方式不是让用户离开 Kubernetes。相反,它让已有 Kubernetes 用户用更低成本获得 Agent Sandbox 能力。 |
| 116 | + |
| 117 | +用户仍然可以复用: |
| 118 | + |
| 119 | +- 已有集群和节点资源。 |
| 120 | +- 监控、日志、告警体系。 |
| 121 | +- 镜像仓库和发布流程。 |
| 122 | +- 权限和运维流程。 |
| 123 | +- 节点扩缩容能力。 |
| 124 | + |
| 125 | +变化只是:Agent Sandbox 的运行时生命周期,不再强行建模为 Pod,而是交给 Cube API 或 E2B 兼容 API。 |
| 126 | + |
| 127 | +这对已有 Kubernetes 资源池的客户尤其重要。他们不一定希望迁移到全新的 Serverless 平台,也不一定希望把不可信 Agent 代码继续放在普通容器里。Cube on Kubernetes 提供了一个折中路径:资源和运维体系仍然在自己熟悉的环境里,sandbox 运行时能力交给更合适的系统。 |
| 128 | + |
| 129 | +## 实践架构 |
| 130 | + |
| 131 | +一个推荐的整体架构如下: |
| 132 | + |
| 133 | +```text |
| 134 | +Agent / Application |
| 135 | + | |
| 136 | + v |
| 137 | +Cube API / E2B-compatible API |
| 138 | + | |
| 139 | + v |
| 140 | +Cube Control Plane on Kubernetes |
| 141 | + | |
| 142 | + v |
| 143 | +Cube Node Daemon on dedicated nodes |
| 144 | + | |
| 145 | + v |
| 146 | +PVM / Micro-VM Sandbox |
| 147 | +``` |
| 148 | + |
| 149 | +Kubernetes 负责: |
| 150 | + |
| 151 | +```text |
| 152 | +Deploy control plane |
| 153 | +Deploy node daemon |
| 154 | +Manage nodes |
| 155 | +Expose gateway |
| 156 | +Collect metrics |
| 157 | +Collect logs |
| 158 | +Handle upgrades |
| 159 | +``` |
| 160 | + |
| 161 | +Cube 负责: |
| 162 | + |
| 163 | +```text |
| 164 | +Create sandbox |
| 165 | +Warm template |
| 166 | +Run code |
| 167 | +Pause / resume |
| 168 | +Route sandbox traffic |
| 169 | +Destroy sandbox |
| 170 | +``` |
| 171 | + |
| 172 | +这个架构的关键点是:Kubernetes 参与系统运维,但不参与每个 sandbox 的快路径。 |
| 173 | + |
| 174 | +## 后续最佳实践方向 |
| 175 | + |
| 176 | +要把这套模式真正沉淀为社区最佳实践,还需要继续补齐几类内容: |
| 177 | + |
| 178 | +- 一键部署:Helm、DaemonSet、节点标签、节点独占。 |
| 179 | +- 模板预热:模板构建、分发、状态检查和升级。 |
| 180 | +- 网络入口:wildcard domain、path-based routing、TLS、访问控制。 |
| 181 | +- 可观测:sandbox 创建耗时、执行耗时、节点状态、模板状态。 |
| 182 | +- 安全:API 鉴权、租户隔离、出网控制、审计日志。 |
| 183 | +- 性能测试:与 Pod Job、Kata、gVisor 等路径做同口径对比。 |
| 184 | + |
| 185 | +## 小结 |
| 186 | + |
| 187 | +Cube on Kubernetes 的核心不是“把 Cube 变成另一种 Pod”,而是让 Cube 和 Kubernetes 各自站在更合适的位置上。 |
| 188 | + |
| 189 | +Kubernetes 适合做运维底座,Cube 适合做 Agent Sandbox runtime。对于 Agent 时代的安全执行环境,这种边界更自然,也更容易发挥 Cube 的快启动、模板预热、PVM 隔离和暂停恢复能力。 |
| 190 | + |
| 191 | +一句话总结: |
| 192 | + |
| 193 | +> K8s 管部署和资源池,Cube 管 sandbox 快路径。 |
0 commit comments