Een Kubernetes-cluster met ondersteuning voor Azure Arc configureren voor het uitvoeren van App Service, Functions en Logic Apps (preview)

Als u een Kubernetes-clustermet Azure Arc-functionaliteit hebt, kunt u dit gebruiken om een aangepaste locatie met App Service-functionaliteit te maken en er web-apps, functie-apps en logische apps in te implementeren.

Azure Arc Kubernetes-functionaliteit kunt u uw on-premises kubernetes- of cloudcluster zichtbaar maken voor App Service, Functions en Logic Apps in Azure. U kunt een app maken en erop implementeren, net als in een andere Azure-regio.

Vereisten

Als u geen Azure-account hebt, kunt u zich vandaag registreren voor een gratis account.

Azure CLI-extensies toevoegen

Start de Bash-omgeving in Azure Cloud Shell.

Cloud Shell starten in een nieuw venster

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 Azure Kubernetes Service (AKS) gebruikt om concrete instructies te geven voor het instellen van een nieuwe omgeving. Voor een productieworkload wilt u echter waarschijnlijk geen Azure Arc inschakelen op een AKS-cluster, omdat het al wordt beheerd in Azure. De onderstaande stappen helpen u aan de slag te gaan met het begrijpen van de service, maar voor productie-implementaties moeten ze worden gezien als illustratief, niet als prescriptief. Zie Quickstart: Verbinding maken kubernetes-cluster maken met Azure Arc voor algemene instructies over het maken van een Kubernetes-cluster Azure Arc kubernetes-cluster met ingeschakelde toegang.

  1. Maak een cluster in Azure Kubernetes Service met een openbaar IP-adres. Vervang <group-name> door de naam van de resourcegroep die u wilt gebruiken.

    aksClusterGroupName="<group-name>" # Name of resource group for the AKS cluster
    aksName="${aksClusterGroupName}-aks" # Name of the AKS cluster
    resourceLocation="eastus" # "eastus" or "westeurope"
    
    az group create -g $aksClusterGroupName -l $resourceLocation
    az aks create --resource-group $aksClusterGroupName --name $aksName --enable-aad --generate-ssh-keys
    infra_rg=$(az aks show --resource-group $aksClusterGroupName --name $aksName --output tsv --query nodeResourceGroup)
    
  2. 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 $aksClusterGroupName --name $aksName --admin
    
    kubectl get ns
    
  3. Maak een resourcegroep voor uw Azure Arc resources. Vervang <group-name> door de naam van de resourcegroep die u wilt gebruiken.

    groupName="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $groupName -l $resourceLocation
    
  4. Verbinding maken cluster dat u hebt gemaakt voor Azure Arc.

    clusterName="${groupName}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $groupName --name $clusterName
    
  5. Valideer de verbinding met de volgende opdracht. De eigenschap moet provisioningState worden weer geven als Succeeded . Zo niet, voer de opdracht na een minuut opnieuw uit.

    az connectedk8s show --resource-group $groupName --name $clusterName
    

Een Log Analytics-werkruimte maken

Hoewel een Log Analytic-werkruimte niet vereist is om App Service uit te voeren in Azure Arc, kunnen ontwikkelaars op deze manier toepassingslogboeken downloaden voor hun apps die worden uitgevoerd in het Kubernetes-cluster met Azure Arc-functie.

  1. Maak de werkruimte nu om het eenvoudig te houden.

    workspaceName="$groupName-workspace" # Name of the Log Analytics workspace
    
    az monitor log-analytics workspace create \
        --resource-group $groupName \
        --workspace-name $workspaceName
    
  2. 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 in de volgende stap nodig.

    logAnalyticsWorkspaceId=$(az monitor log-analytics workspace show \
        --resource-group $groupName \
        --workspace-name $workspaceName \
        --query customerId \
        --output tsv)
    logAnalyticsWorkspaceIdEnc=$(printf %s $logAnalyticsWorkspaceId | base64 -w0) # Needed for the next step
    logAnalyticsKey=$(az monitor log-analytics workspace get-shared-keys \
        --resource-group $groupName \
        --workspace-name $workspaceName \
        --query primarySharedKey \
        --output tsv)
    logAnalyticsKeyEnc=$(printf %s $logAnalyticsKey | base64 -w0) # Needed for the next step
    

De extensie App Service installeren

  1. 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 , omdat deze deel zal uitmaken van de domeinnaam voor de app die is gemaakt <kube-environment-name> in App Service Kubernetes-omgeving.

    extensionName="appservice-ext" # Name of the App Service extension
    namespace="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    kubeEnvironmentName="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  2. Installeer de App Service-extensie op uw Azure Arc verbonden cluster, met Log Analytics ingeschakeld. Hoewel Log Analytics niet vereist is, kunt u deze later niet meer toevoegen aan de extensie, dus het is nu eenvoudiger om dit te doen.

    az k8s-extension create \
        --resource-group $groupName \
        --name $extensionName \
        --cluster-type connectedClusters \
        --cluster-name $clusterName \
        --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=${kubeEnvironmentName}" \
        --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" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${logAnalyticsWorkspaceIdEnc}" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${logAnalyticsKeyEnc}"
    

    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 Beschrijving
    Microsoft.CustomLocation.ServiceAccount Het serviceaccount dat moet worden gemaakt voor de aangepaste locatie die wordt gemaakt. Het wordt aanbevolen om deze in te stellen op de waarde default .
    appsNamespace De naamruimte voor het inrichten van de app-definities en pods. Moet overeenkomen met die van de naamruimte van de extensie-release.
    clusterName De naam van de App Service Kubernetes-omgeving die wordt gemaakt voor deze extensie.
    keda.enabled Of KEDA moet worden geïnstalleerd op het Kubernetes-cluster. Accepteert true of false .
    buildService.storageClassName De naam van de opslagklasse voor de buildservice voor het opslaan van buildartefacten. Een waarde zoals default geeft een klasse met de naam op en geen klasse die als standaard is default gemarkeerd. Standaard is een geldige opslagklasse voor AKS en AKS HCI, maar dit is mogelijk niet voor andere distrubtions/platforms.
    buildService.storageAccessMode De toegangsmodus die moet worden gebruikt met de hierboven genoemde opslagklasse. Accepteert ReadWriteOnce of ReadWriteMany .
    customConfigMap De naam van de configuratiekaart die wordt ingesteld door de App Service Kubernetes-omgeving. Op dit moment moet deze <namespace>/kube-environment-config zijn, vervangen <namespace> door de bovenstaande appsNamespace waarde.
    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 is Azure Kubernetes Service.
    logProcessor.appLogs.destination Optioneel. Accepteert log-analytics of , als u geen none kiest, worden platformlogboeken uitgeschakeld.
    logProcessor.appLogs.logAnalyticsConfig.customerId Alleen vereist wanneer logProcessor.appLogs.destination is ingesteld op log-analytics . De met base64 gecodeerde Log Analytics-werkruimte-id. Deze parameter moet worden geconfigureerd als een beveiligde instelling.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Alleen vereist wanneer logProcessor.appLogs.destination is ingesteld op log-analytics . De met base64 gecodeerde gedeelde sleutel van de Log Analytics-werkruimte. Deze parameter moet worden geconfigureerd als een beveiligde instelling.
  3. Sla de id eigenschap van de App Service voor later gebruik op.

    extensionId=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $clusterName \
        --resource-group $groupName \
        --name $extensionName \
        --query id \
        --output tsv)
    
  4. Wacht tot de extensie volledig is geïnstalleerd voordat u doorgaat. U kunt uw terminalsessie laten wachten tot dit is voltooid door de volgende opdracht uit te voeren:

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

U kunt gebruiken kubectl om de pods te zien die in uw Kubernetes-cluster zijn gemaakt:

kubectl get pods -n $namespace

Meer informatie over deze pods en hun rol in het systeem vindt u in Pods die door de extensie App Service gemaakt.

Een aangepaste locatie maken

De aangepaste locatie in Azure wordt gebruikt om de kubernetes-App Service toe te wijzen.

  1. Stel de volgende omgevingsvariabelen in voor de gewenste naam van de aangepaste locatie en voor de id van Azure Arc verbonden cluster.

    customLocationName="my-custom-location" # Name of the custom location
    
    connectedClusterId=$(az connectedk8s show --resource-group $groupName --name $clusterName --query id --output tsv)
    
  2. Maak de aangepaste locatie:

    az customlocation create \
        --resource-group $groupName \
        --name $customLocationName \
        --host-resource-id $connectedClusterId \
        --namespace $namespace \
        --cluster-extension-ids $extensionId
    
  3. Controleer of de aangepaste locatie is gemaakt met de volgende opdracht. In de uitvoer moet de provisioningState eigenschap worden weer geven als Succeeded . Zo niet, voer deze na een minuut opnieuw uit.

    az customlocation show --resource-group $groupName --name $customLocationName
    
  4. Sla de aangepaste locatie-id op voor de volgende stap.

    customLocationId=$(az customlocation show \
        --resource-group $groupName \
        --name $customLocationName \
        --query id \
        --output tsv)
    

De Kubernetes App Service omgeving maken

Voordat u kunt beginnen met het maken van apps op de aangepaste locatie, hebt u een App Service Kubernetes-omgeving nodig.

  1. Maak de App Service Kubernetes-omgeving:

    az appservice kube create \
        --resource-group $groupName \
        --name $kubeEnvironmentName \
        --custom-location $customLocationId 
    
  2. Controleer of de App Service Kubernetes-omgeving is gemaakt met de volgende opdracht. In de uitvoer moet de provisioningState eigenschap worden weer geven als Succeeded . Als dat niet het zo is, moet u deze na een minuut opnieuw uitvoeren.

    az appservice kube show --resource-group $groupName --name $kubeEnvironmentName
    

Volgende stappen