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.
- Wenn Sie Azure OpenAI Service verwenden möchten, müssen Sie es für Ihr Azure-Abonnement aktivieren. Verwenden Sie dazu das Formular zum Anfordern von Zugriff auf Azure OpenAI Service.
- Wenn Sie OpenAI verwenden möchten, registrieren Sie sich auf der OpenAI-Website.
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.
Installieren Sie
kubectl
mithilfe des Befehlsaz 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.Mit dem Befehl
az aks get-credentials
können Siekubectl
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
Ü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
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.
Überprüfen Sie das YAML-Manifest für die Anwendung.
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.
- Aktivieren Sie Azure OpenAI für Ihr Azure-Abonnement, indem Sie das Formular zum Anfordern von Zugriff auf Azure OpenAI Service ausfüllen.
- Erstellen Sie im Azure-Portal eine Azure OpenAI-Instanz.
- Wählen Sie die Azure OpenAI-Instanz aus, die Sie erstellt haben.
- Wählen Sie Schlüssel und Endpunkte aus, um einen Schlüssel zu generieren.
- Wählen Sie Modellimplementierungen>Verwaltete Bereitstellungen aus, um Azure OpenAI Studio zu öffnen.
- 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.
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
Legen Sie die Umgebungsvariable
USE_AZURE_OPENAI
auf"True"
fest.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.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
undOPENAI_API_KEY
in der YAML-Datei.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
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
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“.
Ö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.
Wählen Sie in Store Admin die Registerkarte „products“ (Produkte) und dann Add Products (Produkte hinzufügen) aus.
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.
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.
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.
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:
Azure Kubernetes Service