在 Kubernetes 上运行?devin-outpost-k8s
是一个开源 Operator,可为你实现这一循环:它会监视
队列、认领待处理的会话,并将每个会话作为工作器 pod 运行在任何
认证集群上 (GKE、EKS、…) 。请通过它的 Helm chart 安装,
而不是自行构建编排器。
核心流程
1. 注册一个 outpost
rhel、gpu-h200 或 my-outpost) 。使用 devin worker outpost create 创建一个:
在 fleet API 中,Outposts 表示为
outposts 资源,其作用域限定在
你的账户下 (由其所有组织共享) 。请参阅
outposts 端点。2. 监听 fleet API 中等待的会话
metadata.session_id 执行 upsert,并容忍重复。有关查询参数、响应格式以及完整的分页语义,请参阅 列出排队的会话 和 监听变更。
3. 预配前先认领
acceptor_id —— 这是工作器自行上报的身份标识:
409。认领意味着会有一个工作器在服务器分配的认领截止时间 (status.claim_deadline) 内就绪;过期的认领会自动返回队列。如果预配失败,请释放认领,以便该会话立即返回队列。
4. 启动一台机器并运行工作器
--acceptor-id,并通过 --token 或 DEVIN_OUTPOSTS_TOKEN 提供令牌 (参见完整开关列表) 。工作器会连接到 Devin 的云端,将会话标记为就绪,并开始执行工具调用。
5. 在工作器退出时终止机器
devin worker start 退出时,会话即告结束 (或已暂停) 。终止 VM 或容器。如果你的 outpost 支持恢复,请在终止前为机器创建快照,以便在会话恢复时还原。
你的编排器可以跟踪它已认领的会话及其状态:
status.session_status 都会显示为 pending、running、suspended 或 terminated。
去中心化调度
如果你计划运行超过约 16 个协调组件 (即监视并从 outpost 认领任务的工作器或 编排器) ,请先联系你的账户团队——更大的集群会加剧认领竞争并提高队列读取负载,我们希望确保 outpost 已为此做好相应配置。
- 认领是唯一的协调机制。 每个工作器都会独立监视队列,并竞争认领待处理的会话。认领是在服务器上执行的原子 compare-and-swap 操作:恰好只有一个工作器会成功,其他所有失败者都会收到
409,然后直接继续处理下一个待处理会话。认领竞争失败是正常情况,不是错误。 - 每个工作器都有自己的身份标识。
acceptor_id会将工作器的认领、续期和重启恢复限定在该工作器自身范围内。devin worker start会为每台机器自动生成并持久化一个,因此集群无需额外配置身份标识。切勿在不同机器之间共享 acceptor ID (或复制的工作器数据目录) ——发生冲突的工作器会互相抢走对方的认领。 - 故障会自行恢复。 如果工作器在认领后终止,其认领会在 claim deadline 到达时过期,该会话会返回队列,由其他工作器接手。无需进行集群级别的健康状态跟踪。
构建自定义编排器
devin worker start 的所有功能都可以直接通过 fleet API 实现,因此你可以完全替代 CLI:从 Devin 的静态分发源获取 devin-remote 二进制程序,并按照文档中说明的环境自行启动它。请参阅参考文档中的 远程二进制程序分发 和 spawn 约定。
