Tutorial: Aktivieren von Azure Container Apps in Kubernetes mit Azure Arc-Unterstützung (Vorschau)
Mit Kubernetes-Clustern mit Azure Arc-Unterstützung können Sie einen für Container Apps aktivierten benutzerdefinierten Speicherort in Ihrem lokalen oder Cloud-Kubernetes-Cluster erstellen, um Ihre Azure Container Apps-Anwendungen wie in jeder anderen Region bereitzustellen.
In diesem Tutorial erfahren Sie, wie Sie Azure Container Apps in Ihrem Kubernetes-Cluster mit Arc-Unterstützung aktivieren. In diesem Lernprogramm führen Sie folgende Schritte aus:
- Erstellen Sie einen verbundenen Cluster.
- Erstellen Sie einen Log Analytics-Arbeitsbereich.
- Installieren Sie die Container Apps-Erweiterung.
- Erstellen eines benutzerdefinierten Standorts.
- Erstellen Sie die verbundene Azure Container Apps-Umgebung.
Hinweis
Während der Vorschauphase werden Azure Container Apps in Arc nicht in Produktionskonfigurationen unterstützt. Dieser Artikel enthält eine Beispielkonfiguration zu reinen Evaluierungszwecken.
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 eventuell nicht in einem AKS-Cluster aktivieren, da er bereits in Azure verwaltet wird.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement.
- Falls Sie keins haben, können Sie kostenlos eins erstellen.
- Installieren Sie die Azure CLI.
- Zugriff auf eine öffentliche oder private Containerregistrierung, z. B. Azure Container Registry.
- Weitere Informationen finden Sie unter Anforderungen und Einschränkungen zur Public Preview. Besonders wichtig sind die Clusteranforderungen.
Setup
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.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
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.
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
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.
az group create --name $GROUP_NAME --location $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
Ein Log Analytics-Arbeitsbereich bietet Zugriff auf Protokolle für Container Apps-Anwendungen, die im Kubernetes-Cluster mit Azure Arc-Unterstützung ausgeführt werden. Ein Log Analytics-Arbeitsbereich ist optional, wird aber empfohlen.
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
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 Container Apps-Erweiterung
Wichtig
Stellen Sie bei der Bereitstellung auf AKS-HCI sicher, dass Sie HAProxy oder einen benutzerdefinierte Lastenausgleich eingerichtet haben, bevor Sie versuchen, die Erweiterung zu installieren.
Legen Sie die folgenden Umgebungsvariablen auf den gewünschten Namen der Container Apps-Erweiterung, den Clusternamespace, in dem Ressourcen bereitgestellt werden sollen, und den Namen für die verbundene Azure Container Apps-Umgebung fest. Wählen Sie für
<connected-environment-name>
einen eindeutigen Namen aus. Der Name der verbundenen Umgebung ist Bestandteil des Domänennamens für die App, die Sie in der verbundenen Azure Container Apps-Umgebung erstellen.EXTENSION_NAME="appenv-ext" NAMESPACE="appplat-ns" CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
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 "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${AKS_CLUSTER_GROUP_NAME}" \ --configuration-settings "logProcessor.appLogs.destination=log-analytics" \ --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \ --configuration-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 für den benutzerdefinierten Speicherort erstellte Dienstkonto. Es wird empfohlen, es auf den Wert default
festzulegen.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 der Container Apps-Erweiterung, die für diese Erweiterung erstellt wird. logProcessor.appLogs.destination
Optional. Ziel für Anwendungsprotokolle. 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.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. 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)
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.provisioningState!='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 Übersicht über Azure Arc.
Erstellen eines benutzerdefinierten Standorts
Der benutzerdefinierte Speicherort ist ein Azure-Speicherort, den Sie der verbundenen Azure Container Apps-Umgebung zuweisen.
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)
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. Wenn 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 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.
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
Überprüfen Sie mit dem folgenden Befehl, ob die verbundene Container Apps-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 containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME