Schnellstart: Hosten einer .NET Durable Task SDK-App auf Azure Kubernetes Service

In dieser Schnellstartanleitung stellen Sie ein vorhandenes .NET Durable Task SDK-Beispiel für Azure Kubernetes Service (AKS) bereit, mit dem Durable Task Scheduler als Orchestrierungs-Back-End. Die Bereitstellung verwendet Azure Developer CLI (azd) und das Beispiel für die dokumentverarbeitung.

Hier erfahren Sie, wie Sie:

  • Richten Sie den Emulator für den Durable Task Scheduler lokal ein und führen Sie ihn aus.
  • Führen Sie die .NET Client- und Arbeitsprojekte im AKS-Szenariobeispiel aus.
  • Stellen Sie die Beispielinfrastruktur und die Apps in AKS mit azd up bereit.
  • Überprüfen Sie die Orchestrierungsausführung in AKS, indem Sie Pod-Protokolle überprüfen.

Voraussetzungen

Bevor Sie beginnen:

Vorbereiten und lokales Ausführen des Beispiels

  1. Wechseln Sie im Repositorystamm zum AKS-Szenariobeispiel:

    cd samples/scenarios/DocumentProcessingOnAKS
    
  2. Starten Sie den Emulator für den dauerhaften Aufgabenplaner:

    docker run --name dts-emulator -d -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latest
    

    Der Emulator macht Folgendes verfügbar:

    • 8080 für gRPC-App-Konnektivität.
    • 8082 für das Scheduler-Dashboard.
  3. Erstellen Sie die Lösung:

    dotnet build DurableTaskOnAKS.sln
    
  4. Führen Sie in einem Terminal den Worker aus:

    cd Worker
    dotnet run
    
  5. Führen Sie in einem zweiten Terminal den Client aus:

    cd Client
    dotnet run
    
  6. Überprüfen Sie, dass die folgende Ausgabe im Client-Terminal angezeigt wird:

    Endpoint: http://localhost:8080 | TaskHub: default
    Submitting 3 documents...
    
      Scheduled [...] 'Cloud Migration Strategy'
      -> Processed 'Cloud Migration Strategy': Sentiment=Positive, Topic=Technology, Priority=Normal
    
      Scheduled [...] 'Quarterly Incident Report'
      -> Processed 'Quarterly Incident Report': Sentiment=Positive, Topic=Technology, Priority=Normal
    
      Scheduled [...] 'ML Model Evaluation'
      -> Processed 'ML Model Evaluation': Sentiment=Positive, Topic=Technology, Priority=Normal
    
    Done.
    

Bereitstellen in AKS mit Azure Developer CLI

  1. Von samples/scenarios/DocumentProcessingOnAKS aus ausführen:

    azd up
    
  2. Wenn Sie dazu aufgefordert werden, geben Sie Folgendes an:

    Parameter Beschreibung
    Umgebungsname Präfix, das für Ihre Bereitstellungsressourcen verwendet wird.
    Azure-Abonnement Azure Abonnement für die Bereitstellung.
    Azure-Standort Azure-Region für die Ressourcen.

azd up stellt die vollständige Lösung bereit, einschließlich:

  • AKS-Cluster für die Client- und Worker-Workloads.
  • Azure Container Registry (ACR) für Container-Images.
  • Langlebiger Aufgabenplaner für den Orchestrierungszustand und die Ausführung.
  • Vom Benutzer zugewiesene verwaltete Identität und Verbundanmeldeinformationen für die AKS-Workload Identity Authentication.

Überprüfen Sie die AKS-Bereitstellung

  1. AKS-Zugangsdaten abrufen:

    az aks get-credentials --resource-group <resource-group-name> --name <aks-cluster-name>
    

    Sie können diese Werte von azd env get-values erhalten.

  2. Vergewissern Sie sich, dass Pods ausgeführt werden:

    kubectl get pods
    
  3. Clientprotokolle überprüfen:

    kubectl logs -l app=client --tail=30
    
  4. Überprüfen sie die Arbeitsprotokolle:

    kubectl logs -l app=worker --tail=30
    

Wenn die Bereitstellung funktioniert, zeigen die Clientprotokolle geplante Orchestrierungen und abgeschlossene Ergebnisse der Dokumentverarbeitung an.

Überprüfen Sie mithilfe des Durable Task Scheduler Dashboards

Sie können ihren Aufgabenhub- und Orchestrierungsstatus auch über das Dashboard "Durable Task Scheduler" überprüfen.

Sie können den Orchestrierungsstatus und den Verlauf über das Dashboard "Durable Task Scheduler" anzeigen. Standardmäßig wird das Dashboard auf Port 8082 ausgeführt.

  1. Navigieren Sie in Ihrem Webbrowser zu http://localhost:8082.

  2. Klicken Sie auf den Standardaufgabenhub . Die von Ihnen erstellte Orchestrierungsinstanz befindet sich in der Liste.

  3. Klicken Sie auf die Orchestrierungsinstanz-ID, um die Ausführungsdetails anzuzeigen.

    Screenshot der Details der Orchestrierungsinstanz.

Grundlegendes zum Code

Klient-App

Der Client erstellt einen Durable Task-Client, plant Orchestrierungen und wartet auf den Abschluss:

foreach (var doc in docs)
{
    string id = await client.ScheduleNewOrchestrationInstanceAsync(
        "DocumentProcessingOrchestration", doc);

    var meta = await client.WaitForInstanceCompletionAsync(id, getInputsAndOutputs: true);
    if (meta.RuntimeStatus == OrchestrationRuntimeStatus.Completed)
        Console.WriteLine($"  -> {meta.ReadOutputAs<string>()}\n");
}

Das Beispiel erstellt die connection string aus Umgebungsvariablen (ENDPOINT, TASKHUB, AZURE_CLIENT_ID), wobei lokale Emulatorstandardwerte verwendet werden, wenn diese Variablen nicht festgelegt werden.

Worker-App

Der Arbeiter registriert die Orchestrierung und Aktivitäten und verbindet sich dann mit dem Dauerhaften Aufgabenplaner:

builder.Services.AddDurableTaskWorker()
    .AddTasks(r =>
    {
        r.AddOrchestrator<DocumentProcessingOrchestration>();
        r.AddActivity<ValidateDocument>();
        r.AddActivity<ClassifyDocument>();
    })
    .UseDurableTaskScheduler(connectionString);

Orchestrierungsablauf

Diese DocumentProcessingOrchestration-Demonstration veranschaulicht die Verkettung von Aktivitäten sowie das "Auffächern nach außen/innen":

bool isValid = await context.CallActivityAsync<bool>(nameof(ValidateDocument), doc);

var tasks = new[]
{
    context.CallActivityAsync<ClassificationResult>(nameof(ClassifyDocument), new ClassifyRequest(doc.Id, doc.Content, "Sentiment")),
    context.CallActivityAsync<ClassificationResult>(nameof(ClassifyDocument), new ClassifyRequest(doc.Id, doc.Content, "Topic")),
    context.CallActivityAsync<ClassificationResult>(nameof(ClassifyDocument), new ClassifyRequest(doc.Id, doc.Content, "Priority")),
};

ClassificationResult[] results = await Task.WhenAll(tasks);

Bereinigen von Ressourcen

Um Gebühren zu vermeiden, löschen Sie bereitgestellte Azure Ressourcen:

azd down

Um den lokalen Emulator zu stoppen und zu entfernen:

docker stop dts-emulator
docker rm dts-emulator

Nächster Schritt