Esercitazione: Abilitare le App contenitore di Azure in Kubernetes abilitato per Azure Arc

Questo tutorial prepara un cluster Kubernetes supportato per eseguire App contenitore di Azure. Crea un cluster Kubernetes abilitato ad Azure Arc, installa l'estensione Container Apps, crea una posizione personalizzata e crea un ambiente connesso a Container Apps.

Completare questo tutorial cambia sia il tuo abbonamento Azure che il tuo cluster Kubernetes. Hai bisogno dei permessi Azure per creare le risorse elencate e l'accesso da amministratore del cluster al cluster Kubernetes.

Questo tutorial mostra come abilitare App contenitore di Azure su un cluster Kubernetes abilitato per Azure Arc. In questa esercitazione, farai:

  • Collega un cluster Kubernetes ad Azure Arc, se non è già collegato.
  • Opzionalmente, crea uno spazio di lavoro Log Analytics.
  • Installa e convalida l'estensione Container Apps.
  • Crea e convalida una posizione personalizzata.
  • Crea e convalida un ambiente connesso a Container Apps.

Prima di iniziare, consulta App contenitore di Azure su Azure Arc. Se una risorsa o un componente in-cluster non diventa pronto, consulta Troubleshoot App contenitore di Azure on Azure Arc-enabled Kubernetes.

Prerequisiti

Prima di iniziare, verifica i seguenti requisiti:

  • Un account Azure con una sottoscrizione attiva. Se non ne hai uno, crearne uno gratuitamente.
  • Permesso di registrare fornitori di risorse e creare gruppi di risorse, una risorsa Kubernetes abilitata per Azure Arc, un'estensione del cluster, una posizione personalizzata, un ambiente connesso a Container Apps e, opzionalmente, uno spazio di lavoro Log Analytics.
  • L'interfaccia della riga di comando di Azure e i suoi prerequisiti.
  • Una versione kubectl compatibile con il tuo cluster Kubernetes e l'accesso di rete dalla tua workstation al server API di Kubernetes.
  • Un cluster Kubernetes supportato con nodi di lavoro Linux amd64 e accesso come amministratore del cluster tramite il contesto attivo kubectl.
  • Un'implementazione funzionante del servizio Kubernetes LoadBalancer .
  • Connettività in uscita verso gli endpoint richiesti da Azure Arc e Container Apps.
  • CPU e memoria allocabili sufficienti per i carichi di lavoro di estensione e applicazione.

Prima di modificare un cluster di produzione, consulta Pianificare una distribuzione di Container Apps in Kubernetes abilitato per Azure Arc.

Configurazione

Installare le estensioni dell'interfaccia della riga di comando di Azure seguenti.

az extension add --name connectedk8s --upgrade --yes
az extension add --name k8s-extension --upgrade --yes
az extension add --name customlocation --upgrade --yes
az extension add --name containerapp --upgrade --yes

Registrare gli spazi dei nomi necessari.

az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az provider register --namespace Microsoft.App --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.OperationalInsights --wait

Impostare le variabili di ambiente in base alla distribuzione del cluster Kubernetes.

GROUP_NAME="my-arc-cluster-group"
AKS_CLUSTER_GROUP_NAME="my-aks-cluster-group"
AKS_NAME="my-aks-cluster"
LOCATION="eastus"

Creare un cluster connesso

Se hai già un cluster Kubernetes supportato per Azure Arc in $GROUP_NAME, non creare un altro cluster. Imposta CLUSTER_NAME il nome della risorsa del cluster connesso esistente, verifica l'accesso con kubectl get nodes, e continua a creare uno spazio di lavoro Log Analytics.

I passaggi seguenti creano un cluster AKS e collegalo ad Azure Arc. Questo percorso è pensato solo come ambiente di valutazione ospitato su Azure per il tutorial. Per un cluster on-premises o multicloud esistente, segui Quickstart: Collega un cluster Kubernetes esistente ad Azure Arc, e poi torna a questo tutorial.

  1. Creare un cluster nel Servizio Azure Kubernetes.

    az group create --name $AKS_CLUSTER_GROUP_NAME --location $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.

    az group create --name $GROUP_NAME --location $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. Attendi che il cluster connesso completi il provisioning.

    CONNECTED_CLUSTER_ID=$(az connectedk8s show \
        --resource-group $GROUP_NAME \
        --name $CLUSTER_NAME \
        --query id \
        --output tsv)
    
    az resource wait --ids $CONNECTED_CLUSTER_ID --created --timeout 600
    
    az connectedk8s show \
        --resource-group $GROUP_NAME \
        --name $CLUSTER_NAME \
        --query "{State:provisioningState,Connectivity:connectivityStatus}" \
        --output table
    

    Continua solo quando State è Succeeded e Connectivity è Connected. Se il comando va in timeout, consulta Il cluster connesso non è pronto.

Creare un'area di lavoro Log Analytics

Un workspace Log Analytics fornisce accesso ai log delle applicazioni per le Container Apps che girano nel cluster Kubernetes abilitato per Azure Arc. Uno spazio di lavoro Log Analytics è opzionale ma consigliato per la diagnostica applicativa.

Importante

Decidi se usare Log Analytics prima di installare l'estensione Container Apps. Fornisci la configurazione di Log Analytics durante l'installazione dell'estensione. Non puoi aggiungere la configurazione di Log Analytics a quell'istanza di estensione in seguito.

  1. Creare un'area di lavoro Log Analytics.

    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.

    Caution

    La chiave condivisa dello spazio di lavoro è una credenziali. Non stamparlo, non salvarlo nel controllo del codice sorgente, non salvarlo nella cronologia della shell e non includerlo nei pacchetti di supporto. I seguenti comandi lo mantengono in una variabile shell e lo passano ad Azure come impostazione di estensione protetta.

    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
    

Verifica se esiste già un'installazione di KEDA

L'estensione Container Apps installa KEDA. Prima di installare l'estensione, controlla il cluster per componenti KEDA esistenti:

kubectl get deployments -A -o custom-columns="NAMESPACE:.metadata.namespace,NAME:.metadata.name"
kubectl get crd scaledobjects.keda.sh

Ispeziona la lista di distribuzione per i componenti KEDA. Se uno dei comandi identifica un'installazione KEDA esistente, fermarsi e confermare la configurazione di coesistenza supportata prima di continuare. Non rimuovere l'installazione KEDA esistente né applicare impostazioni di estensione non documentate perché altri carichi di lavoro potrebbero dipendere da essa.

Installare l'estensione App contenitore

Importante

