AgentCube插件
随着生成式AI和大语言模型(LLM)应用的快速发展,AI Agent工作负载正在成为云原生环境中的重要负载类型。这些工作负载具有独特的特征:持续交互、状态保持、间歇性活跃的长会话特性。然而,现有的工作负载管理模式无法满足AI Agent的这些特殊需求:
- 冷启动延迟高:Agent的交互通常要求毫秒级响应。然而,原生的K8s Pod启动流程(调度、IP 分配、镜像拉取、容器启动)往往在秒级甚至分钟级。对于需要频繁拉起Code Interpreter(代码解释器)或临时子Agent的场景,这种冷启动延迟是用户无法接受的。
- 资源利用效率低:Agent是典型的IO密集型负载。在一次会话中,90%的时间Agent可能都在等待LLM生成Token或等待外部工具响应。如果在K8s上为每个Agent 独占一个Pod,会导致大量的CPU/Memory资源在等待期间被闲置浪费,却无法被其他任务复用。
- 状态管理缺失:K8s对“无状态(Stateless)”工作负载天然友好,但 Agent 高度依赖“上下文(Context/Memory)”。在原生K8s中,Pod重启意味着内存数据丢失,开发者被迫在应用层通过外部存储重建上下文,这带来了巨大的复杂性和网络开销。
- 安全隔离难题:高级Agent(如Data Analyst)需要运行由LLM生成的不可信代码。但普通的runC容器如果运行rm -rf /具有极高风险。企业级Agent平台迫切需要一种既能快速启动,又能提供强隔离(如MicroVM)的沙箱环境。
为了解决上述问题,CCE Standard/Turbo集群基于AgentCube提供了AgentCube插件。AgentCube是一个高性能AI Agent编排工具,用于在Kubernetes上原生支持和管理AI Agent工作负载,提供极速启动、极速调度、原生会话管理、Serverless 化的弹性伸缩等创新能力。
- AgentCube作为开源项目,目前处于Alpha阶段,尚未纳入CCE服务的正式商用支持范围。建议仅在测试环境学习使用,并关注安全、可靠性等关键风险(包括但不限于数据安全、系统稳定性及资源消耗等)。
- 该特性当前正处于上线阶段,已发布区域请以控制台实际为准。
功能介绍
AgentCube引入了两个核心的CRD来定义Agent工作负载:
- AgentRuntime:面向长会话、复杂的对话式Agent,支持定义会话的生命周期、资源配额以及持久化策略。
- CodeInterpreter:面向短任务、高频的代码执行环境,强调“用完即毁”和极致的安全隔离。

核心功能:
- 极速启动
为了消除冷启动的挑战,AgentCube 实现了 Warm Pool(预热池) 机制。系统会预先启动并暂停一组持有基础环境的 MicroVM 沙箱。当 Agent 请求到来时,AgentCube 能够通过 "Claim-and-Go" 的方式,在毫秒级将预热的沙箱分配给会话,实现近乎零延迟的启动体验。
- 极速调度
借助 Volcano 的 Agent Scheduler,AgentCube显著提升了Agent调度的吞吐和时延。
- 高吞吐、低时延: 针对 Agent 突发流量,采用了乐观并发控制和精简的调度策略,大幅提升调度 TPS。
- 统一调度支持: Volcano 的 Agent Scheduler 可以与原有的 Batch Scheduler 无缝配合,在协调 Agent 与传统的 Batch 作业潜在调度冲突的同时,确保整体集群的资源利用率和关键业务的 SLA。
- 原生会话管理
AgentCube 引入了 Session ID 作为核心路由标识,便于保证业务上下文的连续性。
- 请求路由: AgentCube Router 能够识别请求中的 x-agentcube-session-id,自动将其路由到对应的活跃沙箱。
- 自动的沙箱激活: 当前会话对应的沙箱处于休眠状态时,AgentCube Router 能够自动激活沙箱。
- 基于会话的端到端隔离:
更多关于AgentCube的详细介绍,请参见AgentCube。
前提条件
- 已创建v1.29及以上的CCE Standard/Turbo集群。
- 已经部署了Redis,并确保AgentCube可访问Redis。
安装插件
- 登录CCE控制台,单击集群名称进入集群。
- 单击左侧导航栏的“插件中心”,在右侧找到AgentCube插件,单击“安装”。
- 在安装插件页面进行相关配置。
表1 参数说明 参数
说明
示例
redis.addr
Redis的地址,必须配置。
ip地址:端口
redis.password
Redis的密码,必须配置。
-
agentSandbox.install
是否自动安装agent-sandbox。AgentCube插件运行时依赖agent-sandbox,当参数配置为true时会自动安装。若您的集群已手动安装了agent-sandbox,则可配置为false跳过安装。
true
agentSandbox.extensions
是否启用agent-sandbox的extension controller
true
volcano.scheduler.enabled
是否安装volcano agent-scheduler调度器
false
router.service.type
agentcube-router组件service访问的类型,如果需要通过节点访问,可配置为NodePort
ClusterIP、NodePort
workloadmanager.service.type
workloadmanager组件service访问的类型,如果需要通过节点访问,可配置为NodePort
ClusterIP、NodePort
- 单击“安装”。当该插件状态为“运行中”时,则说明插件安装成功。
组件说明
| 容器组件 | 说明 | 资源类型 |
|---|---|---|
| workloadmanager | 管理Sandbox和CodeInterpreter的生命周期。 | Deployment |
| agentcube-router | API 网关,代理客户端请求到沙箱实例。 | Deployment |
| volcano-agent-scheduler | 调度器组件,提供低延迟和高吞吐的负责调度。 | Deployment |
| agent-sandbox-controller | 管理AgentSandbox资源。 | Deployment |
workloadmanager、agentcube-router、volcano-agent-scheduler、agent-sandbox-controller组件均部署在agentcube命名空间中。
插件安装后如果卸载,会将agentcube命名空间下的创建的组件、Service删除,但不会删除插件创建的CRD。
使用示例
插件安装完成后,您可以参考以下示例进行使用。
示例1:使用CodeInterpreter
- 创建code-interpreter-demo.yaml。
apiVersion: runtime.agentcube.volcano.sh/v1alpha1 kind: CodeInterpreter metadata: name: my-codeinterpreter namespace: default spec: template: # runtimeClassName: kata # 若要使用安全容器,则可配置runtimeClassName为kata或kuasar-vmm(需要有支持安全运行时的节点) # 使用 PicoD 镜像 image: ghcr.io/volcano-sh/picod:latest # 资源限制 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "512Mi" # 会话配置 sessionTimeout: "15m" # 空闲 15 分钟后超时 maxSessionDuration: "8h" # 最大会话时长 8 小时 # 关键功能:预热池 warmPoolSize: 5 # 预热 5 个 Pod(近零延迟) - 部署CodeInterpreter。
kubectl apply -f code-interpreter-demo.yaml
创建完成后,使用以下命令查看状态。
kubectl get codeinterpreter my-codeinterpreter -o yaml
- 验证预热池创建。
# 查看创建的 SandboxWarmPool kubectl get sandboxwarmpool -n default # 查看预热池的 Pod kubectl get pods |grep my-codeinterpreter
- 创建测试脚本(需本地已安装python>=3.11)。
- 创建文件夹test_codeinterpreter。
- 进入test_codeinterpreter文件夹,执行以下命令创建python虚拟环境。
python -m venv venv
- 执行以下命令激活虚拟环境(Windows系统请在powershell下执行.\venv\Scripts\activate)。
source venv/bin/activate
- 执行以下命令安装依赖。
pip install -r requirements.txt
- 运行测试脚本。
- 设置环境变量(如果在集群外访问,需要进行设置,可将workloadmanager和agentcube-router的service配置为NodePort类型,并给CCE集群节点绑定弹性公网IP,通过弹性公网IP+NodePort访问)
- Linux环境执行:
export WORKLOAD_MANAGER_URL="http://addr:workloadmanager-service-nodeport" export ROUTER_URL="http://addr:agentcube-router-service-nodeport"
- Windows环境在powershell下执行:
$env:ROUTER_URL = "http://addr:agentcube-router-service-nodeport" $env:WORKLOAD_MANAGER_URL = "http://addr:workloadmanager-service-nodeport"
其中addr为弹性公网IP地址,agentcube-router-service-nodeport为agentcube-router Service的NodePort端口,workloadmanager-service-nodeport为workloadmanager Service的NodePort端口
- Linux环境执行:
- 运行测试
python test_codeinterpreter.py
输出:

- 设置环境变量(如果在集群外访问,需要进行设置,可将workloadmanager和agentcube-router的service配置为NodePort类型,并给CCE集群节点绑定弹性公网IP,通过弹性公网IP+NodePort访问)
示例二:使用AgentRuntime
- 创建文件夹test_agentruntime。
- 执行以下命令构建Agent示例镜像,并将其推送到镜像仓库。
docker build -t my-agent-app:latest .
- 部署AgentRuntime
agent-runtime-demo.yaml文件:
apiVersion: runtime.agentcube.volcano.sh/v1alpha1 kind: AgentRuntime metadata: name: my-agent-app namespace: default spec: targetPort: - pathPrefix: "/" port: 8080 protocol: "HTTP" podTemplate: labels: app: my-agent-app spec: # runtimeClassName: kata # 若要使用安全容器,则可配置runtimeClassName为kata或kuasar-vmm(需要有支持安全运行时的节点) schedulerName: default-scheduler # 如果开启安装了volcano agent-scheduler调度器,可配置为agent-scheduler containers: - name: my-agent-app image: {{agent image}} # 构建好的Agent示例镜像 env: - name: WORKLOAD_MANAGER_URL value: http://workloadmanager.agentcube.svc.cluster.local:8080 - name: ROUTER_URL value: http://agentcube-router.agentcube.svc.cluster.local:8080 - name: CODEINTERPRETER_NAME # 代码解释器的名字 value: my-codeinterpreter - name: CODEINTERPRETER_NAMESPACE value: default readinessProbe: httpGet: path: /health port: 8080 periodSeconds: 5 sessionTimeout: "15m" # 空闲 15 分钟后超时 maxSessionDuration: "8h" # 最大会话时长 8 小时 status: {} - 部署并查看AgentRuntime状态
kubectl apply -f agent-runtime-demo.yaml # 查看状态 kubectl get agentruntime my-agent-app -oyaml
- 创建测试脚本(需本地已安装python>=3.11)。
- 创建文件夹test_agentruntime。 在其中创建文件test_agentruntime.py、requirements.txt,文件内容如下:
- test_agentruntime.py文件:
from agentcube.agent_runtime import AgentRuntimeClient import os import time # 配置环境变量 ROUTER_URL = os.getenv('ROUTER_URL', 'http://agentcube-router.agentcube.svc.cluster.local:8080') AGENT_NAME = os.getenv('AGENT_NAME', 'my-agent-app') AGENT_NAMESPACE = os.getenv('AGENT_NAMESPACE', 'default') saved_session_id = "" def test_basic_invoke(): """测试基本调用功能""" print("=== test basic invoke ===\n") # 创建客户端 agent_client = AgentRuntimeClient( agent_name=AGENT_NAME, namespace=AGENT_NAMESPACE, router_url=ROUTER_URL, verbose=True, timeout=500, connect_timeout=120.0 ) print(f"会话 ID: {agent_client.session_id}\n") # 第一次调用(创建新 Pod) print("first invoke(create new Pod):") result = agent_client.invoke( payload={"prompt": "hello world!"}, ) print(f"response: {result}\n") # # 保存会话 ID global saved_session_id saved_session_id = agent_client.session_id def test_session_reuse(): """测试会话复用""" print(f"=== test session reuse ===\n") # 使用之前的会话 ID agent_client = AgentRuntimeClient( agent_name=AGENT_NAME, namespace=AGENT_NAMESPACE, router_url=ROUTER_URL, session_id=saved_session_id, # 复用会话 verbose=True, timeout=500, connect_timeout=120.0 ) print(f"reuse session ID: {agent_client.session_id}\n") # 第二次调用(复用现有 Pod) print("second invoke(reuse Pod):") result = agent_client.invoke( payload={"prompt": "How's the weather today?"}, ) print(f"response: {result}\n") def test_conversation(): """测试连续对话""" print("=== test conversation ===\n") agent_client = AgentRuntimeClient( agent_name=AGENT_NAME, namespace=AGENT_NAMESPACE, router_url=ROUTER_URL, verbose=True, timeout=500, connect_timeout=120.0 ) messages = [ "Introduce yourself", "What can you do?", "Write a Python function for me", ] for i, msg in enumerate(messages, 1): print(f"message {i}: {msg}") result = agent_client.invoke( payload={"prompt": msg}, ) print(f"response {i}: {result}\n") time.sleep(1) if __name__ == "__main__": test_basic_invoke() test_session_reuse() test_conversation() - requirements.txt文件:
agentcube_sdk
- test_agentruntime.py文件:
- 进入test_agentruntime文件夹,执行以下命令创建python虚拟环境。
python -m venv venv
- 执行以下命令激活虚拟环境(Windows系统请在powershell下执行.\venv\Scripts\activate)。
source venv/bin/activate
- 执行以下命令安装依赖。
pip install -r requirements.txt
- 创建文件夹test_agentruntime。
- 运行测试脚本。
- 设置环境变量(如果在集群外访问,需要进行设置,可将agentcube-router的service配置为NodePort类型,并给CCE集群节点绑定弹性公网IP,通过弹性公网IP+NodePort访问)
- Linux环境执行:
export ROUTER_URL="http://addr:agentcube-router-service-nodeport"
- Windows环境在powershell下执行:
$env:ROUTER_URL = "http://addr:agentcube-router-service-nodeport"
其中addr为弹性公网IP地址,agentcube-router-service-nodeport为agentcube-router Service的NodePort端口。
- Linux环境执行:
- 运行测试
python test_agentruntime.py
输出:

- 设置环境变量(如果在集群外访问,需要进行设置,可将agentcube-router的service配置为NodePort类型,并给CCE集群节点绑定弹性公网IP,通过弹性公网IP+NodePort访问)
版本说明
| 插件版本 | 支持的集群版本 | 更新特性 |
|---|---|---|
| 1.0.3 | v1.29 v1.30 v1.31 v1.32 v1.33 v1.34 v1.35 | 新增AgentCube插件 |