Condividi tramite


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 cluster Kubernetes abilitato per Azure Arc, è possibile usarlo per creare un percorso personalizzato abilitato per il servizio app abilitato 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 al servizio app, alle funzioni e alle 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 di Azure, registrarsi oggi stesso per ottenere un account gratuito.

Esaminare requisiti e limitazioni dell'anteprima pubblica. I requisiti del cluster sono particolarmente importanti.

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 principale, 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 il 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 in quanto è già gestito in Azure. I passaggi consentono di iniziare a comprendere il servizio, ma per le distribuzioni di produzione devono essere considerati come illustrativi, non prescrittivi. Vedere la Guida introduttiva: Connettere un cluster Kubernetes esistente ad Azure Arc per istruzioni generali sulla creazione di un cluster Kubernetes abilitato per Azure Arc.

  1. Creare un cluster nel 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. Connettere il cluster creato ad 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 proprietà provisioningState 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 un'area di lavoro Log Analytics non è necessaria per eseguire il servizio app in Azure Arc, è possibile 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 di 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 del servizio app, lo spazio dei nomi del cluster in cui eseguire il provisioning delle risorse e il nome per l'ambiente Kubernetes del servizio app. Scegliere un nome univoco per <kube-environment-name>, poiché fa parte del nome di dominio per l'app creata nell'ambiente Kubernetes del servizio app.

    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 del 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 parametri --configuration-settings dal comando.

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

    Parametro Descrizione
    Microsoft.CustomLocation.ServiceAccount Account del servizio che deve essere creato per la posizione personalizzata che viene 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 del servizio app che viene 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 default e 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 distribuzioni/piattaforme.
    buildService.storageAccessMode La modalità di accesso da usare con la classe di archiviazione denominata. Accetta ReadWriteOnce o ReadWriteMany.
    customConfigMap Nome della mappa di configurazione che verrà impostata dall'ambiente Kubernetes del servizio app. Attualmente deve essere <namespace>/kube-environment-config, sostituendo <namespace> con il valore di appsNamespace.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Nome del gruppo di risorse in cui risiede il cluster del Servizio Azure Kubernetes. Valido e obbligatorio solo quando il cluster sottostante è il 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 proprietà id dell'estensione del 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 del servizio app.

Crea una località personalizzata

Il percorso personalizzato in Azure viene usato per assegnare l'ambiente Kubernetes del 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 dovrebbe mostrare la proprietà provisioningState 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 del servizio app

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

  1. Creare l’ambiente Kubernetes del 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 del servizio app sia stato creato correttamente con il comando seguente. L'output dovrebbe mostrare la proprietà provisioningState 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