Tutorial: Aktivieren von Azure Container Apps in Kubernetes mit Azure Arc-Unterstützung

Dieses Tutorial bereitet einen unterstützten Kubernetes-Cluster vor, um Azure Container Apps auszuführen. Es erstellt einen Azure Arc-fähigen Kubernetes-Cluster, installiert die Container Apps-Erweiterung, erstellt einen benutzerdefinierten Standort und erstellt eine mit Container Apps verbundene Umgebung.

Das Abschließen dieses Tutorials ändert sowohl dein Azure-Abonnement als auch deinen Kubernetes-Cluster. Du brauchst Azure-Berechtigungen, um die aufgeführten Ressourcen zu erstellen, sowie Cluster-Admin-Zugriff auf den Kubernetes-Cluster.

Dieses Tutorial zeigt, wie man Azure Container Apps auf einem Azure Arc-fähigen Kubernetes-Cluster aktiviert. In diesem Tutorial erfahren Sie:

  • Verbinde einen Kubernetes-Cluster mit Azure Arc, falls er noch nicht verbunden ist.
  • Erstelle optional einen Log Analytics-Arbeitsbereich.
  • Installiere und validiere die Container Apps-Erweiterung.
  • Erstellen und validieren Sie einen benutzerdefinierten Standort.
  • Erstellen und validieren Sie eine mit Container-Apps verbundene Umgebung.

Bevor Sie beginnen, lesen Sie Azure Container Apps auf Azure Arc. Wenn eine Ressource oder eine In-Cluster-Komponente nicht bereit wird, lesen Sie Problembehandlung für Azure Container Apps in Azure Arc-fähigem Kubernetes.

Voraussetzungen

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

  • Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie keins haben, erstellen Sie eine kostenlos.
  • Berechtigung, Ressourcenanbieter zu registrieren und Ressourcengruppen zu erstellen, eine Azure Arc-fähige Kubernetes-Ressource, eine Cluster-Erweiterung, einen benutzerdefinierten Standort, eine mit Container-Apps verbundene Umgebung und optional einen Log Analytics-Arbeitsbereich.
  • Die Azure CLI und ihre Voraussetzungen.
  • Eine mit deinem Kubernetes-Cluster kompatible kubectl-Version sowie Netzwerkzugriff von deiner Workstation auf den Kubernetes-API-Server.
  • Ein unterstützter Kubernetes-Cluster mit Linux-Worker-Nodes amd64 und Cluster-Admin-Zugriff über den aktiven kubectl Kontext.
  • Eine funktionierende Kubernetes-Service-Implementierung LoadBalancer .
  • Outbound-Verbindung zu den von Azure Arc und Container Apps benötigten Endpunkten.
  • Ausreichend zuteilbare CPU und Speicher für die Erweiterung und Anwendungs-Workloads.

Bevor Sie einen Produktionscluster ändern, prüfen Sie die Plan-a-Container-Apps-Bereitstellung auf Azure Arc-fähigem Kubernetes.

Konfiguration

Installieren Sie die folgenden Azure CLI-Erweiterungen.

az extension add --name connectedk8s --upgrade --yes
az extension add --name k8s-extension --upgrade --yes
az extension add --name customlocation --upgrade --yes
az extension add --name containerapp --upgrade --yes

Registrieren Sie die erforderlichen Namespaces.

az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az provider register --namespace Microsoft.App --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.OperationalInsights --wait

Legen Sie Umgebungsvariablen basierend auf der Bereitstellung Ihres Kubernetes-Clusters fest.

GROUP_NAME="my-arc-cluster-group"
AKS_CLUSTER_GROUP_NAME="my-aks-cluster-group"
AKS_NAME="my-aks-cluster"
LOCATION="eastus"

Erstellen eines verbundenen Clusters

Wenn du bereits einen unterstützten, Azure Arc-fähigen Kubernetes-Cluster hast$GROUP_NAME, erstelle keinen weiteren Cluster. Setzen Sie CLUSTER_NAME auf den Namen der vorhandenen Connected-Cluster-Ressource, überprüfen Sie den Zugriff mit kubectl get nodes, und fahren Sie dann mit Erstellen eines Log Analytics-Arbeitsbereichs fort.

