在 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 已为此妥善配置资源。
- 认领是唯一的协调机制。 每个工作器都会独立监视队列,并竞争认领待处理的 session。认领在服务器上通过原子 compare-and-swap 完成:恰好只有一个工作器会成功,其他所有竞争失败者都会收到
409,然后直接继续处理下一个待处理的 session。认领竞争失败属于正常操作,并非错误。 - 每个工作器都有自己的身份标识。
acceptor_id会将某个工作器的认领、续期和重启恢复限定到该工作器自身。devin worker start会为每台 machine 自动生成并持久化一个,因此集群无需额外配置身份。切勿在多台 machine 之间共享 acceptor ID (或复制的工作器数据目录) ——发生冲突的工作器会互相抢走彼此的认领。 - 故障会自行恢复。 如果某个工作器在认领后终止,其认领会在 claim deadline 到达时过期,该 session 会返回队列,由其他工作器接手。无需进行集群级别的健康状态跟踪。
构建自定义编排器
devin worker start 的全部功能都可以直接通过 fleet API 实现,因此你可以完全替代 CLI:从 Devin 的静态分发获取 devin-remote 二进制程序,并按照文档说明的环境自行启动它。请参阅参考文档中的远程二进制程序分发和spawn contract。
