Compartilhar via


Implantar um aplicativo que usa o OpenAI no AKS (Serviço de Kubernetes do Azure)

Neste artigo, você aprenderá a implantar um aplicativo que usa o OpenAI do Azure ou o OpenAI no AKS. Com o OpenAI, você pode adaptar facilmente diferentes modelos de IA, como geração de conteúdo, sumarização, pesquisa semântica e linguagem natural para geração de código, para suas tarefas específicas. Você começará implantando um cluster do AKS em sua assinatura do Azure. Em seguida, você implantará o serviço OpenAI e o aplicativo de exemplo.

O aplicativo de exemplo nativo de nuvem é representativo de implementações do mundo real. O aplicativo de vários contêineres é composto por aplicativos escritos em várias linguagens e estruturas, incluindo:

  • Golang com Gin
  • Rust com Actix-Web
  • JavaScript com Vue.js e Fastify
  • Python com FastAPI

Esses aplicativos fornecem front-ends para clientes e administradores de lojas, APIs REST para enviar dados para a fila de mensagens RabbitMQ e banco de dados MongoDB e aplicativos de console para simular o tráfego.

Observação

Não recomendamos a execução de contêineres com estado, como MongoDB e Rabbit MQ, sem armazenamento persistente para produção. Nós os usamos aqui para simplificar, mas recomendamos o uso de serviços gerenciados, como o Azure CosmosDB ou Barramento de Serviço do Azure.

Para acessar a base de código do GitHub para o aplicativo de exemplo, confira Demonstração da Loja do AKS.

Antes de começar

Pré-requisitos

Criar um grupos de recursos

Um grupo de recursos do Azure é um grupo lógico no qual você implanta e gerencia os recursos do Azure. Ao criar um grupo de recursos, você é solicitado a especificar um local. Essa é a localização na qual os metadados do grupo de recursos são armazenados e na qual os recursos são executados no Azure, caso você não especifique outra região durante a criação de recursos.

O exemplo a seguir cria um grupo de recursos chamado myResourceGroup no local eastus.

  • Crie um grupo de recursos usando o comando az group create.

    az group create --name myResourceGroup --location eastus
    

    O exemplo de saída a seguir mostra a criação bem-sucedida do grupo de recursos:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

Criar um cluster AKS

O exemplo a seguir cria um cluster denominado myAKSCluster e myResourceGroup.

  • Crie um cluster do AKS usando o comando az aks create.

    az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
    

    Após alguns minutos, o comando será concluído e retornará informações no formato JSON sobre o cluster.

Conectar-se ao cluster

Para gerenciar um cluster do Kubernetes, use o cliente de linha de comando do Kubernetes, kubectl. kubectl já está instalado se você usa o Azure Cloud Shell.

  1. Instale kubectl localmente usando o comando az aks install-cli.

    az aks install-cli
    

    Observação

    Se o sistema baseado em Linux exigir permissões elevadas, você poderá usar o comando sudo az aks install-cli.

  2. Configure o kubectl para se conectar ao cluster do Kubernetes usando o comando az aks get-credentials.

    Esse comando executa as seguintes operações:

    • Baixa credenciais e configura a CLI de Kubernetes para usá-las.
    • Usa ~/.kube/config, a localização padrão do arquivo de configuração do Kubernetes. Especifique outra localização para o arquivo de configuração do Kubernetes usando o argumento --file.
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Verifique a conexão com o cluster usando o comando kubectl get. Esse comando retorna uma lista dos nós de cluster.

    kubectl get nodes
    

    A saída de exemplo a seguir mostra os nós criados nas etapas anteriores. Verifique se que o status do nó é Pronto.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31469198-vmss000000   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000001   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000002   Ready    agent   3h29m   v1.25.6
    

Observação

Para clusters privados, os nós poderão ficar inacessíveis caso tente se conectar a eles por meio do endereço IP público. Para corrigir isso, você precisará criar um ponto de extremidade na mesma VNet que o cluster a partir do qual se conectar. Siga as instruções para Criar um cluster do AKS privado e, em seguida, conecte-se a ele.

