Självstudie: Aktivera Azure Container Apps i Azure Arc-aktiverade Kubernetes

Denna handledning förbereder ett stödd Kubernetes-kluster för att köra Azure Container Apps. Den skapar ett Azure Arc-aktiverat Kubernetes-kluster, installerar Container Apps-tillägget, skapar en anpassad plats och skapar en Container Apps-ansluten miljö.

Att slutföra denna handledning ändrar både din Azure-prenumeration och ditt Kubernetes-kluster. Du behöver Azure-behörigheter för att skapa de listade resurserna och klusteradministratörsåtkomst till Kubernetes-klustret.

Denna handledning visar hur man aktiverar Azure Container Apps på ett Kubernetes-kluster med Azure Arc-aktivering. I den här handledningen kommer du att:

  • Koppla ett Kubernetes-kluster till Azure Arc, om det inte redan är anslutet.
  • Skapa eventuellt ett Log Analytics-arbetsområde.
  • Installera och validera tillägget Container Apps.
  • Skapa och validera en anpassad plats.
  • Skapa och validera en miljö kopplad till Container Apps.

Innan du börjar, läs igenom Azure Container Apps på Azure Arc. Om en resurs eller komponent i klustret inte blir redo, se Felsöka Azure Container Apps på Kubernetes med Azure Arc.

Förutsättningar

Innan du börjar, kontrollera följande krav:

  • Ett Azure-konto med en aktiv prenumeration. Om du inte har en kan du skapa en kostnadsfritt.
  • Behörighet att registrera resursleverantörer och skapa resursgrupper, en Azure Arc-aktiverad Kubernetes-resurs, en klustertillägg, en anpassad plats, en Container Apps-ansluten miljö och eventuellt en Log Analytics-arbetsyta.
  • Azure CLI och dess förutsättningar.
  • En kubectl-version som är kompatibel med ditt Kubernetes-kluster och nätverksåtkomst från din arbetsstation till Kubernetes API-servern.
  • Ett stödd Kubernetes-kluster med Linux-arbetarnoder amd64 och klusteradministratörsåtkomst via den aktiva kubectl kontexten.
  • En fungerande Kubernetes-tjänstimplementering LoadBalancer .
  • Utgående anslutningar till de slutpunkter som Azure Arc och Container Apps kräver.
  • Tillräckligt med tilldelbar CPU och minne för tilläggs- och applikationsarbetsbelastningar.

Innan du ändrar ett produktionskluster, granska Plan a Container Apps-distribution på Azure Arc-aktiverad Kubernetes.

Ställ in

Installera följande Azure CLI-tillägg.

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

Registrera de nödvändiga namnrymderna.

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

Ange miljövariabler baserat på kubernetes-klusterdistributionen.

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

Skapa ett anslutet kluster

Om du redan har ett Azure Arc-aktiverat Kubernetes-kluster i $GROUP_NAME, skapa inte ett nytt kluster. Ställ CLUSTER_NAME in på det befintliga resursnamnet för anslutna kluster, verifiera åtkomst med kubectl get nodes, och fortsätt skapa en Log Analytics-arbetsyta.

Följande steg skapar ett AKS-kluster och kopplar det till Azure Arc. Denna sökväg är endast avsedd som en Azure-hostad utvärderingsmiljö för handledningen. För ett befintligt lokalt eller multicloud-kluster, följ Quickstart: Koppla ett befintligt Kubernetes-kluster till Azure Arc, och återvänd sedan till denna handledning.

  1. Skapa ett kluster i Azure Kubernetes Service.

    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. Hämta kubeconfig-filen och testa anslutningen till klustret. Som standard sparas kubeconfig-filen till ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Skapa en resursgrupp som ska innehålla dina Azure Arc-resurser.

    az group create --name $GROUP_NAME --location $LOCATION
    
  4. Anslut klustret som du skapade till Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Vänta tills det anslutna klustret är klart med provisionering.

    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
    

    Fortsätt endast när State är Succeeded och Connectivity är Connected. Om kommandot överskrider tidsgränsen, se Det anslutna klustret är inte redo.

Skapa en Log Analytics-arbetsyta

En Log Analytics-arbetsyta ger tillgång till applikationsloggar för Container Apps som körs i det Azure Arc-aktiverade Kubernetes-klustret. En Log Analytics-arbetsyta är valfri men rekommenderas för applikationsdiagnostik.

Viktigt!

Bestäm om du ska använda Log Analytics innan du installerar tillägget Container Apps. Tillhandahåll Log Analytics-konfigurationen under installationen av tillägget. Du kan inte lägga till Log Analytics-konfiguration i den tilläggsinstansen senare.

  1. Skapa en Log Analytics-arbetsyta.

    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. Kör följande kommandon för att hämta det kodade arbetsyte-ID:t och den delade nyckeln för en befintlig Log Analytics-arbetsyta. Du behöver dem i nästa steg.

    Caution

    Den delade arbetsytnyckeln är en legitimation. Skriv inte ut det, sätt det inte in i versionshantering, lagra det inte i shellhistoriken eller inkludera det i supportpaket. Följande kommandon behåller den i en skalvariabel och skickar den till Azure som en skyddad tilläggsinställning.

    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
    

Kontrollera om det finns en befintlig KEDA-installation

Tillägget Container Apps installerar KEDA. Innan du installerar tillägget, kontrollera klustret för befintliga KEDA-komponenter:

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

