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.

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 onderstaande stappen helpen u om inzicht te krijgen in de service, maar voor productie-implementaties moeten ze worden weergegeven als illustratief, niet prescriptief. Zie quickstart: Verbinding maken een bestaand Kubernetes-cluster naar Azure Arc voor algemene instructies over het maken van een Kubernetes-cluster met Azure Arc.

  1. 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
    
  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 $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. 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
    
  4. Verbinding maken het cluster dat u hebt gemaakt in Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Valideer de verbinding met de volgende opdracht. De eigenschap moet worden weergegeven provisioningState als Succeeded. 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.

  1. 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
    
  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 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

  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 <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
    
  2. 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 wordt gemaakt op basis van deze extensie.
    keda.enabled Of KEDA moet worden geïnstalleerd op het Kubernetes-cluster. true Accepteert of false.
    buildService.storageClassName De naam van de opslagklasse voor de buildservice voor het opslaan van buildartefacten. Een waarde zoals default een klasse met de naam defaulten 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 die moet worden gebruikt met de bovenstaande opslagklasse. ReadWriteOnce Accepteert of ReadWriteMany.
    customConfigMap De naam van de configuratietoewijzing die wordt ingesteld door de App Service Kubernetes-omgeving. Op dit moment moet deze worden <namespace>/kube-environment-configvervangen door <namespace> de bovenstaande waarde appsNamespace .
    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 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 als logProcessor.appLogs.destination deze is ingesteld op log-analytics. De gedeelde sleutel van de Met Base64 gecodeerde Log Analytics-werkruimte. Deze parameter moet worden geconfigureerd als een beveiligde instelling.
  3. 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)
    
  4. 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.

  1. 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)
    
  2. 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.

  3. Controleer of de aangepaste locatie is gemaakt met de volgende opdracht. De uitvoer moet de provisioningState eigenschap weergeven als Succeeded. Zo niet, voer het na een minuut opnieuw uit.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. 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.

  1. Maak de App Service Kubernetes-omgeving:

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. Controleer of de App Service Kubernetes-omgeving is gemaakt met de volgende opdracht. De uitvoer moet de provisioningState eigenschap weergeven als Succeeded. Zo niet, voer het na een minuut opnieuw uit.

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

Volgende stappen