Freigeben über


Bereitstellen einer Anwendung, die OpenAI auf Azure Kubernetes Service (AKS) verwendet

In diesem Artikel erfahren Sie, wie Sie eine Anwendung bereitstellen, die Azure OpenAI oder OpenAI in AKS verwendet. Mit OpenAI können Sie verschiedene KI-Modelle wie Inhaltsgenerierung, Zusammenfassung, semantische Suche und natürliche Sprache einfach bei der Codegenerierung für Ihre spezifischen Aufgaben anwenden können. Zunächst stellen Sie einen AKS-Cluster in Ihrem Azure-Abonnement bereit. Anschließend stellen Sie Ihre OpenAI Service-Instanz und die Beispielanwendung bereit.

Die cloudnative Beispielanwendung ist repräsentativ für reale Implementierungen. Die Anwendung mit mehreren Containern besteht aus Anwendungen, die in verschiedenen Programmiersprachen und mit unterschiedlichen Frameworks geschrieben wurden, einschließlich:

  • Golang mit Gin
  • Rust mit Actix-Web
  • JavaScript mit Vue.js und Fastify
  • Python mit FastAPI

Diese Anwendungen bieten Front-Ends für Kund*innen und Speicheradministrator*innen, REST-APIs zum Senden von Daten an RabbitMQ-Nachrichtenwarteschlangen und MongoDB-Datenbanken sowie Konsolen-Apps zur Simulation des Datenverkehrs.

Hinweis

Zustandsbehaftete Container wie MongoDB und Rabbit MQ sollten nicht ohne permanenten Speicher für die Produktion ausgeführt werden. Sie werden hier der Einfachheit halber verwendet, jedoch sollten verwaltete Dienste wie Azure Cosmos DB oder Azure Service Bus verwendet werden.

Informationen zum Zugreifen auf die GitHub-Codebasis für die Beispielanwendung finden Sie unter AKS-Demo für ein Geschäft.

Voraussetzungen

  • Sie benötigen ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie ein kostenloses Konto, falls Sie keines besitzen.
  • Für diese Demo können Sie entweder den Azure OpenAI Service oder den OpenAI-Dienst verwenden.

Voraussetzungen

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

Erstellen einer Ressourcengruppe

Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Sie Azure-Ressourcen bereitstellen und verwalten. Wenn Sie eine Ressourcengruppe erstellen, werden Sie zur Angabe eines Speicherorts aufgefordert. An diesem Speicherort werden die Metadaten Ihrer Ressourcengruppe gespeichert. Darüber hinaus werden dort die Ressourcen in Azure ausgeführt, wenn Sie während der Ressourcenerstellung keine andere Region angeben.

Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus.

  • Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.

    az group create --name myResourceGroup --location eastus
    

    Die folgende Beispielausgabe zeigt die erfolgreiche Erstellung der Ressourcengruppe:

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

Erstellen eines AKS-Clusters

Im folgenden Beispiel wird ein Cluster mit dem Namen myAKSCluster in myResourceGroup erstellt.

  • Erstellen Sie mit dem Befehl az aks create einen AKS-Cluster.

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

    Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben.

Herstellen einer Verbindung mit dem Cluster

Verwenden Sie zum Verwalten eines Kubernetes-Clusters den Kubernetes-Befehlszeilenclient kubectl. kubectl ist bei Verwendung von Azure Cloud Shell bereits installiert.

  1. Installieren Sie kubectl mithilfe des Befehls az aks install-cli lokal.

    az aks install-cli
    

    Hinweis

    Wenn Ihr Linux-basiertes System erhöhte Berechtigungen erfordert, können Sie den Befehl sudo az aks install-cli verwenden.

  2. Mit dem Befehl az aks get-credentials können Sie kubectl für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren.

    Dieser Befehl führt die folgenden Vorgänge aus:

    • Herunterladen von Anmeldeinformationen und Konfigurieren der Kubernetes-Befehlszeilenschnittstelle für ihre Verwendung
    • Verwenden von ~/.kube/config (Standardspeicherort für die Kubernetes-Konfigurationsdatei). Geben Sie mit dem --file-Argument einen anderen Speicherort für Ihre Kubernetes-Konfigurationsdatei an.
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Überprüfen Sie die Verbindung mit dem Cluster mithilfe des Befehls kubectl get. Dieser Befehl gibt eine Liste der Clusterknoten zurück.

    kubectl get nodes
    

    Die folgende Beispielausgabe zeigt die in den vorherigen Schritten erstellten Knoten. Stellen Sie sicher, dass der Knotenstatus Bereit lautet.

    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
    