Die folgenden Schritte erstellen einen AKS-Cluster und verbinden ihn mit Azure Arc. Dieser Pfad ist ausschließlich als von Azure gehostete Evaluierungsumgebung für das Tutorial gedacht. Für einen bestehenden On-Premises- oder Multicloud-Cluster folgen Sie Quickstart: Verbinden Sie einen bestehenden Kubernetes-Cluster mit Azure Arc und kehren Sie dann zu diesem Tutorial zurück.

  1. Erstellen Sie einen Cluster im Azure Kubernetes Service.

    az group create --name $AKS_CLUSTER_GROUP_NAME --location $LOCATION
    az aks create \
       --resource-group $AKS_CLUSTER_GROUP_NAME \
       --name $AKS_NAME \
       --enable-aad \
       --generate-ssh-keys
    
  2. Rufen Sie die Datei kubeconfig ab, und testen Sie ihre Verbindung mit dem Cluster. Standardmäßig wird die Datei „kubeconfig“ in ~/.kube/config gespeichert.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Erstellen Sie eine Ressourcengruppe für Ihre Azure Arc-Ressourcen.

    az group create --name $GROUP_NAME --location $LOCATION
    
  4. Verbinden Sie den erstellten Cluster mit Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Warte, bis der verbundene Cluster die Bereitstellung abgeschlossen hat.

    CONNECTED_CLUSTER_ID=$(az connectedk8s show \
        --resource-group $GROUP_NAME \
        --name $CLUSTER_NAME \
        --query id \
        --output tsv)
    
    az resource wait --ids $CONNECTED_CLUSTER_ID --created --timeout 600
    
    az connectedk8s show \
        --resource-group $GROUP_NAME \
        --name $CLUSTER_NAME \
        --query "{State:provisioningState,Connectivity:connectivityStatus}" \
        --output table
    

    Nur dann fortfahren, wenn State ist Succeeded und Connectivity ist Connected. Wenn der Befehl abläuft, sieh Connected Cluster ist nicht bereit.

Erstellen eines Log Analytics-Arbeitsbereichs

Ein Log Analytics-Arbeitsbereich bietet Zugriff auf Anwendungslogs für Container-Apps, die im Azure Arc-fähigen Kubernetes-Cluster laufen. Ein Log Analytics-Arbeitsbereich ist optional, wird aber für Anwendungsdiagnostik empfohlen.

Wichtig

Entscheide dich, ob du Log Analytics verwenden möchtest, bevor du die Container Apps-Erweiterung installierst. Stellen Sie die Log Analytics-Konfiguration während der Installation der Erweiterung bereit. Du kannst die Log Analytics-Konfiguration später nicht mehr zu dieser Erweiterungsinstanz hinzufügen.

  1. Erstellen Sie einen Log Analytics-Arbeitsbereich.

    WORKSPACE_NAME="$GROUP_NAME-workspace" # Name of the Log Analytics workspace
    
    az monitor log-analytics workspace create \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME
    
  2. Führen Sie die folgenden Befehle aus, um die codierte Arbeitsbereichs-ID und den gemeinsam genutzten Schlüssel für einen vorhandenen Log Analytics-Arbeitsbereich abzurufen. Sie benötigen diese Angaben im nächsten Schritt.

    Caution

    Der Workspace Shared Key ist eine Zugangsberechtigung. Drucke es nicht aus, committe es nicht in die Versionskontrolle, speichere es nicht in der Shell-Historie oder füge es in Support-Bundles ein. Die folgenden Befehle speichern sie in einer Shell-Variable und geben sie als geschützte Erweiterungseinstellung an Azure weiter.

    LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query customerId \
        --output tsv)
    LOG_ANALYTICS_WORKSPACE_ID_ENC=$(printf %s $LOG_ANALYTICS_WORKSPACE_ID | base64 -w0) # Needed for the next step
    LOG_ANALYTICS_KEY=$(az monitor log-analytics workspace get-shared-keys \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query primarySharedKey \
        --output tsv)
    LOG_ANALYTICS_KEY_ENC=$(printf %s $LOG_ANALYTICS_KEY | base64 -w0) # Needed for the next step
    

Überprüfen Sie eine bestehende KEDA-Installation

Die Container Apps-Erweiterung installiert KEDA. Bevor Sie die Erweiterung installieren, überprüfen Sie den Cluster auf bestehende KEDA-Komponenten:

kubectl get deployments -A -o custom-columns="NAMESPACE:.metadata.namespace,NAME:.metadata.name"
kubectl get crd scaledobjects.keda.sh

Überprüfen Sie die Bereitstellungsliste auf KEDA-Komponenten. Wenn einer der Befehle eine bestehende KEDA-Installation identifiziert, stoppen Sie und bestätigen Sie die unterstützte Koexistenzkonfiguration, bevor Sie fortfahren. Entferne nicht die bestehende KEDA-Installation und wende keine undokumentierten Erweiterungseinstellungen an, da andere Arbeitslasten davon abhängen könnten.

Installieren der Container Apps-Erweiterung

Wichtig

Wenn du auf AKS unter Azure Local deployest, stelle sicher, dass du HAProxy oder einen benutzerdefinierten Load Balancer einrichtest, bevor du versuchst, die Erweiterung zu installieren. Du kannst es auch verwenden az containerapp arc setup-core-dns --distro AksAzureLocal , um CoreDNS für lokale Kontexte einzurichten.

  1. Setzen Sie Namen für die Container-Apps-Erweiterung, deren Kubernetes-Namensraum und die verbundene Umgebung fest.

    • EXTENSION_NAMEidentifiziert die Azure-Cluster-Erweiterungsressource.
    • NAMESPACE wird im Kubernetes-Cluster erstellt und enthält Erweiterungskomponenten sowie von Container Apps verwaltete Ressourcen. Die Einstellung appsNamespace muss exakt mit dem Erweiterungs-Release-Namensraum übereinstimmen.
    • CONNECTED_ENVIRONMENT_NAME wird Teil der Standard-Anwendungsdomäne. Verwenden Sie einen DNS-kompatiblen Namen, der innerhalb der Ressourcengruppe eindeutig ist.

    Installiere keine nicht zusammenhängenden Arbeitslasten im Erweiterungsnamensraum.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Installieren Sie die Container Apps-Erweiterung in Ihrem mit Azure Arc verbundenen Cluster mit aktiviertem Log Analytics. Log Analytics kann der Erweiterung später nicht mehr hinzugefügt werden.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.App.Environment' \
        --release-train stable \
        --auto-upgrade-minor-version true \
        --scope cluster \
        --release-namespace $NAMESPACE \
        --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" \
        --configuration-settings "appsNamespace=${NAMESPACE}" \
        --configuration-settings "clusterName=${CONNECTED_ENVIRONMENT_NAME}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    Hinweis

    Um die Erweiterung ohne Log Analytics-Integration zu installieren, entferne die drei loggingbezogenen Parameter aus dem Befehl.

    Für einen Cluster, der einen benutzerdefinierten Load Balancer verwendet, setzen Sie loadBalancerIp auf eine Adresse, die für den Container Apps-Ingress reserviert ist:

    --configuration-settings "loadBalancerIp=<LOAD_BALANCER_INGRESS_IP>"
    

    Die Adresse muss von Anwendungsclients erreichbar sein und darf nicht einem anderen Dienst zugewiesen werden. Verwenden Sie nach der Installation kubectl get service -n $NAMESPACE -o wide, um zu überprüfen, ob der Ingressdienst der Erweiterung diese Adresse meldet. Konfigurieren Sie Wildcard-DNS erst, nachdem die Adresse zugewiesen wurde. Siehe DNS-Anforderungen.

    In der folgenden Tabelle sind die verschiedenen --configuration-settings-Parameter bei Ausführung des Befehls beschrieben:

    Parameter BESCHREIBUNG
    Microsoft.CustomLocation.ServiceAccount Das für den benutzerdefinierten Speicherort erstellte Dienstkonto. Legen Sie den Wert auf default fest.
    appsNamespace Der zum Erstellen der App-Definitionen und -Revisionen verwendete Namespace. Er muss mit dem Releasenamespace der Erweiterung übereinstimmen.
    clusterName Der Name der Kubernetes-Umgebung für Container-Apps-Erweiterungen, die gegen diese Erweiterung erstellt wurde.
    logProcessor.appLogs.destination Wahlfrei. Ziel für Anwendungsprotokolle. Akzeptiert log-analytics oder none, wenn Sie „none“ (keine) auswählen, werden Plattformprotokolle deaktiviert.
    logProcessor.appLogs.logAnalyticsConfig.customerId Nur erforderlich, wenn logProcessor.appLogs.destination auf log-analytics festgelegt ist. Die base64-codierte Log Analytics-Arbeitsbereichs-ID. Dieser Parameter sollte als geschützte Einstellung konfiguriert werden.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Nur erforderlich, wenn logProcessor.appLogs.destination auf log-analytics festgelegt ist. Der base64-codierte gemeinsam verwendete Schlüssel des Log Analytics-Arbeitsbereichs. Dieser Parameter sollte als geschützte Einstellung konfiguriert werden.
    loadBalancerIp Die Ingress-IP des Load Balancers.
  3. Speichern Sie die id-Eigenschaft der Container Apps-Erweiterung für später.

    EXTENSION_ID=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query id \
        --output tsv)
    
  4. Warten Sie, bis die Erweiterung vollständig installiert ist, bevor Sie fortfahren.

    az resource wait --ids $EXTENSION_ID --created --timeout 1200
    
    az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query "{State:provisioningState,Version:currentVersion}" \
        --output table
    

    Nur fortfahren, wenn StateSucceeded ist. Wenn der Befehl abläuft oder einen Fehler meldet, siehe Erweiterungsinstallation fehlschlägt oder abläuft.

  5. Überprüfen Sie die Erweiterungs-Workloads, Dienste und aktuelle Ereignisse:

    kubectl get pods -n $NAMESPACE
    kubectl get services -n $NAMESPACE -o wide
    kubectl get events -n $NAMESPACE --sort-by=.lastTimestamp
    

    Erstelle keinen benutzerdefinierten Standort, während ein Erweiterungspod aussteht, wiederholt neu gestartet wird oder unerwartet nicht bereit ist. Weitere Informationen zu diesen Pods und ihrer Rolle im System finden Sie unter Übersicht über Azure Arc.

  6. Wenn du Log Analytics konfiguriert hast, lösche die lokalen Variablen, die den Workspace-Schlüssel enthalten.

    unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
    

Erstellen eines benutzerdefinierten Standorts

Der benutzerdefinierte Speicherort ist ein Azure-Speicherort, den Sie der verbundenen Azure Container Apps-Umgebung zuweisen.

  1. Legen Sie die folgenden Umgebungsvariablen auf den gewünschten Namen des benutzerdefinierten Speicherorts und für die ID des verbundenen Azure Arc-Clusters fest.

    CUSTOM_LOCATION_NAME="my-custom-location" # Name of the custom location
    CONNECTED_CLUSTER_ID=$(az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME --query id --output tsv)
    
  2. Erstellen des benutzerdefinierten Standorts:

    az customlocation create \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --host-resource-id $CONNECTED_CLUSTER_ID \
        --namespace $NAMESPACE \
        --cluster-extension-ids $EXTENSION_ID
    

    Hinweis

    Wenn Sie Schwierigkeiten haben, einen benutzerdefinierten Standort auf Ihrem Cluster zu erstellen, müssen Sie möglicherweise die Funktion für benutzerdefinierte Standorte in Ihrem Cluster aktivieren. Aktivieren Sie diese Funktion beim Anmelden in der CLI, indem Sie einen Service-Principal oder einen Microsoft Entra-Benutzer mit eingeschränkten Berechtigungen auf der Cluster-Ressource verwenden.

  3. Warte, bis der benutzerdefinierte Standort die Bereitstellung abgeschlossen hat, und speichere seine Ressourcen-ID.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    
    az resource wait --ids $CUSTOM_LOCATION_ID --created --timeout 600
    
    az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query "{State:provisioningState,Host:hostResourceId,Namespace:namespace}" \
        --output table
    

    Überprüfe, dass State auf Succeeded gesetzt ist, Host den verbundenen Cluster identifiziert, den du verwenden möchtest, und Namespace mit $NAMESPACE übereinstimmt. Wenn die Bereitstellung fehlschlägt, siehe Benutzerdefinierte Standorterstellung fehlschlägt.

Erstellen der verbundenen Azure Container Apps-Umgebung

Bevor Sie mit dem Erstellen von Apps am benutzerdefinierten Speicherort beginnen können, benötigen Sie eine verbundene Azure Container Apps-Umgebung.

  1. Erstellen der verbundenen Container Apps-Umgebung:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. Warte, bis die verbundene Umgebung die Bereitstellung abgeschlossen hat.

    CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --query id \
        --output tsv)
    
    az resource wait --ids $CONNECTED_ENVIRONMENT_ID --created --timeout 900
    
    az containerapp connected-env show \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --query "{State:properties.provisioningState,Location:location,CustomLocation:extendedLocation.name,Domain:properties.defaultDomain}" \
        --output yaml
    

    Fahren Sie nur fort, wenn StateSucceeded ist und CustomLocation mit dem benutzerdefinierten Speicherort übereinstimmt, den Sie in diesem Tutorial erstellt haben. Speichere das angezeigte Domain für die DNS-Konfiguration der Anwendung. Wenn die Bereitstellung fehlschlägt, lesen Sie Die Erstellung der verbundenen Umgebung schlägt fehl.

Nächste Schritte