尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Agent 编排运行时 ax 在 Kubernetes 上的工程实践:会话调度、状态外置与多集群

发布时间:2026/9/29 1:50:19

资讯中心
01
ARTICLE

Agent 编排运行时 ax 在 Kubernetes 上的工程实践:会话调度、状态外置与多集群

Agent 编排运行时 ax 在 Kubernetes 上的工程实践:会话调度、状态外置与多集群
1. 从ax这个标题说起一个被低估的运行时缩写第一次看到ax这个标题绝大多数人的反应是懵的——两个字母没有正文没有关键词没有摘要只有一串看起来八竿子打不着的热搜词。但如果你把热搜词里那些噪音过滤掉剩下的东西其实指向非常明确agentic、orchestration、runtime、Kubernetes。这四个词凑在一起指向的是一个当下基础设施领域正在快速成型的方向——面向智能体Agent的编排运行时。ax在这里我倾向于把它理解为一个面向 Agent 编排场景的运行时抽象层的代号。为什么这么说因为热搜词里同时出现了agentic rag、karmada 正式毕业、agentic cloud这些信号它们共同描述的是一个趋势传统的容器编排Kubernetes解决的是无状态/有状态服务怎么调度、怎么扩缩容的问题而 Agent 场景引入了一类全新的负载——它是有状态的、长生命周期的、需要工具调用能力的、需要记忆和上下文管理的。这类负载用 Deployment Service 那套模型去套会非常别扭。所以这篇东西我想聊的不是某个具体产品的安装教程而是当Agent 运行时这个概念落到 Kubernetes 上时到底要解决哪些工程问题以及一个叫 ax 的编排层应该长什么样。适合谁看如果你已经在用 K8s 跑业务现在团队开始往 Agent 方向做东西发现 Pod 里塞个 Python 进程跑 Agent 越来越难管那这篇就是写给你的。如果你只是听说过 agentic 这个词但没实际跑过也能从里面拿到一套可落地的思路。需要先说明一点由于原始输入里项目正文和关键词都是空的下面涉及的具体实现细节是我基于当前 Agent 编排这个领域的常见工程实践做的合理补全不是对某个特定产品的逆向。我会在关键地方标注哪些是通用做法、哪些是需要你按自己环境调整的。2. Agent 负载和普通微服务到底差在哪2.1 生命周期模型从请求-响应到会话-持续普通微服务的生命周期模型非常干净进程起来监听端口收到请求处理返回进程一直在那儿待命。K8s 的探针机制liveness/readiness就是为这个模型设计的——readiness 决定要不要把流量切进来liveness 决定挂了要不要重启。Agent 完全不是这个逻辑。一个 Agent 实例往往对应一个会话session这个会话可能持续几分钟也可能持续几小时甚至几天。它中间会调用外部工具、会写记忆、会等待人工确认、会挂起等一个异步事件回来。你没法用端口通不通来判断它健不健康因为一个正在等用户输入的 Agent端口是通的但它其实处于挂起状态这时候你把它重启了整个会话上下文就丢了。这就是为什么热搜里会出现agentic orchestration这个词——编排层要理解的不再是容器活着没而是这个会话处于什么阶段。我在实际项目里踩过最狠的一个坑就是拿默认的 liveness probe 去探一个 Agent 容器结果 Agent 在等一个耗时 90 秒的工具调用探针 30 秒超时直接把它杀了会话状态全丢。后来改成基于会话状态上报的健康检查才解决。2.2 状态归属状态到底该放哪普通微服务的状态基本都外置了——数据库、Redis、对象存储。容器本身是无状态的随便杀随便起。Agent 不行Agent 的记忆和上下文是它之所以是它的核心。这里有个关键的设计决策状态是放在 Agent 进程内存里还是外置到运行时层放内存里简单但 Pod 一重启就没了而且没法做水平扩展。外置到运行时层复杂但换来的是可迁移、可恢复、可观测。ax 这类编排层的核心价值我认为就在这个状态外置上——它把会话状态、工具调用记录、记忆索引这些东西从 Agent 进程里抽出来交给运行时统一管理Agent 进程本身变成可以随时替换的执行器。这个思路和当年把 session 从 Tomcat 内存里挪到 Redis 是一模一样的演进路径。区别在于 Agent 的状态结构更复杂不是简单的 key-value而是带时序、带引用、带向量索引的复合结构。2.3 工具调用网络边界被打破了普通微服务的网络边界很清晰我这个服务只暴露一个 API只调用下游那几个已知的服务。Agent 不一样Agent 会动态调用工具工具可能是内部的 HTTP 服务可能是某个 CLI可能是数据库查询可能是外部 API。这意味着出站流量的目标是不确定的。在 K8s 里NetworkPolicy 默认是白名单模型你得提前知道要放通哪些目标。Agent 场景下这个前提不成立。所以 ax 这类运行时通常要在编排层做一层工具代理tool proxyAgent 不直接出网而是通过运行时提供的工具网关去调用网关负责鉴权、限流、审计、重试。这样 NetworkPolicy 只需要放通到网关这一条路安全边界重新变得可控。2.4 资源画像突发性和长尾普通微服务的资源画像相对平稳CPU 和内存的 request/limit 好估。Agent 的资源消耗是脉冲式的大部分时间在等 LLM 返回或者等工具结果CPU 几乎为零但一旦开始处理上下文尤其是做 RAG 检索和重排的时候内存和 CPU 会瞬间冲高。这就导致用 HPA 按 CPU 扩缩容基本失效——你按平均 CPU 扩容它永远不触发你按峰值扩容平时又浪费得离谱。ax 这类运行时一般会引入基于队列深度和会话等待时长的扩缩容信号而不是纯看资源指标。这个后面第 4 节会展开讲。3. 把 Agent 塞进 Kubernetes哪些原生能力能直接用哪些必须绕开3.1 能直接复用的调度、隔离、镜像分发先说好消息。K8s 有一大堆能力是可以直接拿来用的不用重新造轮子调度器Agent 执行器本质还是容器nodeSelector、affinity、taint/toleration 这套调度语义完全适用。比如你想把需要 GPU 的推理型 Agent 调度到特定节点池直接用 nodeAffinity 就行。资源隔离cgroup 层面的 CPU/内存隔离对 Agent 一样有效防止某个失控的 Agent 把整台机器吃满。镜像分发Agent 执行器的镜像管理、版本管理、灰度发布用现有的镜像仓库和 Deployment 滚动更新机制就够了。配置与密钥ConfigMap 和 Secret 挂载这套管理 Agent 的模型端点、API Key 完全够用。我在实际项目里的做法是Agent 执行器本身就是一个标准的 Deployment只不过它的副本数不由 HPA 控制而是由 ax 运行时的会话调度器控制。这样既复用了 K8s 的容器管理能力又不会被原生扩缩容逻辑带偏。3.2 必须绕开的Service 负载均衡和 readiness前面提过Agent 是有会话粘性的。K8s 的 Service 默认是随机负载均衡一个会话的多次请求可能被分发到不同 Pod上下文就对不上了。解决办法有两个一是会话亲和性session affinityService 层面配sessionAffinity: ClientIP但这个粒度太粗同一个客户端的不同会话会被粘到同一个 Pod反而造成不均。更靠谱的是在 ax 编排层做基于会话 ID 的路由Agent 执行器不直接暴露 Service而是通过运行时的路由层转发路由层根据会话 ID 查表找到对应的执行器实例。二是readiness 探针要重写。默认的 TCP 探针或者 HTTP 探针在这里都不合适需要 Agent 执行器主动向运行时上报自己的状态空闲、忙碌、挂起、异常。运行时根据这个状态决定要不要给它派新会话。这本质上是一个自定义的调度协议而不是 K8s 原生的健康检查。3.3 存储会话状态的持久化选型会话状态存哪是个绕不开的问题。我见过几种做法各有取舍方案优点缺点适用场景内存 定期快照读写快实现简单崩溃丢数据无法迁移短会话、可容忍丢失Redis读写快支持过期大对象存储成本高持久化弱中等长度会话关系库PG/MySQL事务强查询灵活高频写入有压力需要审计和查询的会话对象存储 索引便宜容量大延迟高不适合热数据冷会话归档ax 这类运行时通常采用分层存储热状态放 Redis温状态落关系库冷状态归档到对象存储。会话活跃时全在 Redis会话挂起超过阈值就下沉到关系库超过更长时间就归档。这个分层策略的阈值需要根据你的会话时长分布来调没有万能值。提示会话状态里如果有向量索引别直接塞 Redis。向量检索有专门的存储比如各类向量库Redis 只存指向向量库的引用 ID。我见过把 embedding 直接存 Redis 的几百万条之后内存直接爆掉。3.4 网络工具网关的设计前面提到工具调用要经过网关。这个网关的设计有几个要点鉴权Agent 调用工具时带的是运行时分发的短期凭证不是长期 API Key。凭证和会话绑定会话结束凭证失效。限流按会话、按工具、按目标三个维度限流。防止某个 Agent 疯狂调用某个工具把下游打挂。审计每次工具调用都记录哪个会话、调了什么工具、参数是什么、返回什么、耗时多少。这个日志在排查 Agent 行为异常时是救命稻草。重试与熔断工具调用失败要区分是可重试还是不可重试。网络超时可重试参数错误不可重试。熔断按工具维度做某个工具连续失败就暂时摘掉。这套东西听起来像 API Gateway确实可以基于现有的网关产品改但凭证模型要重新设计因为 Agent 的调用是代表某个会话发起的不是代表某个用户。这个区别很关键直接影响审计和权限模型。4. 编排层的核心会话调度器怎么设计4.1 调度信号别只看 CPU会话调度器的输入信号决定了整个系统的效率。我总结下来有效的信号有这么几类待调度会话队列深度有多少会话在等执行器。这是最直接的扩容信号。执行器空闲率当前有多少执行器处于空闲状态。空闲率持续为 0 说明该扩容持续很高说明该缩容。会话等待时长 P95用户等多久才能拿到执行器。这个指标直接对应体验。单会话资源画像不同类型的 Agent 资源需求差异很大调度时要匹配。纯看 CPU 的问题是Agent 大部分时间在等 IO等 LLM、等工具CPU 利用率天然就低。你按 CPU 扩容永远扩不起来。我实测过一个场景20 个执行器CPU 平均利用率 8%但会话队列已经排到 50 个用户等待超过 2 分钟。这时候 CPU 指标完全失灵。4.2 调度策略优先级 抢占会话之间是有优先级差异的。交互式会话用户在等优先级高后台批处理会话优先级低。调度器要支持优先级队列高优先级会话先分配执行器。抢占执行器不够时低优先级的挂起会话可以被驱逐腾出资源给高优先级。被驱逐的会话状态已经外置重新调度后能恢复。配额按租户/团队限制并发会话数防止一个团队把资源吃光。抢占这个能力是 ax 这类运行时相比原生 K8s 最大的增量。K8s 的抢占是 Pod 级别的粒度太粗而且抢占的是整个 Pod会丢掉 Pod 里所有会话。ax 的抢占是会话级别的只驱逐特定会话其他会话不受影响。4.3 执行器池化冷启动怎么解Agent 执行器冷启动是个大问题。一个执行器镜像可能好几个 G拉镜像 启动进程 加载模型几十秒起步。用户等不起。常见的解法是预热池维持一定数量的空闲执行器随时待命。新会话来了直接从池里拿不用等启动。池子大小根据流量波动来调高峰期大一点低谷期小一点。但预热池有个成本问题空闲执行器也占资源。折中方案是分级预热热池完全就绪秒级响应保持小规模温池进程已起但未加载模型保持中等规模冷池只有镜像缓存按需拉起。会话来了先看热池没有就看温池再没有才走冷启动。这个分级策略的阈值需要根据你的流量特征调。我的经验是热池保持在 P50 并发量的 1.2 倍左右温池保持在 P99 并发量的 0.5 倍左右剩下的走冷启动。4.4 故障恢复会话怎么续命执行器挂了会话怎么办这是 ax 运行时必须回答的问题。核心思路是状态外置 检查点会话的每一步关键操作工具调用完成、LLM 返回、记忆写入都往运行时上报运行时持久化。执行器挂了运行时根据最后检查点重建会话调度到新执行器。重建时要注意幂等性如果挂的时候正在执行一个工具调用重建后这个调用要不要重发取决于工具是否幂等。非幂等工具需要运行时记录已发起未确认的状态重建后先查询实际结果再决定。这套机制实现起来不简单但它是 Agent 运行时区别于普通容器编排的核心价值。没有它Agent 就是个脆弱的玩具。5. 多集群视角为什么热搜里会出现 Karmada热搜词里有一条karmada 正式毕业这不是巧合。Agent 编排和 Karmada 这类多集群编排框架的交集在于Agent 的算力需求是地理分布和弹性波动的。5.1 单集群的天花板单集群跑 Agent 有几个硬约束GPU 资源有限一个集群的 GPU 卡数是有上限的Agent 推理需求增长很快单集群很快就不够。故障域集中单集群挂了所有 Agent 全挂。虽然 K8s 本身高可用但集群级别的故障比如控制面被误操作还是会发生。成本优化空间小不同云厂商、不同区域的 GPU 价格差异很大单集群没法利用这个差异。5.2 多集群编排要解决什么Karmada 这类框架解决的是把工作负载分发到多个集群的问题。对 Agent 场景来说它要额外解决会话的跨集群迁移会话状态外置之后理论上可以在集群 A 挂起、在集群 B 恢复。但网络延迟和状态同步是挑战。全局调度根据各集群的实时负载和成本决定新会话调度到哪个集群。故障转移集群 A 不可用会话自动在集群 B 重建。ax 运行时如果要做多集群和 Karmada 的集成点主要在调度决策和状态同步这两层。Karmada 负责把执行器 Deployment 分发到各集群ax 负责决定会话去哪个集群的执行器。5.3 实际落地的坑多集群听起来美好实际落地有几个坑状态同步延迟会话状态在集群 A 写入集群 B 读取中间有延迟。如果会话迁移时状态还没同步完会读到旧状态。解法是迁移前做一次强制同步。网络分区集群之间网络断了会话怎么办通常策略是就地继续不迁移等网络恢复再同步。成本核算多集群之后成本归属变复杂。需要给每个会话打上集群标签才能算清楚账。我的建议是别一上来就搞多集群。单集群先把会话调度、状态外置、故障恢复这套跑通等真的遇到单集群天花板了再上多集群。多集群的复杂度是单集群的好几倍过早引入会拖慢迭代。6. 可观测性Agent 运行时怎么看得见6.1 传统三件套的局限Metrics、Logging、Tracing 这套在 Agent 场景下都有局限Metrics传统的 QPS、延迟、错误率还是有用但不够。你需要的是会话维度的指标——会话时长分布、会话成功率、会话中断率、工具调用成功率。LoggingAgent 的日志量巨大一次会话可能产生几万行日志。全量收集成本高需要采样和分级。TracingAgent 的调用链是动态的工具调用是运行时决定的传统的静态埋点不够用。需要运行时自动注入 trace context。6.2 会话级别的可观测性ax 运行时应该提供会话视角的可观测性。也就是说你能查一个具体会话的完整生命周期什么时候创建什么时候结束中间经历了哪些状态转换调用了哪些工具每次调用的输入输出消耗了多少 token多少 GPU 时间如果失败了失败在哪一步这个能力对排查问题极其重要。我遇到过 Agent 行为异常的情况最后就是靠会话级别的 trace 定位到是某个工具返回了格式不对的数据导致 Agent 解析失败进入死循环。6.3 成本可观测性Agent 的成本结构比普通服务复杂有 GPU 成本、有 LLM API 成本、有工具调用成本、有存储成本。这些成本要能归集到会话、归集到租户。做法是在会话创建时打上成本标签每次产生成本的操作都往这个标签上累加。最后按租户、按团队、按项目出成本报表。这个能力在 Agent 大规模铺开之后是刚需因为 LLM API 的账单很容易失控。7. 落地路线从零到一怎么走7.1 阶段一单机跑通别急着上 K8s。先在一台机器上把 Agent 执行器、状态存储、工具网关这套跑通。这个阶段的目标是验证核心逻辑会话能不能创建、状态能不能持久化、工具能不能调用、挂了能不能恢复。这个阶段用 Docker Compose 就够了别过度设计。7.2 阶段二单集群 K8s 化把执行器容器化用 Deployment 管理状态存储用集群内的 Redis 和 PG。这个阶段要解决执行器的镜像构建和分发会话调度器的实现可以先简单点按队列深度扩容工具网关的部署基础的可观测性这个阶段最容易踩的坑是探针配置前面说过别用默认探针。7.3 阶段三调度优化引入优先级队列、抢占、预热池。这个阶段的目标是提升资源利用率和用户体验。需要大量的压测和调参。7.4 阶段四多集群等单集群真的不够用了再考虑多集群。这时候你已经有了足够的运维经验和监控数据知道瓶颈在哪多集群的决策会更有依据。8. 几个我踩过的坑和对应的解法8.1 坑一会话状态序列化格式选错一开始我用 JSON 存会话状态简单直观。但会话状态里有大量嵌套结构和二进制数据比如向量JSON 序列化又慢又占空间。后来换成 MessagePack体积小了 40%序列化速度快了一倍多。选型建议如果状态结构简单JSON 够用如果有二进制或大量嵌套考虑 MessagePack 或 Protobuf。8.2 坑二工具调用没有超时早期版本工具调用没设超时某个工具挂了导致 Agent 一直等执行器被占住新会话进不来整个系统雪崩。后来强制所有工具调用必须有超时超时后走降级逻辑。8.3 坑三会话 ID 生成有碰撞用时间戳生成会话 ID高并发下出现碰撞两个会话共用了同一个状态数据串了。后来换成 UUID v4问题消失。这个坑很低级但确实发生过。8.4 坑四忘记限制单会话资源某个 Agent 进入死循环疯狂调用工具把整个执行器的 CPU 吃满影响了同执行器上的其他会话。后来给每个会话加了资源配额超了直接挂起。8.5 坑五状态存储没做容量规划会话状态越积越多Redis 内存爆了触发淘汰策略把活跃会话的状态也淘汰了。后来做了分层存储冷会话下沉到关系库Redis 只留热数据。9. 关于 ax 这个名字和它代表的方向回到标题。ax这两个字母本身没有太多信息量但它背后的东西——agentic orchestration runtime——是当下基础设施领域一个真实且快速演进的方向。热搜词里那些看似无关的条目其实都在从不同角度指向同一个趋势Agent 正在从 demo 走向生产而生产化需要一套专门的运行时基础设施。这套基础设施的核心命题我总结成三句话状态要外置Agent 进程要变成可替换的执行器。调度要看会话不能只看 CPU 和内存。可观测性要到会话粒度否则出了问题根本没法查。这三件事做好了Agent 才真正具备生产可用性。做不好就永远停留在能跑 demo 但不敢上量的阶段。我在实际项目里最大的体会是别把 Agent 当成普通微服务来管。它的生命周期、状态模型、资源画像、故障模式都不一样。用管微服务的思路去管 Agent会处处别扭。反过来一旦你接受了会话是一等公民这个前提很多设计决策就顺理成章了。最后分享一个实用的小技巧在会话调度器里加一个会话年龄指标统计所有活跃会话从创建到现在的时间。如果这个指标的 P99 持续增长说明有会话卡住了没正常结束通常是某个工具调用没超时或者某个状态转换逻辑有 bug。这个指标帮我抓到过好几次隐蔽的问题。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。