Agent Substrate 多模板 Demo 完整指南:两种工作负载跨 3 个命名空间共享一个 WorkerPool
2026/9/20 13:24:02 网站建设 项目流程

Agent Substrate 多模板 Demo 完整指南:两种工作负载跨 3 个命名空间共享一个 WorkerPool

【免费下载链接】substrateAgent Substrate: the core system项目地址: https://gitcode.com/GitHub_Trending/substrate7/substrate

Agent Substrate是一个为智能体(Agent)工作负载打造的执行运行时,它能把大量「Actor」高效复用到少量常驻「Worker」上,实现亚 500ms 的恢复延迟。本文带你玩转它的多模板(Multi-Template)Demo:让counterfspersist两种完全不同的工作负载,从 2 个 atespace(隔离边界)出发,跨 3 个命名空间共享同一个 WorkerPool,一次看清 Substrate 的资源调度模型。

🎯 这个 Demo 证明了什么?

一句话:WorkerPool 是「镜像无关」的通用算力池。

  • 一个WorkerPool的 Pod 里只运行 ateom 监督程序,不绑定任何业务镜像;
  • 每个ActorTemplate自带自己的工作负载镜像,并通过workerSelector(标签选择器)认领算力池;
  • 选池是集群级的——不受 atespace 或命名空间限制。即使两个模板身处不同的 atespace,只要标签匹配,就能共用同一个池。

两个工作负载的分工也很巧妙:

工作负载二进制验证点
counter内存计数器服务内存状态在 gVisor 挂起/恢复后依然存活
fspersist文件历史服务文件系统状态随 Actor 跨 checkpoint/restore 持久化

fspersist的源码见 fspersist.go:每次请求把一行「Pod IP + 计数 + 时间戳」写入根文件系统,计数从文件而非内存中读回——文件跟着 Actor 迁移,历史就不断累积。

📦 资源布局:2 种工作负载、3 个命名空间

命名空间内容
ate-demo-multi-template-pool唯一的WorkerPoolshared-pool,3 副本)
ate-demo-multi-template-counteratespace,存放counterActorTemplate
ate-demo-multi-template-fspersistatespace,存放fspersistActorTemplate

核心清单:

  • 算力池定义:multi-template.yaml.tmpl —— 为池打上workload: multi-template-shared标签
  • counter 模板:counter-template.yaml.tmpl —— 通过workerSelector.matchLabels用同一标签认领池
  • fspersist 模板:fspersist-template.yaml.tmpl —— 同样标签,跨 atespace 命中同一个池

⚠️ 不要手动编辑demos/multi-template/*.yaml.tmpl,安装脚本会在部署时自动注入${BUCKET_NAME}等变量。

🚀 一键部署:3 步跑通多模板共享池

前置条件:已安装 Agent Substrate 的 K8s 集群(./hack/install-ate.sh --deploy-ate-system)、ko构建工具、以及存放快照的 GCS 存储桶(BUCKET_NAME环境变量)。

步骤 1:构建并部署(一条命令)

./hack/install-ate.sh --deploy-demo-multi-template

它会依次完成:

  1. ko构建counterfspersist镜像;
  2. 创建shared-pool(3 副本)并等待 rollout;
  3. 创建两个 atespace 并各建一个 ActorTemplate;
  4. 等待两个模板的 Golden Snapshot 构建完成。

对应实现逻辑可参考 install-demo-multi-template.sh。

步骤 2:每个模板各创建一个 Actor

go install ./cmd/kubectl-ate # 尚未安装 CLI 时执行 kubectl ate create actor c1 -a ate-demo-multi-template-counter --template counter kubectl ate create actor f1 -a ate-demo-multi-template-fspersist --template fspersist

Actor 按(atespace, name)寻址,DNS 名称中内嵌其 atespace。

步骤 3:端口转发路由器并发起请求

kubectl port-forward -n ate-system svc/atenet-router 8000:80

然后通过atenet路由器访问,Substrate 会自动识别会话、把休眠的 Actor 唤醒到可用 Worker 上并代理流量:

# counter:内存计数 +1 curl -s -H "ate-target-actor: ate-demo-multi-template-counter/c1" http://localhost:8000 # -> hello from: <ip> | preserved memory count: 1 # fspersist:文件系统历史 curl -s -H "ate-target-actor: ate-demo-multi-template-fspersist/f1" http://localhost:8000 # -> pod: <ip> # --- history --- # pod=<ip> | count=0 | time=<timestamp>

两个请求头中的ate-target-actor由「Actor 名 + atespace」共同构成完整路由键,这正是两种工作负载互不干扰的关键。

🔍 验证:两个 Actor 确实落在同一个池

kubectl ate get workers

可以看到c1f1都调度在shared-pool的 Worker 上。再玩一个「状态穿越」实验:

kubectl ate suspend actor f1 -a ate-demo-multi-template-fspersist curl -s -H "ate-target-actor: ate-demo-multi-template-fspersist/f1" http://localhost:8000

挂起后再请求,Actor 从快照恢复——历史文件原样保留,计数继续增长。这同时验证了内存(counter)与文件系统(fspersist)两类状态在快照/恢复周期中的持久性。

🧹 一键卸载:避免残留资源

./hack/install-ate.sh --delete-demo-multi-template

该命令按正确顺序删除:两个 Actor(运行中的先挂起)→ 两个模板 → 两个 atespace → 池及其命名空间。

📚 延伸阅读

  • 官方 Demo 说明:demos/multi-template/README.md
  • 核心术语(Actor、Atespace、WorkerPool、Worker 的关系):docs/glossary.md
  • WorkerPool / ActorTemplate 完整配置参考:docs/api-guide.md
  • 对照 Demo(单一模板的计数器):demos/counter/README.md

💡小结:多模板 Demo 用最小成本展示了 Agent Substrate 的核心设计哲学——池是算力,模板是身份,标签是桥梁。当你需要用有限 Worker 承载多套异构 Agent 负载时,这就是可以直接抄作业的参考实现。

【免费下载链接】substrateAgent Substrate: the core system项目地址: https://gitcode.com/GitHub_Trending/substrate7/substrate

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询