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

In diesem Artikel stellen Sie die AKS Store Demo-Anwendung auf Azure Kubernetes Service (AKS) bereit und konfigurieren Azure OpenAI oder die OpenAI-API zum Generieren von Produktbeschreibungen.

Die Cloud-native Beispielanwendung umfasst Dienste, die in mehreren Sprachen und Frameworks geschrieben wurden, darunter:

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

Diese Anwendungen bieten Front-Ends für Käufer und Speichern von Administratoren, REST-APIs, die Daten an eine RabbitMQ-Nachrichtenwarteschlange und DocumentDB-Datenbank senden, sowie Konsolen-Apps, die Datenverkehr simulieren.

Hinweis

Führen Sie keine zustandsbehafteten Container aus, z. B. DocumentDB und RabbitMQ, ohne permanente Lagerung in der Produktion. In diesem Artikel werden sie ohne beständigen Speicher aus Gründen der Einfachheit verwendet. Verwenden Sie für Produktionsworkloads verwaltete Dienste wie Azure Cosmos DB oder Azure Service Bus.

Informationen zum Zugriff auf die GitHub-Codebasis für die Beispielanwendung finden Sie unter AKS Store Demo.

Bevor Sie beginnen

Voraussetzungen

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. Dieser Speicherort ist der Speicherort ihrer Ressourcengruppenmetadaten und der Speicherort, an dem Ihre Ressourcen in Azure ausgeführt werden, 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, dass die Ressourcengruppe erfolgreich erstellt wurde.

{
  "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. Wenn Sie Azure Cloud Shell verwenden, ist kubectl bereits installiert.

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

    az aks install-cli
    

    Hinweis

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

  2. Mit dem Befehl kubectl können Sie az aks get-credentials 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 einen anderen Speicherort für Ihre Kubernetes-Konfigurationsdatei mithilfe des Arguments "-file " 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 Knoten, die in den vorherigen Schritten erstellt wurden. Stellen Sie sicher, dass jeder Knoten den Status "Bereit" aufweist.

    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

Stellen Sie für einen privaten AKS-Cluster eine Verbindung von einem Endpunkt im selben virtuellen Netzwerk wie der Cluster her. Konfigurationsanweisungen finden Sie unter Erstellen eines privaten AKS-Clusters.

Bereitstellen der Anwendung

Das Manifest AKS Store umfasst die folgenden Kubernetes-Bereitstellungen und -Dienste:

  • Produktservice: Zeigt Produktinformationen an.
  • Bestellservice: Bestellungen aufgeben.
  • 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.
  • DocumentDB: NoSQL Instanz für gespeicherte Daten.
  • RabbitMQ: Message-Queue für eine Auftragswarteschlange.

Hinweis

Führen Sie keine zustandsbehafteten Container aus, z. B. DocumentDB und RabbitMQ, ohne permanente Lagerung in der Produktion. In diesem Artikel werden sie ohne beständigen Speicher aus Gründen der Einfachheit verwendet. Verwenden Sie für Produktionsworkloads verwaltete Dienste wie Azure Cosmos DB oder Azure Service Bus.

  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
    

Bereitstellen eines OpenAI-Diensts

Wählen Sie Azure OpenAI oder die OpenAI-API für die Anwendung aus, die auf AKS ausgeführt wird.

  1. Erstellen Sie im Azure-Portal eine Azure OpenAI-Instanz.
  2. Melden Sie sich bei Microsoft Foundry an.
  3. Deaktivieren Sie die Umschaltfläche "Neue Gießerei ", und wählen Sie dann " Alle Ressourcen unter "Erstellen mit Gießerei beibehalten" aus.
  4. Wählen Sie die Azure OpenAI-Ressource aus, die Sie erstellt haben, und wählen Sie dann "Bereitstellungen" unter "Freigegebene Ressourcen" aus.
  5. Wählen Sie Modell bereitstellen>Basismodell bereitstellen aus.
  6. Wählen Sie das gpt-4o-mini-Basismodell aus, geben Sie einen Bereitstellungsnamen ein, und stellen Sie dann das Modell bereit. Speichern Sie den Bereitstellungsnamen für den nächsten Abschnitt.

Weitere Informationen zum Erstellen einer Azure OpenAI-Bereitstellung finden Sie unter "Erste Schritte beim Generieren von Text mithilfe von Azure OpenAI".

Bereitstellen des KI-Microservice

Stellen Sie den Python-basierten KI-Mikroservice bereit, der OpenAI zum automatischen Generieren von Produktbeschreibungen verwendet. Dieser Microservice stellt eine Verbindung mit der AKS Store-Anwendung herstellt, die Sie im vorherigen Abschnitt bereitgestellt haben.

Verwenden Sie die Azure OpenAI-Ressourcen- und Modellbereitstellung, die Sie im Abschnitt "Bereitstellen eines OpenAI-Diensts" erstellt haben. Konfigurieren Sie die folgenden Umgebungsvariablen im AI Microservice-Manifest:

Umgebungsvariable Wert
USE_AZURE_OPENAI Legen Sie fest, dass "True" Azure OpenAI verwendet werden soll.
AZURE_OPENAI_DEPLOYMENT_NAME Der Name der gpt-4o-mini Modellbereitstellung in Microsoft Foundry.
AZURE_OPENAI_ENDPOINT Der Endpunkt von der Seite "Schlüssel" und "Endpunkt" Ihrer Azure OpenAI-Ressource.
OPENAI_API_KEY Ein API-Schlüssel auf der Seite "Schlüssel und Endpunkt" Ihrer Azure OpenAI-Ressource.
  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:2.2.0
              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. Kopieren Sie in Microsoft Foundry den Azure OpenAI-Bereitstellungsnamen, und legen Sie den AZURE_OPENAI_DEPLOYMENT_NAME Wert fest.

  4. Wählen Sie im Azure-Portal Schlüssel und Endpunkt in Ihrer Azure OpenAI-Ressource aus. Kopieren Sie den Endpunkt und den API-Schlüssel, und legen Sie dann die AZURE_OPENAI_ENDPOINT Werte fest OPENAI_API_KEY .

  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 Speichern von API-Schlüsseln in Kubernetes-Manifesten ist unsicher und kann geheime Schlüssel in der Quellcodeverwaltung verfügbar machen. In diesem Beispiel werden Manifestwerte zur Einfachheit verwendet. Authentifizieren Sie sich für Produktionsworkloads bei Azure OpenAI mithilfe einer verwalteten Identität oder speichern Sie geheime Schlüssel in Azure Key Vault.

Testen der Anwendung

  1. Überprüfen Sie den Status der bereitgestellten Pods mithilfe des Befehls kubectl get pods.

    kubectl get pods
    

    Vergewissern Sie sich, dass alle Pods den Status " Ausführen " aufweisen, bevor Sie den Vorgang fortsetzen.

  2. Rufen Sie die externe IP-Adresse für den Store-Administrator mithilfe des kubectl get service Befehls ab.

    kubectl get service store-admin
    

    Ein Kubernetes-Dienst macht den Store-Administrator über einen öffentlichen Lastenausgleich verfügbar. Das Lastenausgleichsmodul kann einige Minuten dauern, um eine Adresse zuzuweisen. Der EXTERNAL-IP-Wert wird bis zur Verfügbarkeit der Adresse ausstehend angezeigt.

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m
    
  3. Wiederholen Sie den vorherigen Schritt für den store-front Dienst.

  4. Wechseln Sie in einem Webbrowser zur externen IP-Adresse für den Store-Administrator. In diesem Beispiel ist die Adresse 40.64.86.161.

  5. Wählen Sie im Store-Administrator "Produkte>hinzufügen" aus.

  6. Nach ai-service dem Start wird neben dem Beschreibungsfeld die Schaltfläche " Ki-Assistent fragen " angezeigt. Geben Sie den Namen, den Preis und die Schlüsselwörter ein, wählen Sie "Ki-Assistent fragen" aus, um eine Produktbeschreibung zu generieren, und wählen Sie dann " Produkt speichern" aus.

  7. Vergewissern Sie sich, dass hunde smarte Kragen im Store-Administrator angezeigt wird.

    Screenshot des neuen Produkts im Store-Administrator.

  8. Wechseln Sie zur externen IP-Adresse für die Store-Front, und überprüfen Sie, ob Dog Smart Collar angezeigt wird.

    Screenshot des neuen Produkts im Store-Front.

Nächste Schritte

Nachdem Sie einer AKS-Anwendung die OpenAI-Funktionalität hinzugefügt haben, können Sie gesicherten Zugriff auf Azure OpenAI vom Azure Kubernetes Service (AKS) erhalten.

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