Distribuera ett program som använder OpenAI på Azure Kubernetes Service (AKS)

I den här artikeln får du lära dig hur du distribuerar ett program som använder Azure OpenAI eller OpenAI på AKS. Med OpenAI kan du enkelt anpassa olika AI-modeller, till exempel innehållsgenerering, sammanfattning, semantisk sökning och naturligt språk till kodgenerering, för dina specifika uppgifter. Du börjar med att distribuera ett AKS-kluster i din Azure-prenumeration. Sedan distribuerar du OpenAI-tjänsten och exempelprogrammet.

Det molnbaserade exempelprogrammet är representativt för verkliga implementeringar. Programmet för flera containrar består av program som skrivits på flera språk och ramverk, inklusive:

  • Golang med Gin
  • Rust med Actix-Web
  • JavaScript med Vue.js och Fastify
  • Python med FastAPI

Dessa program tillhandahåller klientdelar för kunder och butiksadministratörer, REST-API:er för att skicka data till RabbitMQ-meddelandekön och MongoDB-databasen och konsolappar för att simulera trafik.

Note

Vi rekommenderar inte att du kör tillståndskänsliga containrar, till exempel MongoDB och Rabbit MQ, utan beständig lagring för produktion. Vi använder dem här för enkelhetens skull, men vi rekommenderar att du använder hanterade tjänster, till exempel Azure CosmosDB eller Azure Service Bus.

Information om hur du kommer åt GitHub-kodbasen för exempelprogrammet finns i AKS Store Demo.

Innan du börjar

Prerequisites

Skapa en resursgrupp

En Azure-resursgrupp är en logisk grupp där du distribuerar och hanterar Azure-resurser. När du skapar en resursgrupp uppmanas du att ange en plats. Den här platsen är lagringsplatsen för dina resursgruppsmetadata och där dina resurser körs i Azure om du inte anger en annan region när du skapar resurser.

I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus.

  • Skapa en resursgrupp med kommandot az group create.

    az group create --name myResourceGroup --location eastus
    

    Följande exempelutdata visar hur resursgruppen har skapats:

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

Skapa ett AKS-kluster

I följande exempel skapas ett kluster med namnet myAKSCluster i myResourceGroup.

  • Skapa ett AKS-kluster med hjälp av kommandot az aks create.

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

    Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.

Ansluta till klustret

Om du vill hantera ett Kubernetes-kluster använder du Kubernetes-kommandoradsklienten kubectl. kubectl är redan installerat om du använder Azure Cloud Shell.

  1. Installera kubectl lokalt med kommandot az aks install-cli .

    az aks install-cli
    

    Note

    Om ditt Linux-baserade system kräver utökade behörigheter kan du använda sudo az aks install-cli kommandot .

  2. Konfigurera kubectl för att ansluta till kubernetes-klustret med hjälp av az aks get-credentials kommandot .

    Det här kommandot kör följande åtgärder:

    • Laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.
    • Använder ~/.kube/config, standardplatsen för Kubernetes-konfigurationsfilen. Ange en annan plats för kubernetes-konfigurationsfilen med argumentet --file .
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Kontrollera anslutningen till klustret med hjälp av kubectl get kommandot . Det här kommandot returnerar en lista över klusternoderna.

    kubectl get nodes
    

    Följande exempelutdata visar noderna som skapades i föregående steg. Kontrollera att nodstatusen är Klar.

    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
    

Note

För privata kluster kan noderna vara oåtkomliga om du försöker ansluta till dem via den offentliga IP-adressen. För att åtgärda detta måste du skapa en slutpunkt inom samma virtuella nätverk som klustret att ansluta från. Följ anvisningarna för att skapa ett privat AKS-kluster och anslut sedan till det.

Distribuera programmet

Arkitekturdiagram över AKS AI-demo.

AKS Store-programmanifestet innehåller följande Kubernetes-distributioner och -tjänster:

  • Produkttjänst: Visar produktinformation.
  • Ordertjänst: Gör beställningar.
  • Makeline-tjänst: Bearbetar beställningar från kön och slutför beställningarna.
  • Butiksfront: Webbprogram där kunder kan visa produkter och göra beställningar.
  • Butiksadministratör: Webbprogram för butiksanställda för att visa beställningar i kön och hantera produktinformation.
  • Virtuell kund: Simulerar skapande av order enligt ett schema.
  • Virtuell arbetare: Simulerar orderslut på schemalagd basis.
  • Mongo DB: NoSQL-instans för beständiga data.
  • Rabbit MQ: Meddelandekö för en beställningskö.

Note

Vi rekommenderar inte att du kör tillståndskänsliga containrar, till exempel MongoDB och Rabbit MQ, utan beständig lagring för produktion. Vi använder dem här för enkelhetens skull, men vi rekommenderar att du använder hanterade tjänster, till exempel Azure CosmosDB eller Azure Service Bus.

  1. Granska YAML-manifestet för programmet.

  2. Distribuera programmet med kommandot kubectl apply och ange namnet på ditt YAML-manifest.

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

    Följande exempelutdata visar de framgångsrikt skapade distributionerna och tjänsterna:

    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
    

Distribuera OpenAI

Du kan antingen använda Azure OpenAI eller OpenAI och köra ditt program på AKS.

  1. Skapa en Azure OpenAI-instans i Azure-portalen.
  2. Gå till den Azure OpenAI-instans som du skapade.
  3. Gå till Azure AI Foundry-portalen på bladet Översikt.
  4. Skapa en ny chattdistribution med basmodellen gpt-4o-mini .

Mer information om hur du skapar en distribution i Azure OpenAI finns i Kom igång med att generera text med Azure OpenAI Service.

Distribuera AI-tjänsten

Nu när programmet har distribuerats kan du distribuera den Python-baserade mikrotjänsten som använder OpenAI för att automatiskt generera beskrivningar för nya produkter som läggs till i butikens katalog.

  1. Skapa en fil med namnet ai-service.yaml och kopiera i följande manifest:

    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. Ange miljövariabeln USE_AZURE_OPENAI till "True".

  3. Hämta ditt Azure OpenAI-distributionsnamn från Azure AI Foundry och fyll i AZURE_OPENAI_DEPLOYMENT_NAME värdet.

  4. Hämta din Azure OpenAI-slutpunkt och Azure OpenAI API-nyckel från Azure-portalen genom att välja Nycklar och slutpunkt på resursens vänstra blad. Uppdatera AZURE_OPENAI_ENDPOINT och OPENAI_API_KEY i YAML-filen i enlighet med detta.

  5. Distribuera programmet med kommandot kubectl apply och ange namnet på ditt YAML-manifest.

    kubectl apply -f ai-service.yaml
    

    Följande exempelutdata visar de framgångsrikt skapade distributionerna och tjänsterna:

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

Note

Att direkt lägga till känslig information, till exempel API-nycklar, till dina Kubernetes-manifestfiler är inte säkert och kan av misstag checkas in på kodlagringsplatser. Vi har lagt till den här för enkelhetens skull. För produktionsarbetsbelastningar använder du Hanterad identitet för att autentisera till Azure OpenAI-tjänsten i stället eller lagra dina hemligheter i Azure Key Vault.

Testa programmet

  1. Kontrollera statusen för de distribuerade poddarna med kommandot kubectl get pods .

    kubectl get pods
    

    Kontrollera att alla poddar körs innan du fortsätter till nästa steg.

    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. Hämta IP-adressen av webbappen för butiksadministratören och butiksfrontendwebbapplikationen med hjälp av kubectl get service kommandot.

    kubectl get service store-admin
    

    Programmet exponerar storeadministratörswebbplatsen för Internet via en offentlig lastbalanserare som tillhandahålls av Kubernetes-tjänsten. Den här processen kan ta ett par minuter att slutföra. EXTERN IP visar initialt väntande tills tjänsten kommer upp och visar IP-adressen.

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

    Upprepa samma steg för tjänsten med namnet "store-front".

  3. Öppna en webbläsare och bläddra till tjänstens externa IP-adress. I exemplet som visas här öppnar du 40.64.86.161 för att se Butiksadministratör i webbläsaren. Upprepa samma steg för Store Front.

  4. Välj fliken Produkter i Store-administratören och välj sedan Lägg till produkter.

  5. När ai-tjänsten körs bör du se knappen Fråga OpenAI bredvid beskrivningsfältet. Fyll i namn, pris och nyckelord och generera sedan en produktbeskrivning genom att välja Fråga OpenAI>Spara produkt.

    Skärmbild av hur du använder openAI för att generera en produktbeskrivning.

  6. Nu kan du se den nya produkt som du skapade på Store Admin som används av säljare. På bilden ser du att Dog Smart Collar har lagts till.

    Skärmbild som visar den nya produkten på butiksadministratörssidan.

  7. Du kan också se den nya produkten som du skapade på Store Front som används av köpare. På bilden ser du att Dog Smart Collar har lagts till. Kom ihåg att hämta IP-adressen för butiksfronten kubectl get service med hjälp av kommandot .

    Skärmbild som visar den nya produkten på butikens förstasida.

Nästa steg

Nu när du har lagt till OpenAI-funktioner i ett AKS-program kan du skydda åtkomsten till Azure OpenAI från Azure Kubernetes Service (AKS).

Mer information om generativa AI-användningsfall finns i följande resurser: