更新时间:2026-05-21 GMT+08:00
分享

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工作负载:

  1. AgentRuntime:面向长会话、复杂的对话式Agent,支持定义会话的生命周期、资源配额以及持久化策略。
  2. 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的详细介绍,请参见AgentCube

前提条件

  • 已创建v1.29及以上的CCE Standard/Turbo集群。
  • 已经部署了Redis,并确保AgentCube可访问Redis。

安装插件

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 单击左侧导航栏的“插件中心”,在右侧找到AgentCube插件,单击“安装”
  3. 在安装插件页面进行相关配置。

    表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

  4. 单击“安装”。当该插件状态为“运行中”时,则说明插件安装成功。

组件说明

表2 AgentCube组件

容器组件

说明

资源类型

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

  1. 创建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(近零延迟)

  2. 部署CodeInterpreter。

    kubectl apply -f code-interpreter-demo.yaml

    创建完成后,使用以下命令查看状态。

    kubectl get codeinterpreter my-codeinterpreter -o yaml

  3. 验证预热池创建。

    # 查看创建的 SandboxWarmPool
    kubectl get sandboxwarmpool -n default
    # 查看预热池的 Pod
    kubectl get pods |grep my-codeinterpreter

  4. 创建测试脚本(需本地已安装python>=3.11)。

    1. 创建文件夹test_codeinterpreter。
    2. 进入test_codeinterpreter文件夹,执行以下命令创建python虚拟环境。
      python -m venv venv
    3. 执行以下命令激活虚拟环境(Windows系统请在powershell下执行.\venv\Scripts\activate)。
      source venv/bin/activate
    4. 执行以下命令安装依赖。
      pip install -r requirements.txt

  5. 运行测试脚本。

    1. 设置环境变量(如果在集群外访问,需要进行设置,可将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端口

    2. 运行测试
      python test_codeinterpreter.py

      输出:

示例二:使用AgentRuntime

  1. 创建文件夹test_agentruntime。

  2. 执行以下命令构建Agent示例镜像,并将其推送到镜像仓库。

    docker build  -t my-agent-app:latest .

  3. 部署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: {}

  4. 部署并查看AgentRuntime状态

    kubectl apply -f agent-runtime-demo.yaml
    #  查看状态
    kubectl get agentruntime my-agent-app -oyaml

  5. 创建测试脚本(需本地已安装python>=3.11)。

    1. 创建文件夹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
    2. 进入test_agentruntime文件夹,执行以下命令创建python虚拟环境。
      python -m venv venv
    3. 执行以下命令激活虚拟环境(Windows系统请在powershell下执行.\venv\Scripts\activate)。
      source venv/bin/activate
    4. 执行以下命令安装依赖。
      pip install -r requirements.txt

  6. 运行测试脚本。

    1. 设置环境变量(如果在集群外访问,需要进行设置,可将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端口。

    2. 运行测试
      python test_agentruntime.py

      输出:

版本说明

表3 AgentCube插件版本记录

插件版本

支持的集群版本

更新特性

1.0.3

v1.29

v1.30

v1.31

v1.32

v1.33

v1.34

v1.35

新增AgentCube插件

相关文档