Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deployment の 先にある AI Agent 基盤 - kagent vNext、Ag...

Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810

Avatar for Masaya Aoyama (@amsy810)

Masaya Aoyama (@amsy810)

September 16, 2026

More Decks by Masaya Aoyama (@amsy810)

Other Decks in Technology

Transcript

  1. Deployment の 先にある AI Agent 基盤 kagent vNext、Agent Substrate、Hermes から読み解く

    Agent Runtime の現在地 Kubernetes 祭 #2 2026/9/16 Masaya Aoyama(@amsy810) CyberAgent
  2. 青山真也 X: @amsy810 + 3-shake 技術顧問 + SAKURA Internet Research

    Center – 客員研究員 + PLAID + CREATIONLINE - 技術アドバイザ TechLead & Product Owner Co-Chair Organizer CNCF Ambassador Publications
  3. release版のCRD関係図 Agent は ModelConfig・MCPServer/RemoteMCPServer リソースを利用して Agent を起動 Agent .spec.modelConfig Deployment

    + Service で動く ModelConfig provider / model / APIキーSecret .spec.tools[].mcpServer MCPServer toolの供給元(MCP) RemoteMCPServer .spec.tools[].agent toolの供給元(MCP) Agent agent-as-tool(A2Aで呼び出し) kagentのCRD(Agent 関連) kagentのCRD(その他) SubstrateのCRD 参照なし・残骸 1 p.6
  4. release版のCRD関係図 Agent は ModelConfig・MCPServer/RemoteMCPServer リソースを利用して Agent を起動 Agent .spec.modelConfig Deployment

    + Service で動く ModelConfig provider / model / APIキーSecret .spec.tools[].mcpServer MCPServer toolの供給元(MCP) kind: ModelConfig metadata: .spec.tools[].agent name: openai-gpt-5 spec: provider: OpenAI openAI: {} model: gpt-5 apiKeySecret: openai-gpt-5 apiKeySecretKey: OPENAI_API_KEY kagentのCRD(Agent 関連) kagentのCRD(その他) SubstrateのCRD 参照なし・残骸 kind: MCPServer RemoteMCPServer metadata: toolの供給元(MCP) name: mcp-website-fetcher spec: deployment: Agent cmd: uvx agent-as-tool(A2Aで呼び出し) args: - mcp-server-fetch port: 3000 image: node:24 stdioTransport: {} transportType: stdio 1 p.6
  5. release版のCRD関係図 Agent は ModelConfig・MCPServer/RemoteMCPServer リソースを利用して Agent を起動 Agent .spec.modelConfig Deployment

    + Service で動く ModelConfig provider / model / APIキーSecret .spec.tools[].mcpServer kind: Agent metadata: name: k8s-agent spec: declarative: modelConfig: openai-gpt-5 systemMessage: | You're a helpful agent for k8s tools: {...} a2aConfig: {...} MCPServer toolの供給元(MCP) RemoteMCPServer .spec.tools[].agent toolの供給元(MCP) Agent agent-as-tool(A2Aで呼び出し) kagentのCRD(Agent 関連) kagentのCRD(その他) SubstrateのCRD 参照なし・残骸 1 p.6
  6. Agent を取り巻くサンドボックス技術の概要 AI Agent が Deployment でただ実行されている状態 ランタイムが安全ではない・ワークロードのユニーク性がない・起動し続けると集約率が悪い・etc サンドボックス:Agent を安全な環境で高効率で実行するための技術

    観点 Agent Substrate(agent-substrate/substrate) Agent Sandbox(kubernetes-sigs/agent-sandbox) 一言で Actor(sandbox 内の1プロセスとその状態)を snapshot で止めて起 こす専用 runtime。1会話 = 1 Actor Sandbox CRD = Pod 1つ Kubernetes 標準の道具だけで組む sandbox orchestrator 開発元・貢献者 Google(GKE チーム発) Google、Solo.io、NVIDIA、Microsoft などが貢献 Google 主導の Kubernetes SIG Apps subproject 初公開 2026-05-13 初 commit(v0.0.0) → 2026-05-20 Google Cloud ブログで発表(Google I/O 週) 2025-08-12 repo 作成 → 2025-11-11 KubeCon NA(Atlanta)で v0.1.0 で発表 最新版・成熟度 v0.1.0(2026-09-10) v1.0.2(2026-09-10) suspend / resume は beta。GKE 版は GA(2026-05-20) 財団・ライセンス CNCF Sandbox 申請中 AAIF 外。Apache-2.0、Google CLA Kubernetes(CNCF Graduated)の SIG Apps subproject。 AAIF 外。Apache-2.0、Kubernetes CLA 採用例 kagent(CNCF Sandbox) Google の Agent Executor(ax) OpenHands / NVIDIA NeMo Gym / LangChain DeepAgents の integration。LangChain・Lovable が利用と報道 AAIF = Agentic AI Foundation(Linux Foundation 傘下、2025-12-09 設立) p.4
  7. Agent Substrate の全体像 Kubernetesの上に、Actorのための小さなcontrol planeとdata planeを展開する control plane(ate-system ns) atenet-router

    client(kagent) Envoy + ext_proc。ate-target-acto rを読む ResumeActo r ate-api-server PostgreSQL gRP C API・scheduler Acto r等の状態 atecontroller Wo rkerPo ol → Deployment、Wo rker PodをAPIに登録 転送 data plane(各 Node) Worker Pod(1 Podに1 Actor) atunnel :443 mTLS ingress / :15001 egress Actor gVisor(runsc) or microVM ateom sandboxを起動・ checkpoint Run / Restore atelet(DaemonSet) image取得・snapshot送受信 uplo ad / do wnloa d snapshot storage(GCS / S3) 休眠中のActo rのmemory / DurableDir 3 p.19
  8. Actorのライフサイクル — 「止める」に2種類ある Pause は node に snapshot を残して速く戻る。Suspend は

    object storage へ上げて Worker を完全に返す RESUMING 空きWorkerへrestore ResumeActor 同じnodeへ速く復帰 起動完了 SUSPENDED RUNNING Workerなし。snapshotは storage Workerを1つ占有 upload完了 SUSPENDING checkpoint → upload Pause PAUSED PauseActor Workerは返す。snapshotはnodeに残 る SuspendActor uploadして本当に休眠 Suspend • node-local の FULL snapshot(memory込み) • object storage へ upload(FULL か DATA) • 同じnodeで最速で復帰。HITL待ちで使う • どのWorkerでも復帰可能 • Worker自体は占有を解除する • Workerを完全に返す 3 p.20
  9. 多数のActorを少数のWorkerで回す — 時間多重化 同時に動くのは replicas 個だけ。残りは休眠し、必要なときに空きWorkerへ復帰する A1 A2 A3 A4

    A5 A6 RUNNING SUSPENDED SUSPENDED RUNNING SUSPENDED SUSPENDED 新しいmessage atenet-router → ate-api-server(scheduler) 「空いているWorkerはどれか」を決めて割り当てる Worker 1 Worker 2 Worker 3 A1 が占有 空き → A3 を restore A4 が占有 空きWorkerが無いとき ate-api は ResourceExhausted を返し、router が request を「park」して再試行する(既定 budget 5秒、最大1024件)。超えると 503。同 じActorへの複数requestは1つの復帰を待つ 4 p.27
  10. Agent Sandbox の全体像 — Sandbox は Pod と 1:1 Kubernetes標準の道具だけで組む。全部がCRDで、kubectlで見える

    SandboxTemplate client / SDK po dTemplate + policy Go / Python / MCP server • 隔離はRuntimeClass (gVisor / Kata)に委譲 • controllerはPodを作るだけ Replicas分を事前に起動 SandboxWarmPool 起動済みSandboxのプール adopt X-Sandbox-ID SandboxClaim 利用者はこれを作る → poolからadopt (所有権移転) • v1.0.2 / API v1beta1 sandbox-router he aderでPo dへ転送 Sandbox operatingMode: Running|Suspended 1:1 Pod + PVC + headless Service Pod の中身: app :8888 / sandboxd :8080 REST(files)・:9090 gRPC(process) suspend = Pod を削除して PVC / Service を保持。resume = podTemplate から Pod を再作成。プロセスのメモリは残らない。 3 p.21
  11. 2つのサンドボックス環境を比べる Agent Substrate:多機能なサンドボックス環境(完全なsuspend、時間方向にWorker上に詰め込む) Agent Sandbox:Kubernetes-native に作られているサンドボックス環境 観点 Agent Substrate SIG

    Agent Sandbox 実行単位 Actor(ate-api の資源)を Worker Pod 内で実行 Sandbox CR = Pod 1つ Podあたり 同時に1 Actor。時間をずらして多重化 1 Sandbox : 1 Pod(複数化は計画中) suspendで残るもの memory + rootfs差分 + DurableDir(FULL) PVC と Service のみ。memory は消える resume元 自分の snapshot / Pause から復帰 podTemplate から Pod を再作成 warm capacity WorkerPool(起動済み Worker Pod) SandboxWarmPool(起動済み Sandbox) control plane 3 CRD + 専用 gRPC API + PostgreSQL 全て CRD(etcd)+ controller 到達方法 atenet-router のみ。exec / SSH なし sandbox-router / DNS / kubectl exec 隔離 gVisor / microVM 内蔵(Templateで選択) RuntimeClass に委譲(gVisor / Kata) 3 p.22
  12. どちらを選ぶか — 優先するものが違う 「待っている間の状態を残したい」か「Kubernetesの道具だけで済ませたい」か Agent Substrate 向き Agent Sandbox 向き

    会話の途中状態を安く長く保ちたい Kubernetes標準の運用に乗せたい • idle中のAgentが多く、memoryごと休眠してコスト減 • 承認待ち(HITL)でプロセスを凍結、 承認後に同じ状態から続行可能 • 普通のPodSpec・RuntimeClass・GPU・sidecarを そのまま利用可能 • 1 Workerを多数のActorで時間多重化したい (1 Actor = 1 会話) • warm poolから即座にsandboxを取り、 ファイルだけPVCに残せばよい • 代償: 第2のcontrol plane(ate-api + PostgreSQL)と snapshot bucke が必要 • 代償: suspendでprocess memoryは消える (resumeは新しいPodの起動) • 代償: exec不可 • 代償: 1 Pod = 1 Sandbox • kubectl / RBAC / GitOps / HPA(KEDA) で運用したい • 代償: authz未実装・snapshot GC未実装 kagentはSubstrateをベースに利用 「Pause / Suspend」と「Worker 上で複数Actor(会話)集約」がしたかったため 3 p.23
  13. kagentのCRD SubstrateのCRD Agent Substrate によるサンドボックス環境での起動 Agent はサンドボックス環境で起動することが可能 kind: SandboxAgent metadata:

    name: k8s-agent spec: substrate: workerPoolRef: name: my-worker-pool declarative: {} Agent Deployment + Service で動く 同じspec SandboxAgent 1 session = 1 Actor workerPoolRef WorkerPool ate.dev/v1alpha1(Substrate側のCRD) workerPoolRef AgentHarness OpenClaw / Hermes をACPで動かす kind: WorkerPool metadata: name: default-worker-pool spec: ateomImage: ateom-gvisor:v0.0.9 replicas: 3 sandboxClass: gvisor kind: AgentHarness metadata: name: openclaw-agent spec: substrate: workerPoolRef: name: my-worker-pool backend: hermes modelConfigRef: openai-gpt-5 1 p.6
  14. 前提: 「release版」と「main」はAPIが別物 kagent は現在 API v2 プロジェクトとして大規模な刷新中 release版 v0.10.1(2026-09-08) API

    v2 - main(未release) API version kagent.dev/v1alpha2 (+v1alpha1) kagent.dev/v1alpha3 Agentを定義するCRD Agent / SandboxAgent / AgentHarness AgentTemplate + Harness 会話1つの実体 Deployment、またはsession単位のActor AgentInstance (CRDではなくDB上のgRPCリソース) Substrate 任意、fork v0.0.9 必須、fork v0.0.29 release/v0.10.x ブランチは2026-08-11に分岐。それ以降にmainへ入った新API群はv0.10.xには含まれない p.4
  15. API v2 の CRD 関係図 — 設定の層 Agentの定義が Harness(どう走らせるか)と AgentTemplate(何をするか)の2つに分かれた

    Harness(HOW) AgentTemplate(WHAT) adapter / image / env / substrate model / prompt / tools / skills ModelConfig spec.modelConfig.name RemoteMCPServer tools[].mcp.server WorkerPool Secret skills / plugins の source Substrate CRD credentialRef OCI image / Git com mit / S3 o bje ct Harness が持つもの(走らせ方) AgentTemplate が持つもの(振る舞い) kagent | codex | claude | byo のどれか1つ(CEL排他) AgentHarness で実装されていた hermes/openclaw は将来実装 modelConfig / systemPrompt / promptTemplate workload.image は digest(@sha256:)固定が必須 tools[]: MCP tool(requireApproval可)/ 他template substrate.workerPoolRef + snapshotPolicy.location skills / plugins(不変なsourceを指定) 1 p.8