Implantar o aplicativo

Diagrama de arquitetura da demonstração de IA do AKS.

O manifesto do aplicativo da Loja do AKS inclui as seguintes implantações e serviços do Kubernetes:

  • Serviço do produto: Mostra informações do produto.
  • Serviço de pedido: Realiza pedidos.
  • Serviço Makeline: Processa pedidos da fila e conclui os pedidos.
  • Frente de loja: Aplicativo Web para clientes visualizarem produtos e fazerem pedidos.
  • Administrador da loja: Aplicativo da Web para funcionários da loja visualizarem pedidos na fila e gerenciarem informações do produto.
  • Cliente virtual: Simula a realização de pedidos em uma base programada.
  • Trabalho virtual: Simula a conclusão do pedido em uma base programada.
  • Mongo DB: Instância NoSQL para dados persistentes.
  • Rabbit MQ: Fila de mensagens de uma fila de pedidos.

Observação

Não recomendamos a execução de contêineres com estado, como MongoDB e Rabbit MQ, sem armazenamento persistente para produção. Nós os usamos aqui para simplificar, mas recomendamos o uso de serviços gerenciados, como o Azure CosmosDB ou Barramento de Serviço do Azure.

  1. Examine o manifesto YAML do aplicativo.

  2. Implante o aplicativo usando o comando kubectl apply e especifique o nome do manifesto YAML.

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
    

    A saída de exemplo a seguir mostra as implantações e os serviços criados com sucesso:

    deployment.apps/mongodb created
    service/mongodb created
    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/makeline-service created
    service/makeline-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    deployment.apps/store-admin created
    service/store-admin created
    deployment.apps/virtual-customer created
    deployment.apps/virtual-worker created
    

Implantar o OpenAI

Você pode usar o OpenAI do Azure ou o OpenAI e executar seu aplicativo no AKS.

  1. Habilite o OpenAI do Azure em sua assinatura do Azure preenchendo o formulário Solicitar acesso ao Serviço OpenAI do Azure.
  2. No portal do Azure, crie uma instância do OpenAI do Azure.
  3. Selecione a instância do OpenAI do Azure que você criou.
  4. Selecione Chaves e Pontos de extremidade para gerar uma chave.
  5. Selecione Implantações de Modelo>Implantações Gerenciadas para abrir o Azure OpenAI Studio.
  6. Crie uma nova implantação usando o modelo gpt-35-turbo .

Para obter mais informações sobre como criar uma implantação no OpenAI do Azure, confira Introdução à geração de texto usando o Serviço OpenAI do Azure.

Implantar o serviço de IA

Agora que o aplicativo foi implantado, você pode implantar o microsserviço baseado em Python que usa o OpenAI para gerar automaticamente descrições para novos produtos que estão sendo adicionados ao catálogo da loja.

  1. Crie um arquivo chamado ai-service.yaml e copie-o para o manifesto a seguir:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ai-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ai-service
      template:
        metadata:
          labels:
            app: ai-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: ai-service
            image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest
            ports:
            - containerPort: 5001
            env:
            - name: USE_AZURE_OPENAI 
              value: "True"
            - name: AZURE_OPENAI_DEPLOYMENT_NAME 
              value: ""
            - name: AZURE_OPENAI_ENDPOINT 
              value: ""
            - name: OPENAI_API_KEY 
              value: ""
            resources:
              requests:
                cpu: 20m
                memory: 50Mi
              limits:
                cpu: 50m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ai-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 5001
        targetPort: 5001
      selector:
        app: ai-service
    
  2. Defina a variável de ambiente USE_AZURE_OPENAI como "True".

  3. Obtenha o nome da implantação do OpenAI do Azure no estúdio do OpenAI do Azure e preencha o valor AZURE_OPENAI_DEPLOYMENT_NAME.

  4. Obtenha o ponto de extremidade do OpenAI do Azure e a chave de API do OpenAI do Azure no portal do Azure selecionando Chaves e Ponto de extremidade na folha esquerda do recurso. Atualize o AZURE_OPENAI_ENDPOINT e OPENAI_API_KEY no YAML adequadamente.

  5. Implante o aplicativo usando o comando kubectl apply e especifique o nome do manifesto YAML.

    kubectl apply -f ai-service.yaml
    

    A saída de exemplo a seguir mostra as implantações e os serviços criados com sucesso:

      deployment.apps/ai-service created
      service/ai-service created
    

