Configurare un cluster Kubernetes abilitato Azure Arc per l'esecuzione del servizio app, delle funzioni e delle app per la logica (anteprima)

Se si dispone di un cluster Kubernetes abilitato per Azure Arc, è possibile usarlo per creare un percorso personalizzato abilitato servizio app e distribuire app Web, app per le funzioni e app per la logica.

Kubernetes abilitato per Azure Arc consente di rendere visibile il cluster Kubernetes locale o cloud per servizio app, funzioni e app per la logica in Azure. È possibile creare un'app e distribuirla come un'altra area di Azure.

Prerequisiti

Se non si ha un account Azure, iscriversi subito per ottenere un account gratuito.

Aggiungere estensioni dell'interfaccia della riga di comando di Azure

Avviare l'ambiente Bash in Azure Cloud Shell.

Poiché questi comandi dell'interfaccia della riga di comando non fanno ancora parte del set di interfaccia della riga di comando di base, aggiungerli con i comandi seguenti.

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

Creare un cluster connesso

Nota

Questa esercitazione usa servizio Azure Kubernetes (servizio Azure Kubernetes) per fornire istruzioni concrete per la configurazione di un ambiente da zero. Tuttavia, per un carico di lavoro di produzione, è probabile che non si voglia abilitare Azure Arc in un cluster del servizio Azure Kubernetes perché è già gestito in Azure. I passaggi seguenti consentono di iniziare a comprendere il servizio, ma per le distribuzioni di produzione, devono essere visualizzati come illustrativi, non prescrittivi. Per istruzioni generali sulla creazione di un cluster Kubernetes abilitato per Azure Arc, vedere Avvio rapido: Connessione un cluster Kubernetes esistente.

  1. Creare un cluster in servizio Azure Kubernetes con un indirizzo IP pubblico. Sostituire <group-name> con il nome del gruppo di risorse desiderato.

    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. Ottenere il file kubeconfig e testare la connessione al cluster. Per impostazione predefinita, il file kubeconfig viene salvato in ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Creare un gruppo di risorse per contenere le risorse di Azure Arc. Sostituire <group-name> con il nome del gruppo di risorse desiderato.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_LOCATION
    
  4. Connessione il cluster creato 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. Convalidare la connessione con il comando seguente. Dovrebbe visualizzare la provisioningState proprietà come Succeeded. In caso contrario, eseguire di nuovo il comando dopo un minuto.

    az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
    

Creare un'area di lavoro Log Analytics

Anche se non è necessaria un'area di lavoro Log Analytics per eseguire servizio app in Azure Arc, gli sviluppatori possono ottenere i log delle applicazioni per le app in esecuzione nel cluster Kubernetes abilitato per Azure Arc.

  1. Per semplicità, creare ora l'area di lavoro.

    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. Eseguire i comandi seguenti per ottenere l'ID dell'area di lavoro codificata e la chiave condivisa per un'area di lavoro Log Analytics esistente. Sono necessari nel passaggio successivo.

    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
    

Installare l'estensione Servizio app

  1. Impostare le variabili di ambiente seguenti per il nome desiderato dell'estensione servizio app, lo spazio dei nomi del cluster in cui eseguire il provisioning delle risorse e il nome dell'ambiente Kubernetes servizio app. Scegliere un nome univoco per <kube-environment-name>perché farà parte del nome di dominio per l'app creata nell'ambiente servizio app Kubernetes.

    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. Installare l'estensione servizio app nel cluster connesso ad Azure Arc, con Log Analytics abilitato. Anche in questo caso, anche se Log Analytics non è necessario, non è possibile aggiungerlo all'estensione in un secondo momento, quindi è più facile farlo ora.

    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}"
    

    Nota

    Per installare l'estensione senza l'integrazione di Log Analytics, rimuovere gli ultimi tre --configuration-settings parametri dal comando .

    Nella tabella seguente vengono descritti i vari --configuration-settings parametri durante l'esecuzione del comando :

    Parametro Descrizione
    Microsoft.CustomLocation.ServiceAccount Account del servizio che deve essere creato per la posizione personalizzata che verrà creata. È consigliabile impostare questo valore sul valore default.
    appsNamespace Spazio dei nomi per il provisioning delle definizioni e dei pod dell'app. Deve corrispondere a quello dello spazio dei nomi della versione dell'estensione.
    clusterName Nome dell'ambiente Kubernetes servizio app che verrà creato in base a questa estensione.
    keda.enabled Indica se KEDA deve essere installato nel cluster Kubernetes. Accetta true o false.
    buildService.storageClassName Nome della classe di archiviazione per il servizio di compilazione in cui archiviare gli artefatti di compilazione. Un valore come default specifica una classe denominata defaulte non qualsiasi classe contrassegnata come predefinita. Il valore predefinito è una classe di archiviazione valida per il servizio Azure Kubernetes e il servizio Azure Kubernetes HCI, ma potrebbe non essere per altre istruzioni/piattaforme.
    buildService.storageAccessMode Modalità di accesso da usare con la classe di archiviazione denominata precedente. Accetta ReadWriteOnce o ReadWriteMany.
    customConfigMap Nome della mappa di configurazione che verrà impostata dall'ambiente Kubernetes servizio app. Attualmente deve essere <namespace>/kube-environment-config, sostituendo <namespace> con il valore precedente appsNamespace .
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Nome del gruppo di risorse in cui risiede il cluster servizio Azure Kubernetes. Valido e obbligatorio solo quando il cluster sottostante è servizio Azure Kubernetes.
    logProcessor.appLogs.destination Facoltativo. Accetta log-analytics o none, scegliendo nessuno disabilita i log della piattaforma.
    logProcessor.appLogs.logAnalyticsConfig.customerId Obbligatorio solo quando logProcessor.appLogs.destination è impostato su log-analytics. ID dell'area di lavoro Log Analytics con codifica base64. Questo parametro deve essere configurato come impostazione protetta.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Obbligatorio solo quando logProcessor.appLogs.destination è impostato su log-analytics. Chiave condivisa dell'area di lavoro Log Analytics con codifica Base64. Questo parametro deve essere configurato come impostazione protetta.
  3. Salvare la id proprietà dell'estensione servizio app per un secondo momento.

    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. Attendere che l'estensione venga installata completamente prima di procedere. È possibile attendere la sessione del terminale fino al completamento eseguendo il comando seguente:

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

È possibile usare kubectl per visualizzare i pod creati nel cluster Kubernetes:

kubectl get pods -n $NAMESPACE

Per altre informazioni su questi pod e sul relativo ruolo nel sistema, vedere Pod creati dall'estensione servizio app.

Creare un percorso personalizzato

La posizione personalizzata in Azure viene usata per assegnare l'ambiente Kubernetes servizio app.

  1. Impostare le variabili di ambiente seguenti per il nome desiderato della posizione personalizzata e per l'ID del cluster connesso ad Azure Arc.

    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. Creare la posizione personalizzata:

    az customlocation create \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --host-resource-id $CONNECTED_CLUSTER_ID \
        --namespace $NAMESPACE \ 
        --cluster-extension-ids $EXTENSION_ID
    

    Nota

    Se si verificano problemi durante la creazione di una posizione personalizzata nel cluster, potrebbe essere necessario abilitare la funzionalità di posizione personalizzata nel cluster. Questa operazione è necessaria se si è connessi all'interfaccia della riga di comando usando un'entità servizio o se si è connessi con un utente Di Microsoft Entra con autorizzazioni limitate per la risorsa cluster.

  3. Verificare che il percorso personalizzato sia stato creato correttamente con il comando seguente. L'output deve visualizzare la provisioningState proprietà come Succeeded. In caso contrario, eseguirlo di nuovo dopo un minuto.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Salvare l'ID percorso personalizzato per il passaggio successivo.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

Creare l'ambiente Kubernetes servizio app

Prima di iniziare a creare app nel percorso personalizzato, è necessario un ambiente Kubernetes servizio app.

  1. Creare l'ambiente Kubernetes servizio app:

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. Verificare che l'ambiente Kubernetes servizio app sia stato creato correttamente con il comando seguente. L'output deve visualizzare la provisioningState proprietà come Succeeded. In caso contrario, eseguirlo di nuovo dopo un minuto.

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

Passaggi successivi