Tutorial: Erstellen Sie eine Container-App auf Azure Arc-fähigem Kubernetes

In diesem Tutorial deployen Sie eine Container-App in einer bestehenden Container-Apps-verbundenen Umgebung auf einem Azure Arc-fähigen Kubernetes-Cluster. Anschließend überprüft man Provisioning, DNS, Ingress, Application Response und Protokolle.

  • Rufen Sie eine bestimmte verbundene Umgebung anhand des Namens ab.
  • Erstellen Sie eine Container-App mit externem Ingress.
  • Überprüfen Sie die Anwendungsrevision und den vollqualifizierten Domänennamen.
  • Senden Sie eine Anfrage an die Anwendung.
  • Sehen Sie sich Anwendungsprotokolle in Log Analytics an, falls konfiguriert.
  • Lösche die Tutorial-Anwendung.

Voraussetzungen

Bevor Sie beginnen, überprüfen Sie die folgenden Anforderungen:

  • Eine verbundene Umgebung, die durch das Abschließen der Aufgabe Aktivieren von Azure Container Apps in Kubernetes mit Azure Arc-Unterstützung erstellt wurde.
  • Azure CLI-Zugriff auf das Abonnement, das die verbundene Umgebung enthält.
  • Azure-Berechtigung zur Erstellung von Container-Apps in der Ziel-Ressourcengruppe und der verbundenen Umgebung.
  • Die Ressourcengruppe und der Name der verbundenen Umgebung.
  • Netzwerk- und DNS-Zugriff von deinem Arbeitsplatz auf die Ingress-Adresse der verbundenen Umgebung.
  • Optionale Berechtigung zur Abfrage des Log Analytics-Arbeitsbereichs, der während der Installation der Erweiterung konfiguriert wurde.

Bevor Sie eine Produktionsanwendung bereitstellen, lesen Sie Azure Container Apps auf Azure Arc. Wenn die Anwendung nicht bereitgestellt wird oder nicht erreichbar ist, lesen Sie Problembehandlung für Azure Container Apps auf für Azure Arc aktiviertem Kubernetes.

Fügen Sie die Azure CLI-Erweiterung hinzu.

Starten Sie die Bash-Umgebung in Azure Cloud Shell.

Starten von Cloud Shell in einem neuen Fenster

Fügen Sie als Nächstes die erforderliche Azure CLI-Erweiterung hinzu.

az extension add --name containerapp --upgrade --yes

Erstellen Sie eine Ressourcengruppe für die Anwendung

Die Container-App kann eine andere Ressourcengruppe als die verbundene Umgebung verwenden. Setzen Sie die Anwendungsressourcengruppe und die Azure-Region ein, die zur Speicherung ihrer Ressourcenmetadaten verwendet wird. Der Anwendungscontainer läuft im Kubernetes-Cluster, der mit der verbundenen Umgebung verbunden ist.

APP_RESOURCE_GROUP="my-container-apps-resource-group"
AZURE_LOCATION="eastus"
az group create --name $APP_RESOURCE_GROUP --location $AZURE_LOCATION

Nutzen Sie die vernetzte Umgebung

Setzen Sie die Ressourcengruppe und den Namen der verbundenen Umgebung ein:

CONNECTED_ENVIRONMENT_RESOURCE_GROUP="<CONNECTED_ENVIRONMENT_RESOURCE_GROUP>"
CONNECTED_ENVIRONMENT_NAME="<CONNECTED_ENVIRONMENT_NAME>"

Holen Sie diese spezifische verbundene Umgebung ab und überprüfen Sie, ob sie bereit ist:

CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query id \
  --output tsv)

az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query "{Id:id,State:properties.provisioningState,Domain:properties.defaultDomain}" \
  --output yaml

Nur fortfahren, wenn StateSucceeded ist.

Erstelle und verifiziere die App

Erstellen Sie die Beispielanwendung:

CONTAINER_APP_NAME="my-container-app"

az containerapp create \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --environment $CONNECTED_ENVIRONMENT_ID \
  --environment-type connected \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

Warten Sie, bis die Bereitstellung erfolgreich abgeschlossen ist:

CONTAINER_APP_ID=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query id \
  --output tsv)

az resource wait --ids $CONTAINER_APP_ID --created --timeout 600

az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query "{State:properties.provisioningState,Revision:properties.latestReadyRevisionName,FQDN:properties.configuration.ingress.fqdn}" \
  --output yaml

APP_FQDN=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query properties.configuration.ingress.fqdn \
  --output tsv)

Setzen Sie nur dann fort, wenn RevisionState ist, Succeeded nicht leer ist und FQDN die Domain der verbundenen Umgebung enthält. Teste DNS und die Anwendungsantwort aus einem Netzwerk, das die Ingress-Adresse der verbundenen Umgebung erreichen kann:

nslookup $APP_FQDN
curl --fail --show-error "https://$APP_FQDN"

Sie können die Anwendung auch in einem Browser öffnen:

az containerapp browse \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME

Wenn DNS nicht aufgelöst wird, die Anfrage abläuft oder die Antwort nicht erfolgreich ist, siehe Application Ingress ist nicht erreichbar.

Abrufen von Diagnoseprotokollen mithilfe von Log Analytics

Hinweis

Dieser Abschnitt gilt nur, wenn Sie Log Analytics während der Installation der Container Apps Erweiterung konfigurieren. Wenn Sie Log Analytics nicht konfiguriert haben, überspringen Sie diesen Abschnitt.

Öffnen Sie den für die Container Apps-Erweiterung konfigurierten Log Analytics-Arbeitsbereich und wählen Sie Protokolle aus. Führe die folgende Abfrage aus, um Logs der letzten 72 Stunden anzuzeigen. Die Erstaufnahme kann 10–15 Minuten dauern.

let StartTime = ago(72h);
let EndTime = now();
ContainerAppConsoleLogs_CL
| where TimeGenerated between (StartTime .. EndTime)
| where ContainerAppName_s =~ "my-container-app"

Die Anwendungsprotokolle für alle Apps, die in Ihrem Kubernetes-Cluster gehostet werden, werden im Log Analytics-Arbeitsbereich in der benutzerdefinierten Protokolltabelle namens ContainerAppConsoleLogs_CL protokolliert.

  • Log_s enthält Anwendungslog-Nachrichten und Container-Lebenszyklus-Nachrichten.
  • ContainerAppName_s identifiziert die Container-App. Dieses Feld wird von der vorherigen Abfrage verwendet.

Weitere Informationen zu Protokollabfragen finden Sie unter Erste Schritte mit Kusto.

Bereinige die Tutorial-Anwendung

Lösche die Beispiel-Container-App:

az containerapp delete \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --yes

Wenn du die Anwendungsressourcengruppe nur für dieses Tutorial erstellt hast und sie keine anderen Ressourcen enthält, lösche sie.

az group delete --name $APP_RESOURCE_GROUP --yes --no-wait

Löschen Sie nicht die verbundene Umgebung, den benutzerdefinierten Standort, die Erweiterung oder den verbundenen Cluster, da andere Anwendungen diese Ressourcen teilen können.

Nächste Schritte