Inspektera distributionslistan för KEDA-komponenter. Om något av kommandona identifierar en befintlig KEDA-installation, stoppa och bekräfta den stödda samexistenskonfigurationen innan du fortsätter. Ta inte bort den befintliga KEDA-installationen eller applicera odokumenterade tilläggsinställningar eftersom andra arbetsbelastningar kan vara beroende av det.

Installera tillägget Container Apps

Viktigt!

Om du distribuerar till AKS på Azure Local, se till att du sätter upp HAProxy eller en anpassad lastbalanserare innan du försöker installera tillägget. Du kan också använda az containerapp arc setup-core-dns --distro AksAzureLocal det för att ställa in CoreDNS för lokala kontexter.

  1. Sätt namn på Container Apps-tillägget, dess Kubernetes-namnrymd och den anslutna miljön.

    • EXTENSION_NAMEidentifierar Azure-kluster-extension-resursen.
    • NAMESPACE skapas i Kubernetes-klustret och innehåller tilläggskomponenter samt resurser hanterade av Container Apps. Inställningen appsNamespace måste exakt matcha extensionens releasenamnrymd.
    • CONNECTED_ENVIRONMENT_NAME blir en del av standardapplikationsdomänen. Använd ett DNS-kompatibelt namn som är unikt inom resursgruppen.

    Installera inte orelaterade arbetsbelastningar i tilläggsnamnrymden.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Installera Container Apps-tillägget till ditt Azure Arc-anslutna kluster med Log Analytics aktiverat. Log Analytics kan inte läggas till i tillägget senare.

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

    Kommentar

    För att installera tillägget utan Log Analytics-integration, ta bort de tre loggningsrelaterade parametrarna från kommandot.

    För ett kluster som använder en anpassad lastbalanserare, sätt loadBalancerIp till en adress reserverad för Container Apps ingress:

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

    Adressen måste vara tillgänglig för applikationsklienter och får inte tilldelas en annan tjänst. Efter installationen, använd kubectl get service -n $NAMESPACE -o wide för att verifiera att tilläggsingångstjänsten rapporterar denna adress. Konfigurera wildcard-DNS endast efter att adressen har tilldelats. Se DNS-krav.

    I följande tabell beskrivs de olika --configuration-settings parametrarna när du kör kommandot:

    Parameter Beskrivning
    Microsoft.CustomLocation.ServiceAccount Tjänstkontot som skapats för den anpassade platsen. Ange värdet till default.
    appsNamespace Namnområdet som används för att skapa appdefinitioner och revisioner. Det måste stämma överens med tilläggsutgåvans namnområde.
    clusterName Namnet på Kubernetes-miljön för Container Apps-tillägget som skapats för det här tillägget.
    logProcessor.appLogs.destination Valfritt. Mål för programloggar. Accepterar log-analytics eller none. Om inget väljs inaktiveras plattformens loggar.
    logProcessor.appLogs.logAnalyticsConfig.customerId Krävs endast när logProcessor.appLogs.destination är inställt på log-analytics. Det base64-kodade Log Analytics-arbetsym-ID:t. Den här parametern ska konfigureras som en skyddad inställning.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Krävs endast när logProcessor.appLogs.destination är inställt på log-analytics. Den base64-kodade Log Analytics-arbetsytan delade nyckel. Den här parametern ska konfigureras som en skyddad inställning.
    loadBalancerIp Lastbalanserarens inkommande IP-adress.
  3. id Spara egenskapen för Container Apps-tillägget för senare.

    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. Vänta tills tillägget har installerats helt innan du fortsätter.

    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
    

    Fortsätt endast när State är Succeeded. Om kommandot överskrider tidsgränsen eller misslyckas, se Installationen av tillägget misslyckas eller överskrider tidsgränsen.

  5. Inspektera tilläggsarbetsbelastningar, tjänster och senaste händelser:

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

    Skapa inte den anpassade platsen medan en förlängningspod väntar, startar om upprepade gånger eller oväntat inte är klar. Mer information om dessa poddar och deras roll i systemet finns i Översikt över Azure Arc.

  6. Om du har konfigurerat Log Analytics rensar du de lokala variabler som innehåller nyckeln för arbetsytan.

    unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
    

Skapa en anpassad plats

Den anpassade platsen är en Azure-plats som du tilldelar till den anslutna Azure Container Apps-miljön.

  1. Ange följande miljövariabler till önskat namn på den anpassade platsen och för ID:t för det Azure Arc-anslutna klustret.

    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. Skapa den anpassade platsen:

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

    Kommentar

    Om du har problem med att skapa en anpassad plats på ditt kluster kan du behöva aktivera funktionen för anpassad plats på ditt kluster. Aktivera denna funktion när du loggar in på CLI genom att använda en tjänstechef eller en Microsoft Entra-användare med begränsade behörigheter på klusterresursen.

  3. Vänta tills den anpassade platsen är klar med provisionering och spara dess resurs-ID.

    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
    

    Kontrollera att State är Succeeded, Host identifierar det anslutna klustret du vill ha, och Namespace matchar $NAMESPACE. Om provisionering misslyckas, se Det går inte att skapa anpassad plats.

Skapa den anslutna Azure Container Apps-miljön

Innan du kan börja skapa appar på den anpassade platsen behöver du en ansluten Azure Container Apps-miljö.

  1. Skapa den anslutna miljön för Container Apps:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. Vänta tills den anslutna miljön är klar med provisioneringen.

    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
    

    Fortsätt endast när State har värdet CustomLocation och Succeeded matchar den anpassade platsen som du skapade i den här handledningen. Spara den visade Domain för applikationens DNS-konfiguration. Om provisionering misslyckas, se Connected environment creation fails.

Nästa steg