Hinweis

Bei privaten Clustern sind die Knoten möglicherweise nicht erreichbar, wenn Sie versuchen, über die öffentliche IP-Adresse eine Verbindung mit ihnen herzustellen. Um dies zu beheben, müssen Sie einen Endpunkt im selben VNet wie der Cluster erstellen, von dem aus eine Verbindung hergestellt werden soll. Befolgen Sie die Anweisungen unter Erstellen eines privaten AKS-Clusters, und stellen Sie dann eine Verbindung mit diesem her.

Bereitstellen der Anwendung

Architekturdiagramm der KI-Demo für AKS

Bei der AKS-Geschäftsanwendung umfasst dieses Manifest die folgenden Kubernetes-Bereitstellungen und -Dienste:

  • Product Service: zeigt Produktinformationen an.
  • Order Service: dient der Aufgabe von Bestellungen.
  • Makeline Service: verarbeitet Bestellungen aus der Warteschlange und schließt die Bestellungen ab.
  • Store Front: Webanwendung für Kund*innen zum Anzeigen von Produkten und Aufgeben von Bestellungen
  • Store Admin: Webanwendung für Filialmitarbeiter*innen zum Anzeigen von Bestellungen in der Warteschlange und zum Verwalten von Produktinformationen
  • Virtual Customer: simuliert die Auftragserstellung nach Zeitplan.
  • Virtual Worker: simuliert die Auftragserfüllung nach Zeitplan.
  • Mongo DB: NoSQL-Instanz für persistente Daten
  • Rabbit MQ: Nachrichtenwarteschlange für eine Bestellwarteschlange

Hinweis

Zustandsbehaftete Container wie MongoDB und Rabbit MQ sollten nicht ohne permanenten Speicher für die Produktion ausgeführt werden. Sie werden hier der Einfachheit halber verwendet, jedoch sollten verwaltete Dienste wie Azure Cosmos DB oder Azure Service Bus verwendet werden.

  1. Überprüfen Sie das YAML-Manifest für die Anwendung.

  2. Stellen Sie die Anwendung über den Befehl „kubectl apply“ bereit, und geben Sie den Namen Ihres YAML-Manifests an.

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

    Die folgende Beispielausgabe zeigt die erfolgreich erstellten Bereitstellungen und Dienste:

    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
    

Bereitstellen von OpenAI

Sie können entweder Azure OpenAI oder OpenAI verwenden und Ihre Anwendung in AKS ausführen.

  1. Aktivieren Sie Azure OpenAI für Ihr Azure-Abonnement, indem Sie das Formular zum Anfordern von Zugriff auf Azure OpenAI Service ausfüllen.
  2. Erstellen Sie im Azure-Portal eine Azure OpenAI-Instanz.
  3. Wählen Sie die Azure OpenAI-Instanz aus, die Sie erstellt haben.
  4. Wählen Sie Schlüssel und Endpunkte aus, um einen Schlüssel zu generieren.
  5. Wählen Sie Modellimplementierungen>Verwaltete Bereitstellungen aus, um Azure OpenAI Studio zu öffnen.
  6. Erstellen Sie eine neue Bereitstellung mit dem gpt-35-turbo-Modell.

Weitere Informationen zum Erstellen einer Bereitstellung in Azure OpenAI finden Sie unter Erste Schritte beim Generieren von Text mit Azure OpenAI Service.

Bereitstellen des KI-Diensts

