跳转到内容

在 GKE 沙箱上自托管

GKE 后端把 Session Work 分派到 Google Kubernetes Engine 集群上的 Agent Sandbox Pod。它使用 poll_unacked_then_dispatch 策略:分派器先保留 Work 但不 ACK,回收过期的 SandboxClaim,通过原子 get-or-create 认领绑定一个暖 Pod,只发送 Session/Work id。随后 Pod 内的 ant beta:worker run 接管 Work 的 ACK、心跳和停止。

  • 装有 Agent Sandbox CRD、认领模板和暖池的 GKE 集群。
  • 一个 GkeSandboxClaimControlPlanePort 实现——Kubernetes SDK 适配器或 OpenMA 自有的集群内驱动服务。
  • 一个 GkeManagedWorkControlPort,使分派器能强制停止超过 maxRedispatch 的 Work。

GKE 通过 createManagedEnvironmentWorkerInstallation 的 provider_dispatch 模式接入,或直接使用 @open-managed-agents/environment-dispatch-gke 的 createManagedEnvironmentWorkDispatchPort:

const dispatch = createManagedEnvironmentWorkDispatchPort({
controlPlane, // SandboxClaim list/delete/create/postSession
workControl, // Work stop
namespace: "openma",
template: "openma-sandbox-template",
warmPool: "openma-warm-pool",
readyTimeoutMs: 120_000, // 默认值
maxRedispatch: 3, // 默认值
});

namespace、template、warmPool 是必需的非空字符串;warmPool 指定每个认领绑定的 Kubernetes Agent Sandbox 暖池。该端口上报 provider gke-agent-sandbox、策略 poll_unacked_then_dispatch。

认领带有标签 openma.environment-id、openma.session-id、openma.work-id、openma.dispatch-count。每次分派会列出该 Session 的既有认领、删除属于其他 Work id 的过期认领,并以幂等键 <workId>:<dispatchCount> 创建下一个认领。当 dispatchCount 将超过 maxRedispatch 时,端口会停止该 Work,而不是无限循环。

Providergke-agent-sandbox
策略poll_unacked_then_dispatch
Work 所有者Pod 内 ant beta:worker run(ACK、心跳、停止)
过期认领每次分派时回收
重分派受 maxRedispatch 约束(默认 3)