运行 AI Agent 或在线 IDE 时,用户会话间歇性活跃——传统 Serverless 实例空闲即销毁,再次访问需要冷启动且丢失所有运行状态。Knative支持Agent Sandbox 工作负载,可为每个会话分配独立 MicroVM,空闲时休眠并完整保留文件系统和 IP,再访问时秒级唤醒,同时可以按活跃会话数弹性伸缩,支持缩容到零。
工作原理
Agent Sandbox是一款面向生产级AI智能体的沙箱算力产品,提供以下核心能力:
MicroVM级别的隔离运行环境。
内存级休眠唤醒及Checkpoint克隆能力。
最高每分钟15K Sandbox的大规模弹性扩展能力。
全面兼容Kubernetes原生生态,无缝对接E2B SDK、AgentScope等主流AI Agent框架和工具。
阿里云Knative在Agent Sandbox之上提供Serverless能力支持,面向AI智能体场景设计。与传统无状态Serverless不同,Sandbox支持:
会话亲和:每个会话独占一个 Sandbox 实例(
target=1),请求始终路由到同一实例状态保持:休眠(Pause)时保留 Pod 的 IP和文件系统,唤醒后从中断处继续
智能弹性:按活跃会话数自动扩缩,空闲实例自动休眠,支持缩容到零
预热池预热:预创建并冻结指定数量的实例,新会话到来时秒级唤醒,无需等待冷启动
根据是否需要保留运行状态,Agent Sandbox 支持两种空闲策略:
维度 | Delete 模式(默认) | Pause 模式 |
空闲后行为 | 删除实例 | 冻结实例(保留状态) |
再次访问 | 冷启动(创建新实例) | 秒级唤醒(恢复已有实例) |
状态保留 | 不保留 | IP + 文件系统 |
资源占用 | 空闲时零资源 | 冻结实例占少量存储 |
适用场景 | 无状态任务、批处理 | AI Agent、在线 IDE、长会话 |
准备工作
确保相关组件符合要求:
安装或升级入口:在ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,单击组件管理。
升级kube-scheduler至符合要求的版本
安装 v2.13.0及以上版本的ACK Virtual Node
安装 v2.17.0 及以上版本的 ack-agent-sandbox-controller(使用默认配置即可)
已安装1.18.3及以上版本的 Knative 组件,详见部署与管理Knative组件
(可选,生产环境推荐)Activator 默认将会话映射存储在内存中,重启后可能丢失。生产环境或运行多个 Activator 副本时,建议使用 Redis 存储模式,需提前创建云数据库 Tair(兼容 Redis)实例。配置方法参见为 Knative 服务配置会话保持。
配置 Delete 模式
Delete 模式的行为等价于标准 Knative Service + 会话保持,即空闲实例直接删除,再次访问时重新创建。适用于无状态任务或不需要保留运行环境的批处理场景。
创建 Sandbox Service
将以下配置应用到集群,启用 Sandbox 工作负载类型和会话保持。
请将镜像地址中的
registry-cn-wulanchabu-vpc替换为实际地域,如registry-cn-hangzhou-vpc。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: ai-agent-delete spec: template: metadata: annotations: # 启用 Sandbox 工作负载类型 serving.knative.dev/workload-type: "sandbox" # 启用会话保持,确保每个用户请求路由到固定实例 serving.knative.dev/session-affinity: "true" # 30 分钟无请求后释放实例 serving.knative.dev/session-timeout: "30m" # Cookie 名称,用于标识用户会话 serving.knative.dev/session-affinity-cookie: "app" # 按活跃会话数扩缩容 autoscaling.knative.dev/metric: "session" # 每个实例严格绑定 1 个会话 autoscaling.knative.dev/target: "1" spec: containers: - image: registry-cn-wulanchabu-vpc.ack.aliyuncs.com/acs/knative-samples-helloworld-go-session:v1.0-bfdce98等待
ai-agent-delete部署完成后,在服务管理页面,获取访问网关地址和服务的默认域名。结果验证。
首次请求携带
Cookie: app=11,同一 Cookie 再次访问应路由到同一 Pod。curl -i -H "Host: ai-agent-delete.default.example.com" http://<GATEWAY_IP> \ -H "Cookie: app=11"预期输出:
HTTP/1.1 200 OK Date: Fri, 05 Jun 2026 08:00:53 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 75 Connection: keep-alive Hello World! Cookies: Name: app Value: 11 Raw Cookie Header: app=11再次请求携带
Cookie: app=22,该请求将会访问另一个Pod。curl -i -H "Host: ai-agent-delete.default.example.com" http://<GATEWAY_IP> \ -H "Cookie: app=22"预期输出:
HTTP/1.1 200 OK Date: Fri, 05 Jun 2026 08:02:49 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 75 Connection: keep-alive Hello World! Cookies: Name: app Value: 22 Raw Cookie Header: app=22
请求路由逻辑
配置生效后,用户请求的处理流程如下:
首个用户请求到达:无可用实例,自动扩容创建 Sandbox-1,会话绑定到 Sandbox-1。
第二个用户请求到达:Sandbox-1 已被 session-1 独占(target=1),请求等待,APA 自动扩容 Sandbox-2,会话绑定到 Sandbox-2。
用户 30 分钟未访问:会话超时,实例删除,资源释放。
所有用户均无活跃:缩容到 0,零资源占用。
配置 Pause 模式
Pause 模式是 Sandbox 的核心能力,专为 AI Agent、在线 IDE、远程开发等需要长期保留运行环境的场景设计。实例空闲后进入冻结状态而非删除。用户再次访问时,秒级恢复到中断前的工作环境,打开的文件、运行中的进程、已安装的依赖全部保留。
创建 Pause 模式 Sandbox Service
相比 Delete 模式,需增加
serving.knative.dev/sandbox-idle-policy: "pause"注解。请将镜像地址中的
registry-cn-wulanchabu-vpc替换为实际地域,如registry-cn-hangzhou-vpc。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: ai-agent-pause spec: template: metadata: annotations: serving.knative.dev/workload-type: "sandbox" serving.knative.dev/sandbox-idle-policy: "pause" serving.knative.dev/session-affinity: "true" # 指定暖池大小(预热的 Sandbox 实例数量) serving.knative.dev/warm-pool: "3" serving.knative.dev/session-timeout: "30m" serving.knative.dev/session-expiry: "2h" serving.knative.dev/session-affinity-cookie: "test" autoscaling.knative.dev/metric: "session" autoscaling.knative.dev/target: "1" spec: containers: - image: registry-cn-wulanchabu-vpc.ack.aliyuncs.com/acs/knative-samples-helloworld-go-session:v1.0-bfdce98等待
ai-agent-pause部署完成后,在服务管理页面,获取访问网关地址和服务的默认域名。结果验证。
curl -i -H "Host: ai-agent-pause.default.example.com" http://<GATEWAY_IP> \ -H "Cookie: app=11"预期输出:
HTTP/1.1 200 OK Date: Fri, 05 Jun 2026 08:33:06 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 75 Connection: keep-alive Hello World! Cookies: Name: app Value: 11 Raw Cookie Header: app=11
状态保留范围
Pause 后,以下状态完整保留,唤醒后无需重新初始化。
保留项 | 说明 |
IP 地址 | Pod IP 不变,网络连接可恢复 |
文件系统 | 容器内文件系统完整保留 |
配置预热池
预热池(Warm Pool)是 Pause 模式的高级配置,预先创建并冻结指定数量的 Sandbox 实例,使新用户到来时能直接唤醒已有实例,而无需等待冷启动。
通过以下Annotation指定预热池大小。
annotations:
# 指定预热池大小(预热的 Sandbox 实例数量)
serving.knative.dev/warm-pool: "3"Annotation参考
Annotation | 说明 | 默认值 |
| 工作负载类型,设为 | 无( |
| 空闲策略: |
|
| 启用会话保持 |
|
| 会话超时时间(无请求后释放/休眠) |
|
| 扩缩容指标,会话保持场景设为 |
|
| 每个实例的目标会话数 |
|
| 仅 Pause 模式有效 预热池大小 |
|
| 最小实例数 |
|
| 最大实例数 | 无限制 |
常见问题
Pause 模式和 Delete 模式如何选择?
取决于是否需要保留运行状态:
Pause 模式:需要保留容器状态(文件、进程)。
Delete 模式:无需保留状态,追求空闲时零资源占用。
多个用户的请求会路由到同一个 Sandbox 吗?
设置 target=1 时不会。每个 Sandbox 实例严格绑定一个会话,新用户到来时会等待新实例就绪或唤醒预热池中的冻结实例。
Activator 重启后会话会丢失吗?
取决于会话存储模式:
内存模式:单实例且有限恢复会话数据。
Redis 模式:从 Redis 完整恢复,零数据丢失。
因此,生产环境建议使用 Redis 模式以确保 Activator 重启后会话完整恢复。