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.
Weitere Informationen finden Sie unter Anforderungen und Einschränkungen zur Public Preview. Besonders wichtig sind die Clusteranforderungen.
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 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.
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
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
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
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
Überprüfen Sie die Verbindung mit dem folgenden Befehl. Die
provisioningState
-Eigenschaft sollte alsSucceeded
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.
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
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
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, da 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
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 zu erstellenden benutzerdefinierten Standort erstellt werden soll. 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
oderfalse
angegeben werden.buildService.storageClassName
Der Name der Speicherklasse für den Builddienst zum Speichern von Buildartefakten. Ein Wert wie default
gibt eine Klasse namensdefault
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 benannten Speicherklasse verwendet werden soll. Für diesen Parameter kann ReadWriteOnce
oderReadWriteMany
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 vonappsNamespace
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
odernone
, wenn Sie „none“ (keine) auswählen, werden Plattformprotokolle deaktiviert.logProcessor.appLogs.logAnalyticsConfig.customerId
Nur erforderlich, wenn logProcessor.appLogs.destination
auflog-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
auflog-analytics
festgelegt ist. Der base64-codierte gemeinsam verwendete Schlüssel des Log Analytics-Arbeitsbereichs. Dieser Parameter sollte als geschützte Einstellung konfiguriert werden.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)
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.
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)
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.
Überprüfen Sie mit dem folgenden Befehl, ob der benutzerdefinierte Standort erfolgreich erstellt wurde. In der Ausgabe sollte die
provisioningState
-Eigenschaft alsSucceeded
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
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.
Erstellen der App Service Kubernetes-Umgebung:
az appservice kube create \ --resource-group $GROUP_NAME \ --name $KUBE_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID
Überprüfen Sie mit dem folgenden Befehl, ob die App Service Kubernetes-Umgebung erfolgreich erstellt wurde. In der Ausgabe sollte die
provisioningState
-Eigenschaft alsSucceeded
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