Observação

A adição direta de informações confidenciais, como chaves de API, aos arquivos de manifesto do Kubernetes não é segura e pode ser confirmada acidentalmente em repositórios de código. Colocamos isso aqui para simplificar. Para cargas de trabalho de produção, use a Identidade Gerenciada para autenticar no Serviço OpenAI do Azure ou armazene seus segredos no Azure Key Vault.

Testar o aplicativo

  1. Verifique o status dos pods implantados usando o comando kubectl get pods.

    kubectl get pods
    

    Verifique se todos os pods estão em execução antes de avançar para a próxima etapa.

    NAME                                READY   STATUS    RESTARTS   AGE
    makeline-service-7db94dc7d4-8g28l   1/1     Running   0          99s
    mongodb-78f6d95f8-nptbz             1/1     Running   0          99s
    order-service-55cbd784bb-6bmfb      1/1     Running   0          99s
    product-service-6bf4d65f74-7cbvk    1/1     Running   0          99s
    rabbitmq-9855984f9-94nlm            1/1     Running   0          99s
    store-admin-7f7d768c48-9hn8l        1/1     Running   0          99s
    store-front-6786c64d97-xq5s9        1/1     Running   0          99s
    virtual-customer-79498f8667-xzsb7   1/1     Running   0          99s
    virtual-worker-6d77fff4b5-7g7rj     1/1     Running   0          99s
    
  2. Obtenha o IP do aplicativo Web do administrador da loja e do aplicativo Web de frente da loja usando o comando kubectl get service.

    kubectl get service store-admin
    

    O aplicativo expõe o site de Store Admin à Internet por meio de um balanceador de carga público provisionado pelo serviço do Kubernetes. A conclusão desse processo pode levar alguns minutos. O IP EXTERNO mostra inicialmente pendente, até que o serviço apareça e mostre o endereço IP.

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m    
    

    Repita a mesma etapa para o serviço chamado `store-front``.

  3. Abra um navegador da Web e navegue até o endereço IP externo do serviço. No exemplo mostrado aqui, abra 40.64.86.161 para ver o Administrador da Loja no navegador. Repita a mesma etapa para o Store Front.

  4. No administrador da loja, clique na guia produtos e selecione Adicionar Produtos.

  5. Quando o `ai-service`` estiver em execução bem-sucedida, você verá o botão Perguntar ao OpenAI ao lado do campo de descrição. Preencha o nome, o preço e as palavras-chave e gere uma descrição do produto selecionando Solicitar ao OpenAI>Salvar produto.

    Captura de tela de como usar o OpenAI para gerar a descrição de produto.

  6. Agora você pode ver o novo produto criado no Store Admin usado pelos vendedores. Na imagem, você pode ver que o Brinquedo de macaco para morder foi adicionado.

    Captura de tela exibindo o novo produto na página de Store Admin.

  7. Você também pode ver o novo produto criado no Store Front usado pelos compradores. Na imagem, você pode ver que o Brinquedo de macaco para morder foi adicionado. Lembre-se de obter o endereço IP da frente de loja usando o comando kubectl get service.

    Captura de tela exibindo o novo produto na página do Store Front.

Próximas etapas

Agora que você adicionou a funcionalidade OpenAI a um aplicativo do AKS, você poderá Proteger o acesso ao OpenAI do Azure a partir do Serviço de Kubernetes do Azure (AKS).

Para saber mais sobre casos de uso de IA generativas, confira os seguintes recursos: