Agent Substrate 架构解析
Agent Substrate 不是用来开发 Agent 的框架,而是用来安全、高密度地运行 Agent 和 Sandbox 的基础设施运行时。
项目地址:agent-substrate/substrate(GitHub)
它主要解决一个问题:如果一个平台要为大量用户分别创建独立的 AI Agent 执行环境,如何同时实现安全隔离、状态持久化、快速唤醒和资源复用?
结合 Kubernetes 的视角,可以把它理解为:在 Pod 和容器之上,为有状态、间歇性运行的 Agent 增加一层专用的调度与执行管理系统。
1. 为什么需要 Agent Substrate?
传统 Kubernetes 部署通常是一个应用对应一个或多个 Pod。但 AI Agent 的工作模式有些特殊:
-
用户发起任务后,Agent 执行推理、调用工具或运行代码。
-
调用大模型、等待用户输入时,Agent 可能长时间处于空闲状态。
-
Agent 往往需要保留运行时内存、文件系统和会话状态。
-
Agent 执行的代码可能不可信,需要严格的安全隔离。
如果每个用户的 Agent 都长期占用一个独立的 Pod,就可能浪费大量资源;如果任务到来时才创建 Pod,又可能引入调度和启动延迟。
1.1. 核心思路:Actor 与 Worker 解耦

这里最重要的是两个概念:
-
Actor:逻辑上的一个 Agent 实例,具有自己的身份、状态和生命周期。
-
Worker:实际承载 Actor 的执行资源,通常由预先启动的 Kubernetes Pod 提供。
多个 Actor 可以共享一组 Worker 的计算资源,但同一时刻实际执行的 Actor 仍然需要相应的执行容量。空闲 Actor 可以被挂起并保存状态,需要继续执行时再恢复。
这与传统的“一份 Agent 对应一个长期运行的 Pod”是不同的资源管理模型。
1.2. 核心组件与 Kubernetes 对应关系
从源码和架构文档来看,Agent Substrate 的主要组件可以这样理解。
| 组件 / 概念 | 作用 | Kubernetes 视角 |
|---|---|---|
ActorTemplate |
定义 Actor 的运行镜像、资源及运行参数 | 类似工作负载模板,但不是 Deployment |
Actor |
一个具体的、有状态的运行实例 | 不等于 Pod,生命周期独立于 Worker |
WorkerPool |
管理可用于执行 Actor 的 Worker 容量 | 类似执行资源池 |
Worker |
真正承载沙箱执行环境 | 通常由 Kubernetes Pod 承载 |
Atespace |
Actor 的租户与命名空间边界 | 类似逻辑租户隔离,不能简单等同于 Namespace |
ate-api-server |
处理 Actor、Worker 生命周期等控制请求 | 专用控制面 |
atelet |
节点级监督、快照和状态迁移 | 类似节点 Agent / DaemonSet |
atenet |
负责网络路由与代理等功能 | 类似专用数据面与网络控制组件 |
kubectl-ate |
通过命令行管理 Substrate 资源 | 类似 kubectl 的扩展工具 |
注意:这些是帮助理解的类比,不代表它们与 Kubernetes 原生资源一一对应。
可以把它理解为:
-
ActorTemplate决定“这个 Sandbox 运行什么”。 -
Actor决定“这是哪个用户或任务的独立运行实例”。 -
WorkerPool决定“实际执行资源从哪里来”。 -
SandboxConfig决定“使用哪个沙箱运行时版本”。 -
Snapshot 决定“挂起后如何保留和恢复状态”。
2. Substrate的部署架构

从部署视角看,可以分成五层:
| 层次 | 主要组件 | 作用 |
|---|---|---|
| API 与控制面 | ate-api-server | Actor 生命周期、调度、快照编排 |
| Kubernetes 管理层 | atecontroller、CRD | 将 WorkerPool 等资源转换成实际 Kubernetes 工作负载 |
| 节点管理层 | atelet | 节点上的 Worker 管理、镜像准备、快照传输 |
| Sandbox 执行层 | Worker Pod、ateworker/ateom、gVisor 或 MicroVM | 真正运行 Actor |
| 网络与存储层 | atenet、atunnel、PostgreSQL、对象存储 | 请求转发、身份认证、状态和快照持久化 |
2.1. 部署的k8s 工作负载
下面是按组件整理的部署清单。具体 Pod 数量、容器组合和名称会随版本、安装选项变化。
| 工作负载 | K8s 类型 | 部署位置 |
|---|---|---|
| ate-api-server | Deployment | ate-system |
| atecontroller | Deployment | ate-system |
| atelet | DaemonSet | ate-system |
| atenet | Deployment / 相关代理工作负载 | ate-system |
| podcertcontroller | Deployment | 证书控制器命名空间 |
| ate-idp-server | Deployment | ate-system |
| PostgreSQL | StatefulSet 或外部数据库 | ate-system 或外部 |
| Worker | Deployment 管理的 Pod | Worker 节点 |
| ateom / ateworker | Worker 内部容器 | Worker Pod |
| atunnel | Worker 内部网络服务 | Worker Pod |
| Object Store Plugin | Sidecar | 相关组件 Pod |
这里有个容易误解的地方:ateom、atunnel 不一定是独立的 Kubernetes Deployment,它们属于 Worker 内部的运行组件。Object Store Plugin 也可能以 Sidecar 方式运行,而不是单独部署一个集群级服务。
2.2. 外部基础设施依赖
除了 Substrate 自身组件,还需要准备外部基础设施。
| 依赖 | 作用 | 是否必要 |
|---|---|---|
| Kubernetes | 承载所有组件和 Worker Pod | 必须 |
| PostgreSQL | 保存 Actor、Worker 等控制面状态 | 必须 |
| 对象存储(GCS/S3) | 保存 Actor 快照、模板快照 | 持久化快照场景必须 |
| 节点本地存储 | 缓存运行时资源、快照文件 | 需要 |
| gVisor 或 MicroVM 环境 | 提供 Sandbox 隔离运行时 | 必须至少选择一种 |
| Pod 证书能力 | 提供内部身份认证和 mTLS | 按部署版本和配置要求 |
| 凭据提供服务 | 为 Actor 的出站请求注入受控凭据 | 按功能配置 |
这里尤其要区分 PostgreSQL 和对象存储:
-
PostgreSQL 保存的是 Actor 的元数据和状态,不是 Actor 的完整内存。
-
对象存储保存的是 Actor 的快照文件。
-
atelet负责节点与对象存储之间的快照传输。
官方架构还包含 Object Store Plugin,用来为快照上传、下载和资源缓存提供统一的对象存储接口。
2.3. 实际部署顺序
从零部署时,我建议按以下依赖顺序理解。
-
准备 Kubernetes 集群
准备节点、网络、存储、证书 API,以及 Worker 所需的运行时能力。
-
准备外部基础设施
部署 PostgreSQL、对象存储、IAM / Workload Identity 等。
-
部署 Kubernetes 扩展能力
安装 Substrate CRD、证书相关组件、
podcertcontroller。 -
部署控制面
安装
ate-api-server、atecontroller。 -
部署节点管理组件
安装
ateletDaemonSet。 -
部署网络组件
安装
atenet、Router、相关隧道和代理能力。 -
创建 WorkerPool
选择 gVisor 或 MicroVM,配置 Worker 数量和资源。
-
创建 ActorTemplate
配置 Actor 镜像、资源限制、快照存储位置等。
-
创建 Actor 并验证
创建 Actor,验证启动、访问、Suspend、Resume。
3. 核心组件及功能
2.1 控制面组件【ate-api-server】
这是 Substrate 的核心控制面,主要负责:
-
提供 gRPC API,供 CLI、上层 Agent 平台调用。
-
创建、删除和管理 Actor。
-
管理 ActorTemplate、Atespace、Tag 等资源。
-
维护 Actor 与 Worker 的映射关系。
-
选择可用 Worker,完成 Actor 调度。
-
编排 Actor 的 Suspend、Resume、Checkpoint、Restore。
-
进行 API 身份认证和权限校验。
它的内部主要包含三个逻辑部分:
| 内部模块 | 功能 |
|---|---|
| State Store | 保存 Actor、Worker 状态及映射关系 |
| Scheduler | 选择可用 Worker |
| Workflow Engine | 编排 Actor 暂停、恢复等多步骤操作 |
部署形态: Kubernetes Deployment。
它不直接运行 Agent,也不直接操作底层 Sandbox,而是通过节点管理组件协调执行。
2.2 Kubernetes Controller【atecontroller】
这是 Substrate 与 Kubernetes 之间的桥梁。
主要负责:
-
Watch Substrate 定义的 Kubernetes CRD。
-
监听 WorkerPool 的创建、修改和删除。
-
根据 WorkerPool 配置创建或更新 Kubernetes Deployment。
-
维护 Worker Pod 的期望状态。
例如,创建一个 WorkerPool:
apiVersion: ate.dev/v1alpha1
kind: WorkerPool
metadata:
name: gvisor-pool
spec:
replicas: 10
Controller 负责将它转换为实际运行的 Worker Pod。
部署形态: Kubernetes Deployment。
注意:ActorTemplate 并不是 Kubernetes CRD,它通过 Substrate API 管理;WorkerPool 才是 Kubernetes 侧管理的资源。
2.3 节点管理组件【atelet】
atelet 是运行在 Kubernetes Node 上的节点级管理进程。
它主要负责:
-
监听和管理当前节点上的 Worker。
-
准备 Sandbox 需要的镜像和运行时资源。
-
组装 OCI Bundle。
-
调用 Worker 内部的管理进程执行 Sandbox 启动。
-
协调 Actor 的 Checkpoint 和 Restore。
-
将快照上传到对象存储,或从对象存储下载快照。
-
管理节点本地的 Sandbox Asset Cache。
它是整个数据面的重要执行协调者。
部署形态: Kubernetes DaemonSet。
也就是说,符合调度条件的每个 Node 都会运行一个 atelet。
2.4 Worker 内部管理组件【ateom / ateworker】
这是运行在 Worker Pod 内部的 Sandbox 管理进程。
不同版本和文档中使用过 ateworker、ateom 这些名称。当前架构文档使用 ateom 描述这一层的职责。
它主要负责:
-
接收
atelet下发的操作。 -
创建和管理 Actor 对应的 Sandbox。
-
调用底层 Sandbox Runtime。
-
执行 RunWorkload、CheckpointWorkload、RestoreWorkload。
-
管理 Actor 的网络连接。
-
通过内部网络服务
atunnel转发 Actor 流量。
它与 atelet 的关系是:
| 组件 | 所在位置 | 主要职责 |
|---|---|---|
| atelet | Kubernetes Node | 管理节点上的 Worker,协调生命周期和快照 |
| ateom | Worker Pod 内 | 具体操作 Sandbox,驱动运行时 |
| atunnel | Worker 内部网络服务 | 接收经过认证的流量并转发给 Actor |
部署形态: Worker Pod 内的容器或管理进程,具体由 WorkerPool 选择的 Sandbox 类型决定。
2.5 Sandbox Runtime
Substrate 需要真正提供隔离执行环境的底层 Runtime。
目前主要有两种运行时实现:
2.5.1. gVisor
-
使用用户态内核提供系统调用隔离。
-
由
runsc执行 Sandbox 的创建、Checkpoint 和 Restore。 -
相比完整虚拟机,运行开销通常更低。
-
是 Substrate 默认使用的隔离运行时之一。

2.5.2. MicroVM
-
使用轻量级虚拟机提供隔离。
-
当前实现使用 Cloud Hypervisor。
-
Worker 需要具备相应虚拟化能力。
-
适合需要更强虚拟化隔离边界的场景。

对应的 Worker 管理程序包括:
-
ateworker-gvisor -
ateworker-microvm
注意:不能直接把普通 runc 容器当作 Substrate 已支持的 Sandbox Runtime。Substrate 的设计依赖运行时支持的 Checkpoint/Restore 能力。
2.6 网络组件【atenet】
atenet 是 Substrate 的网络组件集合,负责 Actor 流量入口、路由和网络隔离。
主要包括:
| 组件 | 功能 |
|---|---|
| atenet-controller | 管理网络相关配置和代理工作负载 |
| atenet-router | Envoy 网关,接收 Actor 请求并进行路由 |
| atunnel | Worker 内部隧道服务,将请求转发到 Actor |
其中 atenet-router 是一个非常重要的组件。
例如,上层 Agent 平台访问某个 Actor:
POST /execute HTTP/1.1
Host: agent.example.com
ate-target-actor: demo/my-agent
路由过程:
-
Router 识别请求中的 Actor 标识。
-
调用
ate-api-server查询 Actor 状态。 -
如果 Actor 已暂停,则触发 Resume。
-
Control Plane 分配 Worker。
-
atelet和 Worker 内部管理进程恢复 Actor。 -
Router 与 Worker 的
atunnel建立认证隧道。 -
atunnel将请求转发到 Actor。
这样,上层应用不需要知道 Actor 当前在哪个 Worker 上。
2.7 身份认证组件【podcertcontroller】
这是 Kubernetes Pod 证书签发控制器。
主要负责:
-
为 Substrate 组件提供短期证书。
-
为组件提供可验证的身份。
-
支持内部服务之间的 mTLS 通信。
-
为 Actor 运行环境提供身份认证基础。
部署形态: Kubernetes Deployment 或相应控制器工作负载。
此外,还有:
ate-idp-server
负责提供 OpenID Connect Discovery 文档和 JWKS 公钥信息,供依赖方验证 Actor JWT。
它与 podcertcontroller 不是同一个东西:
-
podcertcontroller:解决 Pod 及内部组件的证书身份问题。 -
ate-idp-server:提供 JWT 验证所需的身份提供方元数据。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.