Se stai distribuindo su AKS su Azure Locale, assicurati di configurare HAProxy o un bilanciatore di carico personalizzato prima di provare a installare l'estensione. Puoi anche configurare az containerapp arc setup-core-dns --distro AksAzureLocal CoreDNS per contesti locali.

  1. Imposta i nomi per l'estensione Container Apps, il suo namespace Kubernetes e l'ambiente connesso.

    • EXTENSION_NAME identifica la risorsa di estensione del cluster di Azure.
    • NAMESPACE è creato nel cluster Kubernetes e contiene componenti di estensione e risorse gestite da Container Apps. L'impostazione appsNamespace deve corrispondere esattamente allo spazio di rilascio dell'estensione.
    • CONNECTED_ENVIRONMENT_NAME diventa parte del dominio applicativo predefinito. Usa un nome compatibile con DNS, unico all'interno del gruppo di risorse.

    Non installare carichi di lavoro non correlati nello spazio delle estensioni.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Installare l'estensione di App contenitore nel cluster connesso ad Azure Arc, con Log Analytics abilitato. Il Log Analytics non può essere aggiunto all'estensione in un secondo momento.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.App.Environment' \
        --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=${CONNECTED_ENVIRONMENT_NAME}" \
        --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}"
    

    Note

    Per installare l'estensione senza integrazione con Log Analytics, rimuovere i tre parametri relativi al logging dal comando.

    Per un cluster che utilizza un bilanciatore del carico personalizzato, imposta loadBalancerIp su un indirizzo riservato per l'ingresso di Container Apps:

    --configuration-settings "loadBalancerIp=<LOAD_BALANCER_INGRESS_IP>"
    

    L'indirizzo deve essere raggiungibile dai client applicativi e non deve essere assegnato a un altro servizio. Dopo l'installazione, usa kubectl get service -n $NAMESPACE -o wide per verificare che il servizio Ingress dell'estensione riporti questo indirizzo. Configura il DNS wildcard solo dopo l’assegnazione dell’indirizzo. Vedi i requisiti DNS.

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

    Parametro Descrizione
    Microsoft.CustomLocation.ServiceAccount Account del servizio creato per il percorso personalizzato. Impostare il valore su default.
    appsNamespace Spazio dei nomi usato per creare le definizioni e le revisioni dell'app. Deve corrispondere a quello dello spazio dei nomi della versione dell'estensione.
    clusterName Nome dell'ambiente Kubernetes dell'estensione App contenitore creato in base a questa estensione.
    logProcessor.appLogs.destination Facoltativa. Destinazione per i log dell'applicazione. 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. L'ID dello spazio di lavoro Log Analytics codificato in base64. Questo parametro deve essere configurato come impostazione protetta.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Obbligatorio solo quando logProcessor.appLogs.destination è impostato su log-analytics. La chiave condivisa dello spazio di lavoro Log Analytics codificata in base64. Questo parametro deve essere configurato come impostazione protetta.
    loadBalancerIp Indirizzo IP di ingresso del bilanciatore di carico.
  3. Salvare la proprietà id dell'estensione di App contenitore 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.

    az resource wait --ids $EXTENSION_ID --created --timeout 1200
    
    az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query "{State:provisioningState,Version:currentVersion}" \
        --output table
    

    Continua solo quando State è Succeeded. Se il comando restituisce un timeout o un errore, consultare Installazione dell'estensione non riuscita o in timeout.

  5. Ispeziona i carichi di lavoro delle estensioni, i servizi e gli eventi recenti:

    kubectl get pods -n $NAMESPACE
    kubectl get services -n $NAMESPACE -o wide
    kubectl get events -n $NAMESPACE --sort-by=.lastTimestamp
    

    Non creare la località personalizzata quando un pod di estensione è in attesa, si riavvia ripetutamente o risulta inaspettatamente non pronto. Per altre informazioni su questi pod e sul relativo ruolo nel sistema, vedere Panoramica di Azure Arc.

  6. Se hai configurato Log Analytics, cancella le variabili locali che contengono la chiave dello spazio di lavoro.

    unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
    

Crea una località personalizzata

Il percorso personalizzato è una posizione di Azure assegnata all'ambiente connesso di App contenitore di Azure.

  1. Impostare le variabili di ambiente seguenti sul nome desiderato della posizione personalizzata e sull'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
    

    Note

    Se hai difficoltà a creare una posizione personalizzata nel cluster, potresti dover abilitare la funzione di localizzazione personalizzata sul cluster. Abilita questa funzione quando accedi alla CLI utilizzando un service principal o un utente Microsoft Entra con permessi limitati sulla risorsa del cluster.

  3. Attendi che la posizione personalizzata completi il provisioning e salva l'ID della risorsa.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    
    az resource wait --ids $CUSTOM_LOCATION_ID --created --timeout 600
    
    az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query "{State:provisioningState,Host:hostResourceId,Namespace:namespace}" \
        --output table
    

    Controlla che State sia Succeeded, che Host identifichi il cluster collegato desiderato e che Namespace corrisponda a $NAMESPACE. Se il provisioning non riesce, vedere Creazione della posizione personalizzata non riuscita.

Creare l'ambiente connesso di App contenitore di Azure

Prima di iniziare a creare app nel percorso personalizzato, è necessario un ambiente connesso a App contenitore di Azure.

  1. Creare l'ambiente connesso App contenitore:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. Attendi che l'ambiente connesso completi il provisioning.

    CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --query id \
        --output tsv)
    
    az resource wait --ids $CONNECTED_ENVIRONMENT_ID --created --timeout 900
    
    az containerapp connected-env show \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --query "{State:properties.provisioningState,Location:location,CustomLocation:extendedLocation.name,Domain:properties.defaultDomain}" \
        --output yaml
    

    Continua solo quando State è Succeeded e CustomLocation corrisponde alla posizione personalizzata che hai creato in questo tutorial. Salva il display Domain per la configurazione DNS dell'applicazione. Se il provisioning fallisce, vedi Fallimento della creazione di ambiente connesso.

Passaggi successivi