Einrichten eines Kubernetes-Clusters mit Azure Arc-Unterstützung zum Ausführen von App Service, Funktionen und Logic Apps (Vorschau)

Wenn Sie über einen Kubernetes-Cluster mit Azure Arc-Unterstützung verfügen, können Sie damit einen App Service-fähigen benutzerdefinierten Standort erstellen und dort Web-Apps, Funktions-Apps und Logik-Apps bereitstellen.

Kubernetes mit Azure Arc-Unterstützung erlaubt es Ihnen, Ihren lokalen oder Cloud-Kubernetes-Cluster für App Service, Functions und Logic Apps in Azure sichtbar zu machen. Sie können eine App erstellen und sie dort wie in jeder anderen Azure-Region bereitstellen.

Voraussetzungen

Falls Sie noch kein Azure-Konto besitzen, registrieren Sie sich heute für ein kostenloses Konto.

Hinzufügen von Azure CLI-Erweiterungen

Starten Sie die Bash-Umgebung in Azure Cloud Shell.

Da diese CLI-Befehle noch nicht Teil des CLI-Kernsets sind, fügen Sie sie mit den folgenden Befehlen hinzu.

az extension add --upgrade --yes --name connectedk8s
az extension add --upgrade --yes --name k8s-extension
az extension add --upgrade --yes --name customlocation
az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

Erstellen eines verbundenen Clusters

Hinweis

In diesem Tutorial wird Azure Kubernetes Service (AKS) verwendet, um konkrete Anweisungen zum Einrichten einer Umgebung von Grund auf bereitzustellen. Für eine Produktionsworkload sollten Sie jedoch Azure Arc wahrscheinlich nicht in einem AKS-Cluster aktivieren, da es bereits in Azure verwaltet wird. Die folgenden Schritte helfen Ihnen beim Einstieg in das Verständnis des Diensts. Für Produktionsbereitstellungen sollten sie die Schritte jedoch nur als illustrativ und nicht als verbindlich betrachten. Allgemeine Anweisungen zum Erstellen eines Kubernetes-Clusters mit Azure Arc-Unterstützung finden Sie unter Schnellstart: Verbinden eines vorhandenen Kubernetes-Clusters mit Azure Arc.

  1. Erstellen Sie einen Cluster in Azure Kubernetes Service mit einer öffentlichen IP-Adresse. Ersetzen Sie <group-name> durch den Namen der gewünschten Ressourcengruppe.

    AKS_CLUSTER_GROUP_NAME="<group-name>" # Name of resource group for the AKS cluster
    AKS_NAME="${aksClusterGroupName}-aks" # Name of the AKS cluster
    RESOURCE_LOCATION="eastus" # "eastus" or "westeurope"
    
    az group create -g $AKS_CLUSTER_GROUP_NAME -l $RESOURCE_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. Ersetzen Sie <group-name> durch den Namen der gewünschten Ressourcengruppe.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_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. Überprüfen Sie die Verbindung mit dem folgenden Befehl. Die provisioningState-Eigenschaft sollte als Succeeded angezeigt werden. Falls nicht, führen Sie den Befehl nach einer Minute erneut aus.

    az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
    

Erstellen eines Log Analytics-Arbeitsbereichs

Während ein Log Analytics-Arbeitsbereich nicht erforderlich ist, um App Service in Azure Arc auszuführen, können Entwickler jedoch auf diese Weise Anwendungsprotokolle für ihre Apps erhalten, die im Kubernetes-Cluster mit Azure Arc-Unterstützung ausgeführt werden.

  1. Erstellen Sie der Einfachheit halber jetzt den 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.

    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
    

Installieren der App Service-Erweiterung

  1. Legen Sie die folgenden Umgebungsvariablen für den gewünschten Namen der App Service-Erweiterung, den Clusternamespace, in dem Ressourcen bereitgestellt werden sollen, und den Namen für die App Service Kubernetes-Umgebung fest. Wählen Sie einen eindeutigen Namen für <kube-environment-name> aus, weil er Teil des Domänennamens für die App ist, die in der App Service Kubernetes-Umgebung erstellt wurde.

    EXTENSION_NAME="appservice-ext" # Name of the App Service extension
    NAMESPACE="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    KUBE_ENVIRONMENT_NAME="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  2. Installieren Sie die App Service-Erweiterung in Ihrem mit Azure Arc verbundenen Cluster mit aktiviertem Log Analytics. Auch wenn Log Analytics hier ebenfalls nicht erforderlich ist, können Sie es der Erweiterung später nicht mehr hinzufügen, sodass dies jetzt einfacher ist.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.Web.Appservice' \
        --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=${KUBE_ENVIRONMENT_NAME}" \
        --configuration-settings "keda.enabled=true" \
        --configuration-settings "buildService.storageClassName=default" \
        --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" \
        --configuration-settings "customConfigMap=${NAMESPACE}/kube-environment-config" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${aksClusterGroupName}" \
        --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, entfernen Sie die letzten drei --configuration-settings-Parameter aus dem Befehl.

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

    Parameter Beschreibung
    Microsoft.CustomLocation.ServiceAccount Das Dienstkonto, das für den benutzerdefinierten Standort erstellt werden soll, der erstellt wird. Es wird empfohlen, dies auf den Wert default festzulegen.
    appsNamespace Der Namespace zum Bereitstellen der App-Definitionen und Pods. Muss mit dem Releasenamespace der Erweiterung übereinstimmen.
    clusterName Der Name der App Service Kubernetes-Umgebung, die für diese Erweiterung erstellt wird.
    keda.enabled Gibt an, ob KEDA auf dem Kubernetes-Cluster werden soll. Für diesen Parameter kann true oder false angegeben werden.
    buildService.storageClassName Der Name der Speicherklasse für den Builddienst zum Speichern von Buildartefakten. Ein Wert wie default gibt eine Klasse namens default an, nicht eine Klasse, die als Standard markiert ist. Der Standardwert ist eine gültige Speicherklasse für AKS und AKS HCI, aber möglicherweise nicht für andere Distributionen/Plattformen.
    buildService.storageAccessMode Der Zugriffsmodus, der mit der oben erwähnten, benannten Speicherklasse verwendet werden soll. Für diesen Parameter kann ReadWriteOnce oder ReadWriteMany angegeben werden.
    customConfigMap Der Name der ConfigMap (Konfigurationszuordnung), die von der App Service Kubernetes-Umgebung festgelegt wird. Derzeit muss es <namespace>/kube-environment-config sein, wobei <namespace> durch den Wert von appsNamespace weiter oben ersetzt wird.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Der Name der Ressourcengruppe, in der sich der Azure Kubernetes Service Cluster befindet. Nur gültig und erforderlich, wenn der zugrunde liegende Cluster Azure Kubernetes Service ist.
    logProcessor.appLogs.destination Optional. 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.
  3. Speichern Sie die id-Eigenschaft der App Service-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. Sie können ihre Terminalsitzung warten lassen, bis dies abgeschlossen ist, indem Sie den folgenden Befehl ausführen:

    az resource wait --ids $EXTENSION_ID --custom "properties.installState!='Pending'" --api-version "2020-07-01-preview"
    

Sie können kubectl verwenden, um die Pods anzuzeigen, die in Ihrem Kubernetes-Cluster erstellt wurden:

kubectl get pods -n $NAMESPACE

Weitere Informationen zu diesen Pods und ihrer Rolle im System finden Sie unter Pods, die von der App Service-Erweiterung erstellt wurden.

Erstellen eines benutzerdefinierten Standorts

Der benutzerdefinierte Standort in Azure wird verwendet, um die App Service Kubernetes-Umgebung zuzuweisen.

  1. Legen Sie die folgenden Umgebungsvariablen für den gewünschten Namen des benutzerdefinierten Standorts 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 beim Erstellen eines benutzerdefinierten Speicherorts in Ihrem Cluster Probleme auftreten, müssen Sie möglicherweise das Feature für benutzerdefinierte Speicherorte in Ihrem Cluster aktivieren. Dies ist erforderlich, wenn Sie mit einem Dienstprinzipal bei der CLI angemeldet sind oder wenn Sie mit einem Microsoft Entra-Benutzer mit eingeschränkten Berechtigungen für die Clusterressource angemeldet sind.

  3. Überprüfen Sie mit dem folgenden Befehl, ob der benutzerdefinierte Standort erfolgreich erstellt wurde. In der Ausgabe sollte die provisioningState-Eigenschaft als Succeeded angezeigt werden. Falls nicht, führen Sie den Befehl nach einer Minute erneut aus.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Speichern Sie die benutzerdefinierte Standort-ID für den nächsten Schritt.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

Erstellen der App Service Kubernetes-Umgebung

Bevor Sie mit dem Erstellen von Apps am benutzerdefinierten Standort beginnen können, benötigen Sie eine App Service Kubernetes-Umgebung.

  1. Erstellen der App Service Kubernetes-Umgebung:

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. Überprüfen Sie mit dem folgenden Befehl, ob die App Service Kubernetes-Umgebung erfolgreich erstellt wurde. In der Ausgabe sollte die provisioningState-Eigenschaft als Succeeded angezeigt werden. Falls nicht, führen Sie den Befehl nach einer Minute erneut aus.

    az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME
    

Nächste Schritte