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.
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
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
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
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
Convalidare la connessione con il comando seguente. Dovrebbe visualizzare la proprietà
provisioningState
comeSucceeded
. 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.
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
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
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
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
ofalse
.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 denominatadefault
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
oReadWriteMany
.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 diappsNamespace
.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
onone
, scegliendo nessuno disabilita i log della piattaforma.logProcessor.appLogs.logAnalyticsConfig.customerId
Obbligatorio solo quando logProcessor.appLogs.destination
è impostato sulog-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 sulog-analytics
. Chiave condivisa dell'area di lavoro Log Analytics con codifica Base64. Questo parametro deve essere configurato come impostazione protetta.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)
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.
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)
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.
Verificare che il percorso personalizzato sia stato creato correttamente con il comando seguente. L'output dovrebbe mostrare la proprietà
provisioningState
comeSucceeded
. In caso contrario, eseguirlo di nuovo dopo un minuto.az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
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.
Creare l’ambiente Kubernetes del servizio app:
az appservice kube create \ --resource-group $GROUP_NAME \ --name $KUBE_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID
Verificare che l’ambiente Kubernetes del servizio app sia stato creato correttamente con il comando seguente. L'output dovrebbe mostrare la proprietà
provisioningState
comeSucceeded
. In caso contrario, eseguirlo di nuovo dopo un minuto.az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME