使用 ADK 和 Vertex AI 在 GKE 上部署智能体应用
本指南说明如何用 GKE、ADK 与 Vertex AI,把基于 FastAPI、由 Gemini 2.5 Flash 驱动的智能体做成容器,部署到集群并完成接口测试与资源清理。

目录
使用 Agent Development Kit(ADK)和 Vertex AI 在 GKE 上部署智能体应用
本指南演示如何使用谷歌 Kubernetes 引擎(Google Kubernetes Engine,GKE)部署并管理容器化的智能体人工智能/机器学习应用。把谷歌智能体开发套件(Agent Development Kit,ADK)与作为大语言模型(large language model,LLM)提供方的 Vertex AI 结合起来,你可以高效、规模化地把人工智能智能体投入运行。本指南带你走完端到端过程:把一个由 Gemini 2.5 Flash 驱动、基于 FastAPI 的智能体,从开发推进到在 GKE 上的生产部署。
本指南面向希望使用 Kubernetes 容器编排能力来提供智能体人工智能/机器学习应用的机器学习(Machine learning,ML)工程师、开发者和云架构师。要进一步了解 Google Cloud 内容中的常见角色和示例任务,请参阅常见的 GKE 用户角色与任务。
开始之前,请确保你熟悉以下内容:
背景
本指南把若干 Google 技术组合起来,搭建一个可扩展的智能体人工智能平台。GKE 为用 ADK 构建的智能体提供容器编排。通过 Vertex AI API 做大语言模型推理,GKE 集群不需要专门的 GPU 硬件,因为推理由 Google 的托管基础设施处理。
谷歌智能体开发套件(Google Agent Development Kit,ADK)
智能体开发套件(Agent Development Kit,ADK)是用于开发和部署人工智能智能体的灵活、模块化框架。它针对 Gemini 和 Google 生态系统做了优化,但 ADK 与模型无关、与部署方式无关,并且为与其他框架兼容而构建。
更多信息见 ADK 文档。
GKE 托管的 Kubernetes 服务
GKE 是用于部署、扩展和管理容器化应用的托管 Kubernetes 服务。GKE 提供所需基础设施,包括可扩展资源、分布式计算和高效网络,以应对大语言模型的计算需求。
关于关键 Kubernetes 概念的更多信息,见开始学习 Kubernetes。关于 GKE 以及它如何帮助你扩展、自动化并管理 Kubernetes 的更多信息,见 GKE 概述。
Vertex AI
Vertex AI 是 Google Cloud 统一的机器学习平台,让开发者能够构建、部署并扩展人工智能/机器学习模型。对于 GKE 上的智能体人工智能应用,Vertex AI 提供必要的工具和服务,包括对 Gemini 2.5 Flash 等大语言模型的访问、用于训练和推理的托管基础设施,以及用于高效生命周期管理的 MLOps 能力。
通过 Vertex AI API 使用大语言模型时,模型推理发生在 Google 的托管基础设施上,从而降低你的 GKE 集群对特定 GPU 或 TPU 配额的需求。
关于面向智能体人工智能应用的 Vertex AI 的更多信息,见 Vertex AI 文档。
Gemini 2.5 Flash
Gemini 2.5 Flash 提供面向智能体工作负载设计的下一代特性和更强能力,包括更高速度、内置工具使用、多模态生成,以及 100 万 token 的上下文窗口。Gemini 2.5 Flash 改进了上一代 Flash 模型,并在相近速度下提供更高质量。
关于 Gemini 2.5 Flash 的技术信息(例如性能基准、训练数据集信息、可持续性方面的工作、预期用途与限制,以及伦理与安全方面的做法),见 Gemini 2.5 Flash 模型卡。
目标
本指南说明如何完成以下事项:
- 设置你的 Google Cloud 环境。
- 为你的智能体构建容器镜像。
- 把智能体部署到 GKE 集群。
- 测试已部署的智能体。
费用
本指南使用 Google Cloud 的以下计费组件:
请查看各项服务的价格,以了解可能产生的费用。
开始之前
登录你的 Google Cloud 账号。如果你是 Google Cloud 的新用户,请创建账号,以便评估我们的产品在真实场景中的表现。新客户还会获得 300 美元免费赠金,用于运行、测试和部署工作负载。
在 Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目。
选择或创建项目所需的角色
- 选择项目:选择项目不需要特定的 IAM 角色——你可以选择任何已向你授予角色的项目。
- 创建项目:要创建项目,你需要 Project Creator 角色(
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create权限。了解如何授予角色。
启用所需的 API(如果尚未启用)。
启用 API 所需的角色
要启用 API,你需要 serviceusage.services.enable 权限。如果你创建了该项目,则很可能已经通过 Owner 角色(roles/owner)拥有此权限。否则,你可以通过 Service Usage Admin 角色(roles/serviceusage.serviceUsageAdmin)获得此权限。了解如何授予角色。
确认你在该项目上拥有以下一个或多个角色:
roles/container.admin, roles/iam.serviceAccountAdmin, roles/artifactregistry.admin, roles/cloudbuild.builds.editor, roles/resourcemanager.projectIamAdmin
检查角色
- 在 Google Cloud 控制台中,转到 IAM 页面。
- 选择项目。
- 在主账号(Principal)列中,找出标识你本人或你所在群组的所有行。要了解你属于哪些群组,请联系管理员。
- 对于指定或包含你的所有行,查看角色(Role)列,确认角色列表是否包含所需角色。
授予角色
- 在 Google Cloud 控制台中,转到 IAM 页面。
- 选择项目。
- 点击授予访问权限(Grant access)。
- 在新的主账号(New principals)字段中,输入你的用户标识。
这通常是 Google 账号的电子邮件地址。
- 点击选择角色(Select a role),然后搜索该角色。
- 要授予其他角色,点击添加其他角色(Add another role),并添加每一个额外角色。
- 点击保存(Save)。
准备环境
本教程使用 Cloud Shell 管理托管在 Google Cloud 上的资源。Cloud Shell 预装了本教程所需的软件,包括 kubectl、terraform 和 Google Cloud CLI。
要使用 Cloud Shell 设置环境,请按以下步骤操作:
- 在 Google Cloud 控制台中启动 Cloud Shell 会话,并点击激活 Cloud Shell(Activate Cloud Shell)。此操作会在 Google Cloud 控制台底部窗格中启动一个会话。
- 设置默认环境变量:
gcloud config set project PROJECT_ID
export GOOGLE_CLOUD_LOCATION=REGION
export PROJECT_ID=PROJECT_ID
export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
export WORKLOAD_POOL=$PROJECT_ID.svc.id.goog
export PROJECT_NUMBER=$(gcloud projects describe --format json $PROJECT_ID | jq -r ".projectNumber")替换以下值:
- PROJECT_ID:你的 Google Cloud 项目 ID。
- REGION:用于预配 GKE 集群、Artifact Registry 和其他区域级资源的 Google Cloud 区域(例如
us-central1)。
克隆示例项目
- 在 Cloud Shell 终端中,克隆本教程的示例代码仓库:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git- 进入教程目录:
cd kubernetes-engine-samples/ai-ml/adk-vertex创建并配置 Google Cloud 资源
要把智能体部署到 GKE,请预配必要的 Google Cloud 资源。你可以使用 gcloud CLI 直接在命令行执行,也可以使用 Terraform 做基础设施即代码。
#### 使用 gcloud CLI
本节提供 gcloud CLI 命令,用于设置 GKE 集群、Artifact Registry,以及用于与 Vertex AI 无缝集成的 GKE 工作负载身份联合(Workload Identity Federation for GKE)。请确保你已按准备环境中的说明设置了环境变量。
- 创建 GKE 集群:你可以在 GKE Autopilot 或 Standard 集群中部署容器化智能体应用。使用 Autopilot 集群可获得完全托管的 Kubernetes 体验。要选择最适合你工作负载的 GKE 运行模式,见选择 GKE 运行模式。
Autopilot
在 Cloud Shell 中运行以下命令:
gcloud container clusters create-auto CLUSTER_NAME \
--location=$GOOGLE_CLOUD_LOCATION \
--project=$PROJECT_ID把 CLUSTER_NAME 替换为你的 GKE Autopilot 集群名称。
Standard
在 Cloud Shell 中运行以下命令:
gcloud container clusters create CLUSTER_NAME \
--location=$GOOGLE_CLOUD_LOCATION \
--project=$PROJECT_ID \
--release-channel=stable \
--num-nodes=1 \
--machine-type=e2-medium \
--workload-pool=$PROJECT_ID.svc.id.goog把 CLUSTER_NAME 替换为你的 Standard 集群名称。
- 为 Docker 容器创建 Artifact Registry 仓库:创建一个 Artifact Registry 仓库,以便安全地存储和管理智能体的 Docker 容器镜像。这个私有仓库有助于确保应用可以随时部署到 GKE,并与 Cloud Build 集成。
gcloud artifacts repositories create adk-repo \
--repository-format=docker \
--location=$GOOGLE_CLOUD_LOCATION \
--project=$PROJECT_ID- 获取仓库 URL:运行此命令以核验仓库的完整路径。下一步为 Docker 镜像打标签时会使用此路径格式。
gcloud artifacts repositories describe adk-repo \
--location $GOOGLE_CLOUD_LOCATION \
--project=$PROJECT_ID- 向 Compute Engine 默认服务账号授予所需的 IAM 角色:默认情况下,Compute Engine 默认服务账号没有向 Artifact Registry 推送镜像的权限,也没有查看 Cloud Storage 中对象或日志的权限。为这些操作授予必要角色。
ROLES_TO_ASSIGN=(
"roles/artifactregistry.writer"
"roles/storage.objectViewer"
"roles/logging.viewer"
)
for ROLE in "${ROLES_TO_ASSIGN[@]}"; do
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="${ROLE}"
done- 构建并推送智能体容器镜像:运行此命令来构建 Docker 镜像,并把它推送到你的 Artifact Registry。请确保 Dockerfile 和应用代码位于
/app目录内。
export IMAGE_URL="${GOOGLE_CLOUD_LOCATION}-docker.pkg.dev/${PROJECT_ID}/adk-repo/adk-agent:latest"
gcloud builds submit \
--tag "$IMAGE_URL" \
--project="$PROJECT_ID" \
app- 验证镜像已推送:
gcloud artifacts docker images list \
$GOOGLE_CLOUD_LOCATION-docker.pkg.dev/$PROJECT_ID/adk-repo/adk-agent \
--project=$PROJECT_ID#### 使用 Terraform
本节说明如何使用 Terraform 预配 Google Cloud 资源。你克隆的示例仓库包含必要的 Terraform 配置文件。
- 初始化 Terraform:进入
terraform目录并初始化 Terraform。
terraform init- 查看执行计划:此命令显示 Terraform 将做的基础设施变更。
terraform plan -var-file=default_env.tfvars- 应用配置:执行 Terraform 计划,在你的 Google Cloud 项目中创建资源。出现提示时以
yes确认。
terraform apply -var-file=default_env.tfvars运行这些命令后,Terraform 会预配你的 GKE 集群和 Artifact Registry 仓库,并配置必要的 IAM 角色和服务账号,包括 GKE 的工作负载身份联合(Workload Identity Federation for GKE)。
要进一步了解如何使用 Terraform,见 Terraform 对 GKE 的支持。
配置 kubectl 以与集群通信
如果你尚未配置 kubectl 与集群通信,请运行以下命令:
gcloud container clusters get-credentials CLUSTER_NAME \
--location=${GOOGLE_CLOUD_LOCATION}把 CLUSTER_NAME 替换为你的 GKE 集群名称。
为 GKE 访问配置工作负载身份联合(Workload Identity Federation)
如果你使用的是 Terraform,可以跳过此步骤。此过程为你的 Kubernetes ServiceAccount 授予与 Vertex AI 交互的权限。
- 在集群中创建一个 Kubernetes ServiceAccount。运行此命令之前,请确保已按照配置
kubectl以与集群通信中的说明操作:
kubectl create serviceaccount vertex-sa- 在项目上为该 Kubernetes ServiceAccount 授予 Vertex AI User 角色(
roles/aiplatform.user):
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/vertex-sa" \
--role="roles/aiplatform.user" \
--condition=None部署并配置智能体应用
设置好 Google Cloud 资源后,准备智能体应用以便部署,并配置它在 GKE 上的运行时。这包括定义智能体代码、创建用于将其容器化的 Dockerfile,以及编写用于将其部署到集群的 Kubernetes 清单。
- 了解智能体应用结构:
/app目录包含智能体应用的核心文件:
main.py:FastAPI 应用入口,负责公开智能体的 API。agent.py:包含 ADK 智能体的逻辑,定义它如何使用 Vertex AI 以及如何处理请求。__init__.py:初始化该 Python 包。requirements.txt:列出智能体的全部 Python 依赖。Dockerfile:定义如何把应用打包成 Docker 镜像。
- 创建智能体部署清单:在
tutorials-and-examples/adk/vertex目录中,创建以下清单,并保存为名为agent-deployment.yaml的文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: adk-agent-deployment
labels:
app: adk-agent
# Identifies the workload as an AI agent and adds it to the registry
registry.gke.io/functional-type: "AGENT"
spec:
replicas: 1
selector:
matchLabels:
app: adk-agent
template:
metadata:
labels:
app: adk-agent
spec:
serviceAccountName: vertex-sa
containers:
- name: adk-agent
image: IMAGE_URL
ports:
- containerPort: 8000
env:
- name: GOOGLE_CLOUD_PROJECT_ID
value: PROJECT_ID
- name: GOOGLE_CLOUD_LOCATION
value: REGION
- name: GOOGLE_GENAI_USE_VERTEXAI
value: "1"
- name: PORT
value: "8000"
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"替换以下值:
- IMAGE_URL:你推送到 Artifact Registry 的 Docker 镜像完整 URL(例如
us-central1-docker.pkg.dev/${PROJECT_ID}/adk-repo/adk-agent:latest)。你可以从上一节gcloud artifacts docker images list命令的输出中取得此值。也可以运行类似下面的命令:sed -i "s|image: IMAGE_URL|image: $IMAGE_URL|" agent-deployment.yaml。 - PROJECT_ID:你的 Google Cloud 项目 ID。
- REGION:预配 GKE 集群所在的 Google Cloud 区域。
- 应用部署清单:
kubectl apply -f agent-deployment.yaml此命令会在 GKE 集群中为你的智能体应用创建 Deployment 及相关 Pod,并把该智能体注册到 Agent Registry。
- 公开智能体:你可以使用这些方法公开智能体以便访问。
- 要从集群外部访问智能体,请创建一个 Kubernetes Service。对于 Web API,
LoadBalancer类型的服务很常见。 - 对于本地开发和测试,使用
kubectl port-forward命令直接访问智能体。
LoadBalancer
- 创建以下清单,并保存为名为
agent-service.yaml的文件:
apiVersion: v1
kind: Service
metadata:
name: adk-agent-service
spec:
selector:
app: adk-agent
type: LoadBalancer # Creates an external IP address for access
ports:
- protocol: TCP
port: 80
targetPort: 8000 # Matches the containerPort exposed in the Deployment- 应用该清单:
kubectl apply -f agent-service.yaml外部 IP 地址的预配可能需要几分钟。
- 验证 IP 地址已预配:
kubectl get service adk-agent-service在输出中查找 EXTERNAL-IP 值。该值可用后,使用此 IP 地址与已部署的智能体交互。
port-forward
如果你主要使用 port-forward,可以考虑使用 ClusterIP 服务类型而不是 LoadBalancer,因为 ClusterIP 服务是内部的,消耗的资源更少。
POD_NAME=$(kubectl get pods -l app=adk-agent -o jsonpath='{.items[0].metadata.name}')
kubectl port-forward $POD_NAME 8000:8000此命令会阻塞你的终端,但它会把你机器上 localhost:8000 的流量转发到 GKE 集群内运行的智能体。
测试已部署的智能体
智能体应用已经部署并公开后,测试其功能。
本节说明如何确定智能体的端点并测试智能体的 API。
- 确定智能体的端点:根据你在上一节选择的公开方式,确定其可访问端点:
LoadBalancer
- 获取外部 IP 地址:
kubectl get service adk-agent-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}'- 把外部 IP 地址存入环境变量,以便使用:
export AGENT_IP=$(kubectl get service adk-agent-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}')智能体的基址 URL 是 http://${AGENT_IP}。
port-forward
请确保 kubectl port-forward 命令在另一个终端中运行。智能体的基址 URL 是 http://localhost:8000。
- 测试智能体的 API:向其
/run端点发起 curl 请求,以测试智能体的 API。智能体期望一个带有 message 字段的 JSON 载荷。把 AGENT_BASE_URL 替换为http://${AGENT_IP}(LoadBalancer)或http://localhost:8000(port-forward)。
- 创建一个新会话。这会让智能体准备好一次新对话。
# The user ID and session ID are arbitrary.
# The appName must match the agent's Python package directory name (in this case, "capital_agent").
curl -X POST AGENT_BASE_URL/apps/capital_agent/users/user-123/sessions/session-123你可以用以下命令列出可用应用:
curl -X GET AGENT_BASE_URL/list-apps- 使用上一步的会话详情向智能体发送查询。
curl -X POST AGENT_BASE_URL/run \
-H "Content-Type: application/json" \
-d '{
"appName": "capital_agent",
"userId": "user-123",
"sessionId": "session-123",
"newMessage": {
"role": "user",
"parts": [{"text": "Hello, agent! What can you do for me?"}]
}
}'你应当收到来自智能体的 JSON 响应,表明它成功处理了请求,并通过 Vertex AI 与 Gemini 模型交互。响应包含智能体基于你的消息生成的回复。
- 访问智能体的 Web 界面(如适用):如果你的智能体包含基于 Web 的用户界面,在 Web 浏览器中打开 AGENT_BASE_URL 即可访问。ADK 通常包含一个用于交互和调试的基本 Web 界面。例如,如果你使用 LoadBalancer 公开智能体,且其
EXTERNAL-IP为34.123.45.67,则在浏览器中打开http://34.123.45.67。
清理
为避免本教程所用资源继续向你的 Google Cloud 账号产生费用,可以删除包含这些资源的项目,或者保留项目并删除各个资源。
删除已部署的资源
为避免本指南中创建的资源继续向你的 Google Cloud 账号产生费用,请运行以下命令:
gcloud
gcloud container clusters delete CLUSTER_NAME \
--location=${GOOGLE_CLOUD_LOCATION} \
--project=$PROJECT_ID
gcloud projects remove-iam-policy-binding $PROJECT_ID \
--member="principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/vertex-sa" \
--role="roles/aiplatform.user" \
--condition=None
gcloud artifacts repositories delete adk-repo \
--location=$GOOGLE_CLOUD_LOCATION \
--project=$PROJECT_ID把 CLUSTER_NAME 替换为你的 GKE 集群名称。
Terraform
- 在 Cloud Shell 终端中,进入
tutorials-and-examples/adk/vertex/目录:
cd tutorials-and-examples/adk/vertex/- 运行此命令,移除 Terraform 配置文件中定义的全部资源。
cd terraform
terraform destroyPRIMARY_SOURCE: https://docs.cloud.google.com/kubernetes-engine/docs/tutorials/agentic-adk-vertex
- #GKE
- #ADK
- #Vertex AI
- #部署
- #智能体


