Partilhar via


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

Neste artigo, você aprenderá a implantar um aplicativo que usa o Azure OpenAI ou OpenAI no AKS. Com o OpenAI, você pode facilmente adaptar 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ça implantando um cluster AKS em sua assinatura do Azure. Em seguida, você implanta seu serviço OpenAI e o aplicativo de exemplo.

O aplicativo nativo da nuvem de exemplo é 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
  • Ferrugem com Actix-Web
  • JavaScript com Vue.js e Fastify
  • Python com FastAPI

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

Nota

Não recomendamos a execução de contêineres com monitoração de 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 o Azure Service Bus.

Para acessar a base de código do GitHub para o aplicativo de exemplo, consulte AKS Store Demo.

Antes de começar

  • Você precisa de uma conta do Azure com uma assinatura ativa. Se você não tiver uma, crie uma conta gratuitamente.
  • Para esta demonstração, você pode usar o serviço OpenAI do Azure ou o serviço OpenAI.
    • Se você planeja usar o serviço Azure OpenAI, precisará solicitar acesso para habilitá-lo em sua assinatura do Azure usando o formulário Solicitar acesso ao Serviço OpenAI do Azure.
    • Se você planeja usar o OpenAI, inscreva-se no site do OpenAI.

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

Criar um grupo de recursos

Um grupo de recursos do Azure é um grupo lógico no qual você implanta e gerencia recursos do Azure. Ao criar um grupo de recursos, você será solicitado a especificar um local. Esse local é o local de armazenamento dos metadados do grupo de recursos e onde os recursos são executados no Azure se você não especificar outra região durante a criação do recurso.

O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eastus.

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

    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 do AKS

O exemplo a seguir cria um cluster chamado myAKSCluster em myResourceGroup.

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

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

    Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster.

Ligar ao cluster

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

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

    az aks install-cli
    

    Nota

    Se o seu sistema baseado em Linux requer permissões elevadas, você pode usar o sudo az aks install-cli comando.

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

    Este comando executa as seguintes operações:

    • Baixa credenciais e configura a CLI do Kubernetes para usá-las.
    • Usa ~/.kube/config, o local padrão para o arquivo de configuração do Kubernetes. Especifique um local diferente 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 kubectl get comando. Este comando retorna uma lista dos nós do cluster.

    kubectl get nodes
    

    O exemplo de saída a seguir mostra os nós criados nas etapas anteriores. Verifique se 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
    

Nota

Para clusters privados, os nós podem ficar inacessíveis se você tentar se conectar a eles por meio do endereço IP público. Para corrigir isso, você precisa criar um ponto de extremidade dentro da mesma VNET que o cluster para se conectar. Siga as instruções para Criar um cluster AKS privado e, em seguida, conecte-se a ele.

Implementar a aplicação

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

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

  • Serviço do produto: Mostra as informações do produto.
  • Serviço de pedidos: Faz pedidos.
  • Serviço Makeline: Processa pedidos da fila e conclui os pedidos.
  • Vitrine: aplicativo Web para que os clientes visualizem produtos e façam pedidos.
  • Store admin: aplicativo Web para funcionários da loja visualizarem pedidos na fila e gerenciarem informações do produto.
  • Cliente virtual: Simula a criação de pedidos de forma programada.
  • Trabalhador virtual: simula a conclusão do pedido de forma programada.
  • Mongo DB: instância NoSQL para dados persistentes.
  • Rabbit MQ: Fila de mensagens para uma fila de pedidos.

Nota

Não recomendamos a execução de contêineres com monitoração de 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 o Azure Service Bus.

  1. Revise o manifesto YAML para o aplicativo.

  2. Implante o aplicativo usando o kubectl apply comando e especifique o nome do seu 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 serviços criados com êxito:

    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
    

Implante o OpenAI

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

  1. Habilite o Azure OpenAI 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 Azure OpenAI.
  3. Selecione a instância do Azure OpenAI que você criou.
  4. Selecione Chaves e Pontos de extremidade para gerar uma chave.
  5. Selecione Model Deployments>Managed Deployments para abrir o estúdio do Azure OpenAI.
  6. Crie uma nova implantação usando o modelo gpt-35-turbo .

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

Implantar o serviço de IA

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

  1. Crie um arquivo nomeado ai-service.yaml e copie no seguinte manifesto:

    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 USE_AZURE_OPENAI de ambiente como "True".

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

  4. Obtenha seu ponto de extremidade do Azure OpenAI e a chave da API do Azure OpenAI 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 de acordo.

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

    kubectl apply -f ai-service.yaml
    

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

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

Nota

Adicionar diretamente informações confidenciais, como chaves de API, aos seus arquivos de manifesto do Kubernetes não é seguro e pode ser acidentalmente confirmado em repositórios de código. Nós o adicionamos aqui para simplificar. Para cargas de trabalho de produção, use a Identidade Gerenciada para autenticar no serviço Azure OpenAI ou armazenar seus segredos no Cofre da Chave do Azure.

Testar a aplicação

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

    kubectl get pods
    

    Certifique-se de que todos os pods estão em execução antes de continuar 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 de administração da loja e do aplicativo Web da frente da loja usando o kubectl get service comando.

    kubectl get service store-admin
    

    O aplicativo expõe o site de administração da loja à internet por meio de um balanceador de carga público provisionado pelo serviço Kubernetes. Este processo pode demorar alguns minutos a concluir. IP EXTERNO inicialmente mostra pendente até que o serviço aparece e mostra 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 seu serviço. No exemplo mostrado aqui, abra 40.64.86.161 para ver o administrador da loja no navegador. Repita o mesmo passo para a frente da loja.

  4. No administrador da loja, selecione a guia produtos e, em seguida, selecione Adicionar produtos.

  5. Quando o 'ai-service'' estiver sendo executado com sucesso, você verá o botão Ask OpenAI ao lado do campo de descrição. Preencha o nome, o preço e as palavras-chave e, em seguida, gere uma descrição do produto selecionando Pedir produto OpenAI>Save.

    Captura de tela de como usar o openAI para gerar uma descrição do produto.

  6. Agora você pode ver o novo produto que você criou no Administrador da Loja usado pelos vendedores. Na imagem, você pode ver Jungle Monkey Chew Toy é adicionado.

    Captura de ecrã a visualizar o novo produto na página de administração da loja.

  7. Você também pode ver o novo produto que você criou na vitrine usada pelos compradores. Na imagem, você pode ver Jungle Monkey Chew Toy é adicionado. Lembre-se de obter o endereço IP da frente da loja usando o kubectl get service comando.

    Captura de tela visualizando o novo produto na página inicial da loja.

Próximos passos

Agora que adicionou a funcionalidade OpenAI a uma aplicação AKS, pode Proteger o acesso ao Azure OpenAI a partir do Serviço Kubernetes do Azure (AKS).

Para saber mais sobre casos de uso de IA generativa, consulte os seguintes recursos: