在多 Agent 系统从实验走向生产的工程化进程中,一个核心挑战浮出水面:如何将这些智能体像传统微服务一样纳入云原生基础设施进行统一管理。KAOS(K8s Agent Orchestration System)正是为解决这一问题而生的开源框架,它将 AI Agent 抽象为 Kubernetes 的自定义资源(CRD),借助成熟的 Operator 模式实现声明式编排与自动化运维。
从脚本到 Pod:Agent 的云原生化改造
传统 Agent 开发往往依赖于 Python 库(如 LangChain、CrewAI)或自建运行时,这种方式在原型阶段颇为便利,但进入生产环境后却面临诸多困境。模型版本升级需要重新部署、工具调用缺乏隔离导致故障扩散、资源扩缩容依赖外部调度、状态管理分散在各进程中难以统一观测。KAOS 的设计哲学是重新定义 Agent 的存在形态 —— 它不应是一段运行在某个容器中的脚本,而应是一个可被 Kubernetes 调度的原生工作负载。
这种转变带来了几个关键收益。首先是可观测性的统一:Agent 的日志、指标、追踪可以直接接入现有的 K8s 监控体系,无需额外部署收集代理。其次是弹性的原生支持:当 Agent 处理能力不足时,Horizontal Pod Autoscaler 可以基于自定义指标(如请求队列深度、LLM 调用延迟)自动扩容;当负载下降时又会自动缩容以节约成本。最后是声明式配置的版本控制:所有 Agent 的定义都以 YAML 形式存储在 GitOps 仓库中,任何变更都可审计、回滚,符合企业合规要求。
CRD 设计:三层资源抽象体系
KAOS 的架构围绕三类核心 CRD 构建,分别是 Agent、MCPServer 和 ModelAPI。这种划分遵循了关注点分离的设计原则,将工具定义、模型配置和智能体行为解耦为独立配置单元。
Agent 资源描述了一个具备特定指令、工具集和行为模式的智能体实例。其核心字段包括模型 API 引用、工具服务器列表、描述文本、环境变量以及可选的代理网络配置。一个典型的 Agent 声明如下:spec 部分指定使用的模型端点(指向一个 ModelAPI 资源)和工具服务器列表(指向 MCPServer 资源),config 区块定义系统指令和运行环境变量,agentNetwork 则声明该 Agent 可以访问的其他 Agent 资源,从而构建协作关系。这种引用式设计使得工具和模型可以在多个 Agent 间复用,降低了配置冗余。
MCPServer 资源封装了 Agent 可调用的外部工具。与传统将工具代码硬编码在 Agent 逻辑中不同,KAOS 支持通过 MCP(Model Context Protocol)标准接入工具服务器。每个 MCPServer 可以声明 type 为 python-runtime,并使用 config.tools.fromString 字段动态注入工具函数定义。例如一个回显工具只需几行 Python 代码即可声明,KAOS 会自动将其部署为独立的 Pod 并注册到 Agent 的工具列表中。这种动态工具注入能力对于需要频繁扩展工具集的场景尤为实用。
ModelAPI 资源则统一了底层模型服务的访问入口。无论是本地部署的 Ollama、LiteLLM 还是云端 API,Agent 都通过统一的 OpenAI 兼容接口调用。ModelAPI 的 mode 字段可设为 Hosted 或 External,Hosted 模式下 KAOS 会自动部署模型服务 Pod,External 模式则用于连接已有端点。所有模型调用统一走 /v1/chat/completions 路径,降低了多模型切换的改造成本。
控制器机制:声明式配置如何转化为运行态
KAOS Operator 包含三个核心控制器,分别负责 Agent、MCPServer 和 ModelAPI 资源的 reconcile 循环。当用户通过 kubectl apply 或 KAOS CLI 创建或修改 CRD 实例时,对应控制器会检测到期望状态与当前状态的差异,并执行相应的调谐动作。
以 Agent Controller 为例,其工作流程大致分为几个阶段。初始化阶段,控制器根据 Agent 定义的 modelAPI 和 mcpServers 引用创建依赖检查,确保关联资源存在且就绪。部署阶段,控制器生成 Agent Pod 的 Spec,其中包含运行时镜像、启动命令、环境变量注入以及指向 MCP Server 的服务发现配置。Agent Pod 的容器启动后会连接配置的模型端点和工具服务器,进入待命状态。状态同步阶段,控制器持续监控 Pod 的运行状况,将 phase、ready conditions、错误信息等同步回 CRD 的 status 子资源。当用户修改 Agent 配置(如更换指令或添加工具)时,控制器会触发滚动更新,确保变更平滑过渡而不中断正在处理的请求。
这种控制器模式的核心价值在于实现了期望状态与实际状态的持续对齐。即使因节点故障导致 Pod 被终止,Kubernetes 的自愈机制会自动重新调度;而控制器检测到 Pod 状态与期望不符时,同样会介入处理。这种自愈能力对于需要长时间运行、可能占用 GPU 资源的 Agent 工作负载尤为重要。
多 Agent 协作:层级化任务分发机制
复杂任务往往需要多个专业 Agent 协同完成。KAOS 通过 agentNetwork 字段支持层级化的多 Agent 系统构建。在这种模式下,一个 Coordinator Agent 被配置为任务入口,它根据任务性质将子任务委托给 Specialist Agent 执行。这种设计借鉴了人类组织的层级结构:协调者负责理解需求、规划路径、汇总结果;专家负责特定领域的深度处理。
在 KAOS 中实现这种协作需要完成几步配置。首先为每个 Specialist Agent 创建独立的 Agent 资源,配置其擅长的工具集和系统指令。然后在 Coordinator Agent 的 agentNetwork.access 字段中列出可访问的 Specialist 资源名称。最后确保所有 Agent 处于同一命名空间或正确配置跨命名空间访问策略。当 Coordinator 收到用户请求时,它可以在对话过程中调用其他 Agent 的 API(同样暴露为 /v1/chat/completions 接口),实现透明的协作处理。
这种层级架构带来了几方面的工程优势。职责边界清晰:每个 Agent 的配置可以独立演进,不会因修改一个专家 Agent 而影响协调者或其他专家。资源隔离:不同 Agent 运行在独立的 Pod 中,工具调用的故障不会相互传染。水平扩展:当某类任务激增时,可以单独扩容对应的 Specialist Agent,无需扩展整个系统。
部署与运维:CLI 与 Helm 两种入口
KAOS 提供了两种部署方式以适应不同运维习惯。偏好交互式操作的用户可以使用 KAOS CLI(pip install kaos-cli),通过 kaos install 一键在目标集群部署 Operator 和 Web UI,随后 kaos ui 启动本地端口转发访问可视化控制台。这种方式简化了上手流程,适合快速验证和开发测试场景。
面向生产环境的成熟团队通常倾向于声明式部署。KAOS 提供了 Helm Chart,运维人员可以将 KAOS Operator 作为标准 Helm Release 安装到专用命名空间(kaos-system),并通过 values 文件定制资源配额、镜像仓库、网络策略等。安装完成后,所有 Agent 资源通过标准 kubectl apply 创建,与现有 GitOps 流水线天然兼容。
Agent 部署完成后,KAOS 会为每个 Agent 自动创建 Service 资源,默认以 agent-{name} 命名暴露 8000 端口。通过 kubectl port-forward svc/agent-assistant 8000:8000 可以建立本地代理,然后直接调用其 OpenAI 兼容接口进行对话测试。这种标准化接口设计使得现有集成 OpenAI API 的应用无需修改代码即可接入 KAOS Agent,只需将 base_url 指向新的端点即可。
生产落地的关键考量
将 KAOS 纳入生产环境需要关注几个工程要点。在资源规划方面,Agent Pod 的资源请求应根据其使用的模型规模和预期并发量合理配置。对于调用本地 Ollama 的场景,需要预留足够的 GPU 内存和 CPU 核心;对于调用远程 API 的轻量 Agent,则可以配置较低的的资源配额。
安全隔离方面,KAOS 默认使用命名空间级别的隔离,不同团队的 Agent 应部署在不同命名空间中,并通过 Network Policy 限制跨命名室的访问。敏感配置(如 API Key)应通过 Kubernetes Secret 或外部密钥管理服务注入,避免明文出现在 YAML 定义里。
可观测性建设方面,建议为 KAOS 部署配套的 Prometheus ServiceMonitor,收集 Agent Pod 的启动次数、重启原因、工具调用成功率等指标。日志方面可以使用 Loki 或 ELK Stack 统一收集,配合 OpenTelemetry 实现分布式追踪。当 Agent 调用外部工具或发生错误时,这些可观测性数据对于问题定位至关重要。
高可用配置方面,对于关键业务 Agent,应配置 PodDisruptionBudget 防止滚动更新时同时终止过多实例导致服务中断。Region 级部署可以通过配置多个 Kubernetes 集群并使用联邦工具(KubeFed 或 Karmada)实现跨集群的统一管理。
工程意义与生态定位
KAOS 的出现标志着多 Agent 系统开始进入云原生基础设施的成熟治理阶段。Operator 模式在数据库、消息队列等复杂应用上的成功实践证明了其在声明式配置、自愈运维方面的有效性,而 KAOS 将这一模式延伸到了 AI Agent 领域。对于已经采用 Kubernetes 作为基础设施的团队而言,KAOS 提供了一条低迁移成本的路径 —— 无需额外部署专用 Agent 平台,即可在现有集群上运行生产级的多 Agent 工作负载。
资料来源:KAOS GitHub 仓库(https://github.com/axsaucedo/kaos)、KAOS 官方文档(https://axsaucedo.github.io/kaos)。