Nachdem die Anwendung bereitgestellt wurde, können Sie den Python-basierten Microservice bereitstellen, der mithilfe von OpenAI automatisch Beschreibungen für neue Produkte generiert, die dem Katalog des Geschäfts hinzugefügt werden.

  1. Erstellen Sie eine Datei namens ai-service.yaml, und fügen Sie das folgende Manifest ein:

    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. Legen Sie die Umgebungsvariable USE_AZURE_OPENAI auf "True" fest.

  3. Rufen Sie den Namen Ihrer Azure OpenAI-Bereitstellung aus Azure OpenAI Studio ab, und geben Sie den Wert für AZURE_OPENAI_DEPLOYMENT_NAME ein.

  4. Rufen Sie Ihren Azure OpenAI-Endpunkt und den Azure OpenAI-API-Schlüssel im Azure-Portal ab, indem Sie auf dem linken Blatt der Ressource Schlüssel und Endpunkte auswählen. Aktualisieren Sie AZURE_OPENAI_ENDPOINT und OPENAI_API_KEY in der YAML-Datei.

  5. Stellen Sie die Anwendung über den Befehl „kubectl apply“ bereit, und geben Sie den Namen Ihres YAML-Manifests an.

    kubectl apply -f ai-service.yaml
    

    Die folgende Beispielausgabe zeigt die erfolgreich erstellten Bereitstellungen und Dienste:

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

Hinweis

Das direkte Hinzufügen vertraulicher Informationen (z. B. API-Schlüssel) in Ihren Kubernetes-Manifestdateien ist nicht sicher, da sie versehentlich in Coderepositorys committet werden könnten. Sie wurden in diesem Fall lediglich der Einfachheit halber hinzugefügt. Verwenden Sie für Produktionsworkloads stattdessen eine verwaltete Identität, um sich bei Azure OpenAI Service zu authentifizieren, oder speichern Sie Ihre Geheimnisse in Azure Key Vault.

Testen der Anwendung

  1. Sehen Sie sich den Status der bereitgestellten Pods mithilfe des Befehls kubectl get pods an.

    kubectl get pods
    

    Stellen Sie sicher, dass alle Pods ausgeführt werden, bevor Sie mit dem nächsten Schritt fortfahren.

    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. Verwenden Sie den Befehl kubectl get service, um die IP-Adresse der Webanwendungen „Store Administrator“ und „Store Front“ abzurufen.

    kubectl get service store-admin
    

    Die Anwendung macht die Store Admin-Website über einen öffentlichen Lastenausgleich im Internet verfügbar, der vom Kubernetes-Dienst bereitgestellt wird. Dieser Vorgang kann einige Minuten dauern. Für EXTERNAL IP wird zunächst ausstehend angezeigt, bis der Dienst ausgeführt wird. Danach wird die IP-Adresse anzeigt.

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

    Wiederholen Sie den Schritt für den Dienst mit dem Namen „store-front“.

  3. Öffnen Sie einen Webbrowser, und navigieren Sie zur externen IP-Adresse Ihres Diensts. Öffnen Sie im hier gezeigten Beispiel 40.64.86.161, um Store Admin im Browser anzuzeigen. Wiederholen Sie den Schritt für Store Front.

  4. Wählen Sie in Store Admin die Registerkarte „products“ (Produkte) und dann Add Products (Produkte hinzufügen) aus.

  5. Wenn „ai-service“ erfolgreich ausgeführt wird, sollte die Schaltfläche „Ask OpenAI“ (OpenAI fragen) neben dem Feld mit der Beschreibung angezeigt werden. Geben Sie den Namen, den Preis und die Schlüsselwörter ein, und generieren Sie dann eine Produktbeschreibung, indem Sie Ask OpenAI>Save Product (OpenAI fragen > Produkt speichern) auswählen.

    Screenshot der Verwendung von OpenAI zum Generieren einer Produktbeschreibung

  6. Sie können jetzt das neue Produkt sehen, das Sie in der Webanwendung Store Admin erstellt haben, die von den Verkäufer*innen verwendet wird. Sie können in der Abbildung sehen, dass „Jungle Monkey Chew Toy“ hinzugefügt wurde.

    Screenshot des neuen Produkts auf der Store Admin-Webseite

  7. Sie können das neue Produkt auch in der Webanwendung Store Front sehen, die von den Käufer*innen verwendet wird. Sie können in der Abbildung sehen, dass „Jungle Monkey Chew Toy“ hinzugefügt wurde. Vergessen Sie nicht, die IP-Adresse von Store Front mithilfe des Befehls kubectl get service abzurufen.

    Screenshot des neuen Produkts auf der Store Front-Webseite

Nächste Schritte

Nachdem Sie nun einer AKS-Anwendung OpenAI-Funktionalität hinzugefügt haben, können Sie den Zugriff auf Azure OpenAI über Azure Kubernetes Service (AKS) schützen.

Weitere Informationen zu generativen KI-Anwendungsfällen finden Sie in den folgenden Ressourcen: