Este guia demonstra como implantar e gerenciar aplicativos de IA/ML com agentes conteinerizados usando o Google Kubernetes Engine (GKE). Ao combinar o Kit de Desenvolvimento de Agentes (ADK) do Google com a Vertex AI como provedora de modelos de linguagem grandes (LLMs), é possível operacionalizar agentes de IA de maneira eficiente e em grande escala. Este guia orienta você em todo o processo de levar um agente baseado em FastAPI com tecnologia do Gemini 2.0 Flash do desenvolvimento à implantação de produção no GKE.
Este guia é destinado a engenheiros de machine learning (ML), desenvolvedores e arquitetos de nuvem interessados em usar os recursos de orquestração de contêineres do Kubernetes para veiculação de aplicativos de IA/ML com agentes. Para saber mais sobre papéis comuns e tarefas de exemplo no conteúdo do Google Cloud , consulte Funções e tarefas comuns do usuário do GKE.
Antes de começar, confira se você tem familiaridade com o seguinte:
Contexto
Este guia combina várias tecnologias do Google para criar uma plataforma escalonável para IA generativa. O GKE fornece a orquestração de contêineres para o agente, que é criado usando o ADK. Ao usar a API Vertex AI para inferência de LLM, o cluster do GKE não exige hardware de GPU especializado, porque a inferência é processada pela infraestrutura gerenciada do Google.
Kit de Desenvolvimento de Agente (ADK) do Google
O Agent Development Kit (ADK) é um framework flexível e modular para desenvolver e implantar agentes de IA. Embora seja otimizado para o Gemini e o ecossistema do Google, o ADK é independente de modelo e implantação e foi criado para ser compatível com outros frameworks.
Para mais informações, consulte a documentação do ADK.
Serviço gerenciado do Kubernetes do GKE
O GKE é um serviço gerenciado do Kubernetes para implantar, escalonar e gerenciar aplicativos conteinerizados. O GKE fornece a infraestrutura necessária, incluindo recursos escalonáveis, computação distribuída e rede eficiente, para lidar com as demandas computacionais dos LLMs.
Para mais informações sobre os principais conceitos do Kubernetes, consulte Começar a aprender sobre o Kubernetes. Para mais informações sobre o GKE e como ele ajuda você a escalonar, automatizar e gerenciar o Kubernetes, consulte a visão geral do GKE.
Vertex AI
A Vertex AI é a plataforma unificada de ML do Google Cloud, que permite aos desenvolvedores criar, implantar e escalonar modelos de IA/ML. Para aplicativos de IA autônoma no GKE, a Vertex AI oferece ferramentas e serviços essenciais, incluindo acesso a LLMs como o Gemini 2.0 Flash, infraestrutura gerenciada para treinamento e inferência e recursos de MLOps para gerenciamento eficiente do ciclo de vida.
Ao consumir LLMs pela API Vertex AI, a inferência de modelo ocorre na infraestrutura gerenciada do Google, reduzindo a necessidade de cotas específicas de GPU ou TPU no cluster do GKE.
Para mais informações sobre a Vertex AI para aplicativos de IA com agentes, consulte a documentação da Vertex AI.
Gemini 2.0 Flash
O Gemini 2.0 Flash oferece recursos de última geração e capacidades aprimoradas projetadas para cargas de trabalho de agentes, incluindo maior velocidade, uso de ferramentas integradas, geração multimodal e uma janela de contexto de 1 milhão de tokens. O Gemini 2.0 Flash melhora o modelo Flash anterior e oferece qualidade aprimorada em velocidades semelhantes.
Para informações técnicas sobre o Gemini 2.0 Flash (como comparativos de performance, informações sobre nossos conjuntos de dados de treinamento, esforços em sustentabilidade, uso e limitações pretendidos e nossa abordagem de ética e segurança), consulte a ficha do modelo do Gemini 2.0 Flash.
Prepare o ambiente
Neste tutorial, usamos o Cloud Shell para gerenciar recursos hospedados no Google Cloud.
O Cloud Shell vem pré-instalado com o software necessário para este tutorial,
incluindo kubectl
, terraform
e Google Cloud CLI
.
Para configurar o ambiente com o Cloud Shell, siga estas etapas:
- No console do Google Cloud , inicie uma sessão do Cloud Shell e clique em
Ativar o Cloud Shell. Essa ação inicia uma sessão no painel inferior do console Google Cloud .
Defina as variáveis de ambiente padrão:
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")
Substitua os seguintes valores:
- PROJECT_ID: o Google Cloud ID do projeto.
- REGION: a Google Cloud região (por exemplo,
us-central1
) para provisionar o cluster do GKE, o Artifact Registry e outros recursos regionais.
Clonar o projeto de exemplo
No terminal do Cloud Shell, clone o repositório de exemplo de código do tutorial:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Navegue até o diretório do tutorial:
cd kubernetes-engine-samples/ai-ml/adk-vertex
Criar e configurar recursos Google Cloud
Para implantar o agente no GKE, provisione os recursosGoogle Cloud necessários. É possível implantar o agente usando a CLI gcloud para execução direta na linha de comando ou o Terraform para infraestrutura como código.
gcloud
Esta seção fornece comandos da CLI gcloud para configurar o cluster do GKE, o Artifact Registry e a federação de identidade da carga de trabalho para GKE para uma integração perfeita com a Vertex AI. Verifique se você definiu as variáveis de ambiente conforme descrito em Preparar o ambiente.
Crie um cluster do GKE: é possível implantar seu aplicativo de agente em contêineres em um cluster do GKE Autopilot ou Standard. Use um cluster do Autopilot para ter uma experiência totalmente gerenciada do Kubernetes. Para escolher o modo de operação do GKE mais adequado para suas cargas de trabalho, consulte Escolher um modo de operação do GKE.
Piloto automático
No Cloud Shell, execute este comando:
gcloud container clusters create-auto CLUSTER_NAME \ --location=$GOOGLE_CLOUD_LOCATION \ --project=$PROJECT_ID
Substitua CLUSTER_NAME pelo nome do cluster do GKE Autopilot.
Padrão
No Cloud Shell, execute este comando:
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
Substitua CLUSTER_NAME pelo nome do cluster padrão.
Crie um repositório do Artifact Registry para seu contêiner Docker: crie um repositório do Artifact Registry para armazenar e gerenciar com segurança a imagem do contêiner Docker do seu agente. Esse registro particular ajuda a garantir que seu aplicativo esteja disponível para implantação no GKE e se integra ao Cloud Build.
gcloud artifacts repositories create adk-repo \ --repository-format=docker \ --location=$GOOGLE_CLOUD_LOCATION \ --project=$PROJECT_ID
Receber o URL do repositório: execute este comando para verificar o caminho completo do repositório. Você vai usar esse formato de caminho para adicionar tags à sua imagem do Docker na próxima etapa.
gcloud artifacts repositories describe adk-repo \ --location $GOOGLE_CLOUD_LOCATION \ --project=$PROJECT_ID
Conceda à conta de serviço padrão do Compute Engine os papéis necessários do IAM: por padrão, a conta de serviço padrão do Compute Engine não tem permissões para enviar imagens ao Artifact Registry nem para visualizar objetos no Cloud Storage ou registros. Conceda os papéis necessários para essas operações.
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
Crie e envie a imagem do contêiner do agente: execute este comando para criar sua imagem do Docker e enviá-la ao Artifact Registry. Verifique se o Dockerfile e o código do aplicativo estão no diretório
/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
Verifique se a imagem foi enviada por push:
gcloud artifacts docker images list \ $GOOGLE_CLOUD_LOCATION-docker.pkg.dev/$PROJECT_ID/adk-repo/adk-agent \ --project=$PROJECT_ID
Terraform
Nesta seção, descrevemos como usar o Terraform para provisionar seus recursos do Google Cloud. O repositório de exemplo clonado inclui os arquivos de configuração do Terraform necessários.
Inicialize o Terraform: navegue até o diretório
terraform
e inicialize o Terraform.terraform init
Analise o plano de execução: esse comando mostra as mudanças na infraestrutura que o Terraform vai fazer.
terraform plan -var-file=default_env.tfvars
Aplique a configuração: execute o plano do Terraform para criar os recursos no projeto Google Cloud . Confirme com
yes
quando solicitado.terraform apply -var-file=default_env.tfvars
Depois de executar esses comandos, o Terraform provisiona o cluster do GKE e o repositório do Artifact Registry, além de configurar as contas de serviço e os papéis do IAM necessários, incluindo a Federação de Identidade da Carga de Trabalho para GKE.
Para saber mais sobre como usar o Terraform, consulte Suporte do Terraform para GKE.
Configure kubectl
para se comunicar com o cluster
Se você não tiver configurado o kubectl
para se comunicar com o cluster, execute o seguinte
comando:
gcloud container clusters get-credentials CLUSTER_NAME \
--location=${GOOGLE_CLOUD_LOCATION}
Substitua CLUSTER_NAME pelo nome do cluster do GKE.
Configurar o acesso à federação de identidade da carga de trabalho para o GKE
Pule esta etapa se estiver usando o Terraform. Esse processo vincula uma conta de serviço do Kubernetes (KSA) a uma conta de serviço do IAM para conceder acesso seguro do agente aos serviços do Google Cloud .
Crie uma conta de serviço para acesso à Vertex AI:
gcloud iam service-accounts create vertex-sa \ --project=$PROJECT_ID
Conceda à conta de serviço o papel
aiplatform.user
. Isso permite que a conta de serviço interaja com a Vertex AI.gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:vertex-sa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/aiplatform.user"
Crie uma KSA no cluster. Siga as instruções em Configurar
kubectl
para se comunicar com o cluster antes de executar esse comando.kubectl create serviceaccount vertex-sa
Anote a KSA para vinculá-la à sua conta de serviço:
kubectl annotate serviceaccount vertex-sa \ iam.gke.io/gcp-service-account=vertex-sa@$PROJECT_ID.iam.gserviceaccount.com
Conceda à sua conta de serviço permissões para atuar como um usuário da Federação de Identidade da Carga de Trabalho para GKE para a KSA:
gcloud iam service-accounts add-iam-policy-binding vertex-sa@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[default/vertex-sa]"
Implantar e configurar o aplicativo do agente
Depois de configurar os recursos Google Cloud , prepare o aplicativo do agente para implantação e configure o tempo de execução dele no GKE. Isso envolve definir o código do agente, criar um Dockerfile para conteinerizar e escrever um manifesto do Kubernetes para implantar no cluster.
- Entenda a estrutura do aplicativo do agente: o diretório
/app
contém os arquivos principais do aplicativo do agente:main.py
: o ponto de entrada do aplicativo FastAPI, responsável por expor a API do agente.agent.py
: contém a lógica do agente do ADK, definindo como ele usa a Vertex AI e processa solicitações.__init__.py
: inicializa o pacote Python.requirements.txt
: lista todas as dependências do Python para seu agente.Dockerfile
: define como o aplicativo é empacotado em uma imagem do Docker.
Crie o manifesto de implantação do agente: no diretório
tutorials-and-examples/adk/vertex
, crie o seguinte manifesto como um arquivo chamadoagent-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: adk-agent-deployment labels: app: adk-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"
Substitua os seguintes valores:
- IMAGE_URL: o URL completo da imagem do Docker que você enviou por push para o Artifact Registry (por exemplo,
us-central1-docker.pkg.dev/${PROJECT_ID}/adk-repo/adk-agent:latest
). É possível extrair esse valor da saída do comandogcloud artifacts docker images list
na seção anterior. Como alternativa, execute um comando como este:sed -i "s|image: IMAGE_URL|image: $IMAGE_URL|" agent-deployment.yaml
. - PROJECT_ID: o ID do projeto Google Cloud .
- REGION: a Google Cloud região em que o cluster do GKE é provisionado.
- IMAGE_URL: o URL completo da imagem do Docker que você enviou por push para o Artifact Registry (por exemplo,
Aplique o manifesto de implantação:
kubectl apply -f agent-deployment.yaml
Esse comando cria a implantação e os pods associados para o aplicativo do agente no cluster do GKE.
Expor o agente: use esses métodos para expor o agente ao acesso.
- Para acessar o agente de fora do cluster, crie um serviço do Kubernetes.
Para uma API da Web, um serviço do tipo
LoadBalancer
é comum. Para desenvolvimento e testes locais, use o comando
kubectl port-forward
para acessar seu agente diretamente.
LoadBalancer
Crie o seguinte manifesto como um arquivo chamado
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
Aplique o manifesto:
kubectl apply -f agent-service.yaml
O provisionamento do endereço IP externo pode levar alguns minutos.
Verifique se o endereço IP foi provisionado:
kubectl get service adk-agent-service
Procure o valor
EXTERNAL-IP
na saída. Depois que o valor estiver disponível, use esse endereço IP para interagir com o agente implantado.
port-forward
Se você usa principalmente
port-forward
, considere usar um tipo de serviçoClusterIP
em vez deLoadBalancer
, já que o serviçoClusterIP
é interno e consome menos recursos.POD_NAME=$(kubectl get pods -l app=adk-agent -o jsonpath='{.items[0].metadata.name}') kubectl port-forward $POD_NAME 8000:8000
Esse comando bloqueia o terminal, mas encaminha o tráfego de
localhost:8000
na sua máquina para o agente em execução no cluster do GKE.- Para acessar o agente de fora do cluster, crie um serviço do Kubernetes.
Para uma API da Web, um serviço do tipo
Testar o agente implantado
Agora que o aplicativo do agente foi implantado e exposto, teste a funcionalidade dele.
Esta seção descreve como identificar o endpoint do seu agente e testar a API dele.
Identifique o endpoint do agente: dependendo de como você escolheu expor o agente na seção anterior, identifique o endpoint acessível:
LoadBalancer
Recupere o endereço IP externo:
kubectl get service adk-agent-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
Armazene o endereço IP externo em uma variável de ambiente para facilitar o uso:
export AGENT_IP=$(kubectl get service adk-agent-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
O URL base do seu agente é
http://${AGENT_IP}
.
port-forward
Verifique se o comando
kubectl port-forward
está sendo executado em um terminal separado. O URL base do seu agente éhttp://localhost:8000
.Teste a API do agente: faça uma solicitação curl para o endpoint
/run
. O agente espera um payload JSON com um campo de mensagem. Substitua AGENT_BASE_URL porhttp://${AGENT_IP}
(para LoadBalancer) ouhttp://localhost:8000
(para encaminhamento de porta).Criar uma nova sessão. Isso prepara o agente para uma nova conversa.
# 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
É possível listar os apps disponíveis com o seguinte comando:
curl -X GET AGENT_BASE_URL/list-apps
Envie uma consulta ao agente usando os detalhes da sessão da etapa anterior.
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?" }] } }'
Você vai receber uma resposta JSON do seu agente, indicando que ele processa solicitações e interage com o modelo Gemini pela Vertex AI. A resposta contém a resposta gerada do agente com base na sua mensagem.
Acesse a UI da Web do agente (se aplicável): se o agente incluir uma interface de usuário baseada na Web, acesse-a navegando até AGENT_BASE_URL em um navegador da Web. Normalmente, o ADK inclui uma UI da Web básica para interação e depuração. Por exemplo, se você expôs o agente por um LoadBalancer e o
EXTERNAL-IP
dele é34.123.45.67
, acessehttp://34.123.45.67
no navegador.