Agent Substrate 多模板 Demo 完整指南两种工作负载跨 3 个命名空间共享一个 WorkerPool【免费下载链接】substrateAgent Substrate: the core system项目地址: https://gitcode.com/GitHub_Trending/substrate7/substrateAgent Substrate是一个为智能体Agent工作负载打造的执行运行时它能把大量「Actor」高效复用到少量常驻「Worker」上实现亚 500ms 的恢复延迟。本文带你玩转它的多模板Multi-TemplateDemo让counter和fspersist两种完全不同的工作负载从 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-pool3 副本ate-demo-multi-template-counteratespace存放counterActorTemplateate-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它会依次完成用ko构建counter和fspersist镜像创建shared-pool3 副本并等待 rollout创建两个 atespace 并各建一个 ActorTemplate等待两个模板的 Golden Snapshot 构建完成。对应实现逻辑可参考 install-demo-multi-template.sh。步骤 2每个模板各创建一个 Actorgo 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 fspersistActor 按(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 --- # podip | count0 | timetimestamp两个请求头中的ate-target-actor由「Actor 名 atespace」共同构成完整路由键这正是两种工作负载互不干扰的关键。 验证两个 Actor 确实落在同一个池kubectl ate get workers可以看到c1和f1都调度在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.mdWorkerPool / 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),仅供参考
