Een Kubernetes-cluster met ondersteuning voor Azure Arc configureren voor het uitvoeren van App Service, Functions en Logic Apps (preview)
Als u een Kubernetes-cluster met Azure Arc hebt, kunt u dit gebruiken om een aangepaste locatie voor App Service te maken en web-apps, functie-apps en logische apps erop te implementeren.
Met Kubernetes met Azure Arc kunt u uw on-premises of cloud Kubernetes-cluster zichtbaar maken voor App Service, Functions en Logic Apps in Azure. U kunt een app maken en er net als een andere Azure-regio naar implementeren.
Vereisten
Als u geen Azure-account hebt, meldt u zich vandaag aan voor een gratis account.
Bekijk de vereisten en beperkingen van de openbare preview. Van bijzonder belang zijn de clustervereisten.
Azure CLI-extensies toevoegen
Start de Bash-omgeving in Azure Cloud Shell.
Omdat deze CLI-opdrachten nog geen deel uitmaken van de cli-kernset, voegt u deze toe met de volgende opdrachten.
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
Een verbonden cluster maken
Notitie
In deze zelfstudie wordt gebruikgemaakt van Azure Kubernetes Service (AKS) om concrete instructies te bieden voor het instellen van een volledig nieuwe omgeving. Voor een productieworkload wilt u Azure Arc waarschijnlijk niet inschakelen op een AKS-cluster omdat deze al wordt beheerd in Azure. De stappen helpen u om aan de slag te gaan met het begrijpen van de service, maar voor productie-implementaties moeten ze worden weergegeven als illustratief, niet prescriptief. Zie quickstart: Een bestaand Kubernetes-cluster verbinden met Azure Arc voor algemene instructies over het maken van een Kubernetes-cluster met Azure Arc.
Maak een cluster in Azure Kubernetes Service met een openbaar IP-adres. Vervang door
<group-name>
de gewenste resourcegroepnaam.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
Haal het kubeconfig-bestand op en test de verbinding met het cluster. Standaard wordt het kubeconfig-bestand opgeslagen in
~/.kube/config
.az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin kubectl get ns
Maak een resourcegroep die uw Azure Arc-resources bevat. Vervang door
<group-name>
de gewenste resourcegroepnaam.GROUP_NAME="<group-name>" # Name of resource group for the connected cluster az group create -g $GROUP_NAME -l $RESOURCE_LOCATION
Verbind het cluster dat u hebt gemaakt met Azure Arc.
CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
Valideer de verbinding met de volgende opdracht. De eigenschap moet worden weergegeven
provisioningState
alsSucceeded
. Als dat niet het is, voert u de opdracht na een minuut opnieuw uit.az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
Een Log Analytics-werkruimte maken
Hoewel een Log Analytics-werkruimte niet vereist is om App Service uit te voeren in Azure Arc, kunnen ontwikkelaars toepassingslogboeken ophalen voor hun apps die worden uitgevoerd in het Kubernetes-cluster met Azure Arc.
Maak nu de werkruimte ter vereenvoudiging.
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
Voer de volgende opdrachten uit om de gecodeerde werkruimte-id en gedeelde sleutel voor een bestaande Log Analytics-werkruimte op te halen. U hebt ze nodig in de volgende stap.
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
De App Service-extensie installeren
Stel de volgende omgevingsvariabelen in voor de gewenste naam van de App Service-extensie, de clusternaamruimte waarin resources moeten worden ingericht en de naam voor de App Service Kubernetes-omgeving. Kies een unieke naam voor
<kube-environment-name>
, omdat deze deel uitmaakt van de domeinnaam voor de app die is gemaakt in de App Service Kubernetes-omgeving.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
Installeer de App Service-extensie op uw met Azure Arc verbonden cluster, waarbij Log Analytics is ingeschakeld. Nogmaals, hoewel Log Analytics niet vereist is, kunt u deze later niet toevoegen aan de extensie, dus het is nu eenvoudiger om dit te doen.
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}"
Notitie
Als u de extensie wilt installeren zonder Log Analytics-integratie, verwijdert u de laatste drie
--configuration-settings
parameters uit de opdracht.In de volgende tabel worden de verschillende
--configuration-settings
parameters beschreven bij het uitvoeren van de opdracht:Parameter Description Microsoft.CustomLocation.ServiceAccount
Het serviceaccount dat moet worden gemaakt voor de aangepaste locatie die wordt gemaakt. Het wordt aanbevolen om dit in te stellen op de waarde default
.appsNamespace
De naamruimte voor het inrichten van de app-definities en -pods. Moet overeenkomen met de naamruimte van de extensierelease. clusterName
De naam van de App Service Kubernetes-omgeving die is gemaakt op basis van deze extensie. keda.enabled
Of KEDA moet worden geïnstalleerd op het Kubernetes-cluster. true
Accepteert offalse
.buildService.storageClassName
De naam van de opslagklasse voor de buildservice voor het opslaan van buildartefacten. Een waarde zoals default
een klasse met de naamdefault
en geen klasse die als standaard is gemarkeerd. Standaard is een geldige opslagklasse voor AKS en AKS HCI, maar dit is mogelijk niet voor andere distrubtions/platforms.buildService.storageAccessMode
De toegangsmodus voor gebruik met de benoemde opslagklasse. ReadWriteOnce
Accepteert ofReadWriteMany
.customConfigMap
De naam van de configuratietoewijzing die wordt ingesteld door de App Service Kubernetes-omgeving. Op dit moment moet het zijn <namespace>/kube-environment-config
, vervangen<namespace>
door de waarde vanappsNamespace
.envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group
De naam van de resourcegroep waarin het Azure Kubernetes Service-cluster zich bevindt. Geldig en alleen vereist wanneer het onderliggende cluster Azure Kubernetes Service is. logProcessor.appLogs.destination
Optioneel. log-analytics
Accepteert ofnone
, als u geen kiest, worden platformlogboeken uitgeschakeld.logProcessor.appLogs.logAnalyticsConfig.customerId
Alleen vereist als logProcessor.appLogs.destination
deze is ingesteld oplog-analytics
. De met Base64 gecodeerde Log Analytics-werkruimte-id. Deze parameter moet worden geconfigureerd als een beveiligde instelling.logProcessor.appLogs.logAnalyticsConfig.sharedKey
Alleen vereist als logProcessor.appLogs.destination
deze is ingesteld oplog-analytics
. De gedeelde sleutel van de Met Base64 gecodeerde Log Analytics-werkruimte. Deze parameter moet worden geconfigureerd als een beveiligde instelling.Sla de
id
eigenschap van de App Service-extensie op voor later gebruik.EXTENSION_ID=$(az k8s-extension show \ --cluster-type connectedClusters \ --cluster-name $CLUSTER_NAME \ --resource-group $GROUP_NAME \ --name $EXTENSION_NAME \ --query id \ --output tsv)
Wacht tot de extensie volledig is geïnstalleerd voordat u doorgaat. U kunt uw terminalsessie laten wachten totdat dit is voltooid door de volgende opdracht uit te voeren:
az resource wait --ids $EXTENSION_ID --custom "properties.installState!='Pending'" --api-version "2020-07-01-preview"
U kunt de kubectl
pods zien die zijn gemaakt in uw Kubernetes-cluster:
kubectl get pods -n $NAMESPACE
Meer informatie over deze pods en hun rol in het systeem vindt u in pods die zijn gemaakt door de App Service-extensie.
Een aangepaste locatie maken
De aangepaste locatie in Azure wordt gebruikt om de App Service Kubernetes-omgeving toe te wijzen.
Stel de volgende omgevingsvariabelen in voor de gewenste naam van de aangepaste locatie en voor de id van het met Azure Arc verbonden cluster.
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)
Maak de aangepaste locatie:
az customlocation create \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --host-resource-id $CONNECTED_CLUSTER_ID \ --namespace $NAMESPACE \ --cluster-extension-ids $EXTENSION_ID
Notitie
Als u problemen ondervindt met het maken van een aangepaste locatie in uw cluster, moet u mogelijk de functie voor aangepaste locatie inschakelen in uw cluster. Dit is vereist als u bent aangemeld bij de CLI met behulp van een service-principal of als u bent aangemeld met een Microsoft Entra-gebruiker met beperkte machtigingen voor de clusterresource.
Controleer of de aangepaste locatie is gemaakt met de volgende opdracht. De uitvoer moet de
provisioningState
eigenschap weergeven alsSucceeded
. Zo niet, voer het na een minuut opnieuw uit.az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
Sla de aangepaste locatie-id op voor de volgende stap.
CUSTOM_LOCATION_ID=$(az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query id \ --output tsv)
De App Service Kubernetes-omgeving maken
Voordat u apps op de aangepaste locatie kunt maken, hebt u een App Service Kubernetes-omgeving nodig.
Maak de App Service Kubernetes-omgeving:
az appservice kube create \ --resource-group $GROUP_NAME \ --name $KUBE_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID
Controleer of de App Service Kubernetes-omgeving is gemaakt met de volgende opdracht. De uitvoer moet de
provisioningState
eigenschap weergeven alsSucceeded
. Zo niet, voer het na een minuut opnieuw uit.az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME