Skip to content

ADK 的 GKE 代码执行器工具

Supported in ADKPython v1.14.0

GKE 代码执行器 (GkeCodeExecutor) 通过利用 GKE (Google Kubernetes Engine) 沙箱环境提供了一种安全且可扩展的方法来运行 LLM 生成的代码,该环境使用 gVisor 进行工作负载隔离。对于每个代码执行请求,它会动态创建一个临时的、沙箱化的 Kubernetes Job,并使用强化的 Pod 配置。你应该在 GKE 上的生产环境中使用此执行器,在这些环境中安全性和隔离性至关重要。

工作原理

当发出执行代码的请求时,GkeCodeExecutor 执行以下步骤:

  1. 创建 ConfigMap: 创建一个 Kubernetes ConfigMap 来存储需要执行的 Python 代码。
  2. 创建沙箱化 Pod: 创建一个新的 Kubernetes Job,该 Job 反过来创建一个具有强化安全上下文并启用 gVisor 运行时的 Pod。ConfigMap 中的代码被挂载到此 Pod 中。
  3. 执行代码: 代码在沙箱化的 Pod 中执行,与底层节点和其他工作负载隔离。
  4. 检索结果: 从 Pod 的日志中捕获执行的标准输出和错误流。
  5. 清理资源: 执行完成后,Job 和关联的 ConfigMap 会自动删除,确保不会留下任何制品。

主要优势

  • 增强的安全性: 代码在具有内核级隔离的 gVisor 沙箱环境中执行。
  • 临时环境: 每次代码执行都在其自己的临时 Pod 中运行,以防止执行之间的状态传递。
  • 资源控制: 你可以为执行 Pod 配置 CPU 和内存限制,以防止资源滥用。
  • 可扩展性: 允许你并行运行大量代码执行,GKE 处理底层节点的调度和扩展。

系统要求

要成功部署带有 GKE 代码执行器工具的 ADK 项目,必须满足以下要求:

  • 具有启用 gVisor 的节点池的 GKE 集群。
  • 智能体的服务账户需要特定的 RBAC 权限,允许它:
    • 为每个执行请求创建、监视和删除 Jobs
    • 管理 ConfigMaps 以将代码注入 Job 的 pod 中。
    • 列出 Pods 并读取其日志以检索执行结果
  • 使用 GKE 额外功能安装客户端库:pip install google-adk[gke]

有关完整的、可立即使用的配置,请参阅 deployment_rbac.yaml 示例。有关将 ADK 工作流部署到 GKE 的更多信息,请参阅部署到 Google Kubernetes Engine (GKE)

from google.adk.agents import LlmAgent
from google.adk.code_executors import GkeCodeExecutor

# Initialize the executor, targeting the namespace where its ServiceAccount
# has the required RBAC permissions.
# This example also sets a custom timeout and resource limits.
gke_executor = GkeCodeExecutor(
    namespace="agent-sandbox",
    timeout_seconds=600,
    cpu_limit="1000m",  # 1 CPU core
    mem_limit="1Gi",
)

# The agent now uses this executor for any code it generates.
gke_agent = LlmAgent(
    name="gke_coding_agent",
    model="gemini-2.0-flash",
    instruction="You are a helpful AI agent that writes and executes Python code.",
    code_executor=gke_executor,
)

配置参数

GkeCodeExecutor 可以使用以下参数进行配置:

参数 类型 描述
namespace str 将在其中创建执行 Jobs 的 Kubernetes 命名空间。默认为 "default"
image str 用于执行 Pod 的容器镜像。默认为 "python:3.11-slim"
timeout_seconds int 代码执行的超时时间 (秒)。默认为 300
cpu_requested str 为执行 Pod 请求的 CPU 量。默认为 "200m"
mem_requested str 为执行 Pod 请求的内存量。默认为 "256Mi"
cpu_limit str 执行 Pod 可以使用的最大 CPU 量。默认为 "500m"
mem_limit str 执行 Pod 可以使用的最大内存量。默认为 "512Mi"
kubeconfig_path str 用于身份验证的 kubeconfig 文件路径。回退到集群内配置或默认本地 kubeconfig。
kubeconfig_context str 要使用的 kubeconfig 上下文。