这个项目能做什么
Agent Sandbox 是一个 Kubernetes operator 风格的项目,它定义了 `Sandbox` 自定义资源定义(CRD)和控制器,用于需要隔离、长时间运行、单容器环境且具有稳定身份和持久存储的工作负载。它旨在介于 Kubernetes Deployment(面向无状态、可复制的 Pod)与 StatefulSet(提供编号副本而非专用的单例沙箱抽象)之间。
核心 `Sandbox` 资源管理一个有状态的 Pod。文档中记录的能力包括稳定的主机名和网络身份、可在重启后存活的持久存储,以及控制器管理的生命周期操作,如创建、定时删除、暂停和恢复。用户通过 Pod 模板定义 Pod,并可通过其稳定主机名访问生成的沙箱。
该项目明确是一个沙箱编排器,而非容器隔离运行时。它通过 `RuntimeClass` 配置 Kubernetes Pod 使用安全沙箱运行时,将底层内核和网络隔离委托给 gVisor 或 Kata Containers 等项目。当与合适的运行时配合使用时,这使其适用于多租户或不可信代码场景,同时将安全边界留给所选运行时和 Kubernetes 配置。
一个可选的扩展模块添加了更高级别的 API:
- `SandboxTemplate` 为类似沙箱定义可复用配置。
- `SandboxClaim` 请求一个沙箱,可能来自预热池,而无需暴露所有底层配置细节。
- `SandboxWarmPool` 维护预热的沙箱以实现更快的分配。
架构遵循 Kubernetes 控制器模式:用户创建 Sandbox、Claim、Template 或 WarmPool 自定义资源,控制器将这些对象协调为 Pod 和其他 Kubernetes 资源。README 中的架构图展示了 Claim 从预热池采用沙箱,以及预热池引用模板。
安装以使用 `kubectl` 应用的发布清单形式提供。标准清单同时安装核心和扩展组件,而单独的清单允许仅安装核心和可选扩展。README 还记录了使用 Kustomize 从源代码渲染清单、Helm chart、用于 CRD 和控制器部署的验证命令以及卸载步骤。它警告删除 CRD 会级联删除其自定义资源。
通过 Go 和 Python SDK 支持编程访问。Go SDK 通过 `go get sigs.k8s.io/agent-sandbox/clients/go/sandbox` 安装,Python SDK 以 `k8s-agent-sandbox` 发布。可选的 Sandbox Router 是一个 HTTP 反向代理,可以将来自 SDK 或外部客户端的流量路由到沙箱 Pod,包括无法直接进行 Pod 端口转发的环境。
文档中记录的用例包括执行 LLM 生成代码的隔离 AI 代理运行时、强化学习和评估循环(如 SWE-bench 或 R2E-Gym 工作负载)、持久开发环境、Jupyter 风格笔记本会话、研究工具以及小型有状态单 Pod 服务。期望的长期特性包括深度休眠、网络连接时自动恢复、高效弹性存储、在支持时由运行时辅助的内存共享、更丰富的身份和连接性,以及应用程序和代理的编程式消费。
该项目在 Kubernetes SIG Apps 下开发,采用 Apache-2.0 许可证。高级配置文档涵盖规模和并发调优,如 API QPS 和工作线程数,另有单独的威胁模型描述安全边界和缓解措施。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。