Tutorial: Ativar as Aplicações de Contentor do Azure no Kubernetes com Azure Arc ativado

Este tutorial prepara um cluster Kubernetes suportado para executar Azure Container Apps. Cria um cluster Kubernetes compatível com Azure Arc, instala a extensão Container Apps, cria uma localização personalizada e cria um ambiente ligado às Container Apps.

Completar este tutorial altera tanto a tua subscrição do Azure como o teu cluster Kubernetes. Precisas de permissões do Azure para criar os recursos listados e acesso de administrador do cluster ao cluster Kubernetes.

Este tutorial mostra como ativar o Azure Container Apps num cluster Kubernetes com Azure Arc. Neste tutorial, você:

  • Liga um cluster Kubernetes ao Azure Arc, se ainda não estiver ligado.
  • Opcionalmente, crie um espaço de trabalho de Log Analytics.
  • Instale e valide a extensão Container Apps.
  • Cria e valida uma localização personalizada.
  • Crie e valide um ambiente ligado a Container Apps.

Antes de começar, consulte o Azure Container Apps no Azure Arc. Se um recurso ou componente no cluster não estiver pronto, consulte Troubleshoot Azure Container Apps on Azure Arc-enabled Kubernetes.

Pré-requisitos

Antes de começar, verifique os seguintes requisitos:

  • Uma conta do Azure com uma subscrição ativa. Se você não tiver um, crie um gratuitamente.
  • Permissão para registar fornecedores de recursos e criar grupos de recursos, um recurso Kubernetes compatível com Azure Arc, uma extensão de cluster, uma localização personalizada, um ambiente ligado a Aplicações Container e, opcionalmente, um espaço de trabalho Log Analytics.
  • A CLI do Azure e os seus pré-requisitos.
  • Uma versão kubectl compatível com o seu cluster do Kubernetes e acesso de rede da sua estação de trabalho ao servidor da API do Kubernetes.
  • Um cluster Kubernetes suportado com nós de trabalho Linux amd64 e acesso de administrador ao cluster através do contexto ativo kubectl.
  • Uma implementação funcional do serviço Kubernetes LoadBalancer .
  • Conectividade de saída para os endpoints exigidos pelo Azure Arc e Container Apps.
  • CPU e memória alocáveis suficientes para as extensões e cargas de trabalho da aplicação.

Antes de alterar um cluster de produção, consulte Planear uma implementação do Container Apps no Kubernetes compatível com Azure Arc.

Configuração

Instale as seguintes extensões da CLI do Azure.

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

Registre os namespaces necessários.

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

Defina variáveis de ambiente com base na implantação do cluster do Kubernetes.

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

Criar um cluster conectado

Se já tiveres um cluster Kubernetes suportado com Azure Arc em $GROUP_NAME, não cries outro cluster. Defina CLUSTER_NAME o nome do recurso existente do cluster conectado, verifique o acesso com kubectl get nodes, e continue a criar um espaço de trabalho de Log Analytics.

Os passos seguintes criam um cluster AKS e ligam-no ao Azure Arc. Este caminho destina-se apenas a ser um ambiente de avaliação alojado no Azure para o tutorial. Para um cluster local ou multicloud existente, siga Quickstart: Conecte um cluster Kubernetes existente ao Azure Arc e depois volte a este tutorial.

  1. Crie um cluster no Serviço Kubernetes do Azure.

    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. Obtenha o arquivo kubeconfig e teste sua conexão com o cluster. Por padrão, o arquivo kubeconfig é salvo no ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Crie um grupo de recursos para conter seus recursos do Azure Arc.

    az group create --name $GROUP_NAME --location $LOCATION
    
  4. Conecte o cluster que você criou ao Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Espera que o cluster ligado termine o provisionamento.

    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
    

    Continue apenas quando State for Succeeded e Connectivity for Connected. Se o comando expirar, consulte O cluster conectado não está pronto.

Criar uma área de trabalho do Log Analytics

Um espaço de trabalho do Log Analytics fornece acesso aos registos da aplicação para Aplicações em Contentor em execução no cluster do Kubernetes com Azure Arc ativado. Um espaço de trabalho de Log Analytics é opcional, mas recomendado para diagnósticos de aplicações.

Importante

Decida se deve usar o Log Analytics antes de instalar a extensão Container Apps. Forneça a configuração do Log Analytics durante a instalação da extensão. Não podes adicionar a configuração do Log Analytics a essa instância de extensão mais tarde.

  1. Criar uma área de trabalho do 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. Execute os comandos a seguir para obter o ID do espaço de trabalho codificado e a chave compartilhada para um espaço de trabalho existente do Log Analytics. Você precisa deles na próxima etapa.

    Caution

    A chave partilhada do espaço de trabalho é uma credencial. Não o imprimas, não o comprometas com controlo de versões, não o guardes no histórico do shell, nem o incluas em pacotes de suporte. Os comandos seguintes mantêm-no numa variável shell e passam-no para o Azure como uma configuração de extensão protegida.

    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
    

Verifique se existe uma instalação KEDA existente

A extensão Container Apps instala o KEDA. Antes de instalar a extensão, verifique o cluster para componentes KEDA existentes:

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

Inspecionar a lista de implementação dos componentes KEDA. Se algum dos comandos identificar uma instalação KEDA existente, pare e confirme a configuração de coexistência suportada antes de continuar. Não removas a instalação KEDA existente nem apliques definições de extensão não documentadas porque outras tarefas podem depender disso.

Instalar a extensão Container Apps

Importante

Se estiver a implementar no AKS no Azure Local, certifique-se de configurar o HAProxy ou um balanceador de carga personalizado antes de tentar instalar a extensão. Também podes usar az containerapp arc setup-core-dns --distro AksAzureLocal para configurar o CoreDNS para contextos locais.

  1. Defina os nomes da extensão Container Apps, do seu espaço de nomes Kubernetes e do ambiente conectado.

    • EXTENSION_NAME identifica o recurso de extensão de cluster do Azure.
    • NAMESPACE é criado no cluster Kubernetes e contém componentes de extensão e recursos geridos pelas Aplicações Container. A appsNamespace definição tem de corresponder exatamente ao namespace da versão da extensão.
    • CONNECTED_ENVIRONMENT_NAME passa a fazer parte do domínio de aplicação predefinido. Usa um nome compatível com DNS, único dentro do grupo de recursos.

    Não instale cargas de trabalho não relacionadas no namespace da extensão.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Instale a extensão Aplicativos de Contêiner em seu cluster conectado ao Azure Arc com o Log Analytics habilitado. O Log Analytics não pode ser adicionado à extensão posteriormente.

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

    Nota

    Para instalar a extensão sem integração com o Log Analytics, remova os três parâmetros relacionados com o registo do comando.

    Para um cluster que utiliza um balanceador de carga personalizado, defina loadBalancerIp como um endereço reservado para a entrada do Container Apps:

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

    O endereço deve ser acessível pelos clientes de aplicação e não deve ser atribuído a outro serviço. Após a instalação, use kubectl get service -n $NAMESPACE -o wide para verificar se o serviço de entrada de extensão reporta este endereço. Configure o DNS wildcard apenas depois de o endereço ser atribuído. Consulte os requisitos do DNS.

    A tabela a seguir descreve os vários --configuration-settings parâmetros ao executar o comando:

    Parâmetro Descrição
    Microsoft.CustomLocation.ServiceAccount A conta de serviço criada para o local personalizado. Defina o valor como default.
    appsNamespace O namespace usado para criar as definições e revisões do aplicativo. Ele deve corresponder ao do namespace de versão de extensão.
    clusterName O nome do ambiente Kubernetes da extensão Container Apps criado especificamente para esta extensão.
    logProcessor.appLogs.destination Opcional. Destino dos registos da aplicação. Aceita log-analytics ou none; se não escolher nenhuma das opções, desativa os registos da plataforma.
    logProcessor.appLogs.logAnalyticsConfig.customerId Necessário somente quando logProcessor.appLogs.destination estiver definido como log-analytics. O ID do espaço de trabalho Log Analytics codificado em base64. Este parâmetro deve ser configurado como uma configuração protegida.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Necessário somente quando logProcessor.appLogs.destination estiver definido como log-analytics. A chave partilhada do espaço de trabalho do Log Analytics codificada em base64. Este parâmetro deve ser configurado como uma configuração protegida.
    loadBalancerIp O IP de entrada do balanceador de carga.
  3. Salve a id propriedade da extensão Container Apps para mais tarde.

    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. Aguarde até que a extensão seja totalmente instalada antes de continuar.

    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
    

    Continue apenas quando State for Succeeded. Se o comando exceder o tempo limite ou indicar uma falha, veja A instalação da extensão falha ou excede o tempo limite.

  5. Inspecione as cargas de trabalho da extensão, os serviços e os eventos recentes:

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

    Não crie o local personalizado enquanto um pod de extensão estiver pendente, em reinício repetido ou inesperadamente sem estar pronto. Para saber mais sobre esses pods e sua função no sistema, consulte Visão geral do Azure Arc.

  6. Se configurou o Log Analytics, limpe as variáveis locais que contêm a chave do espaço de trabalho.

    unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
    

Criar um local personalizado

O local personalizado é um local do Azure que você atribui ao ambiente conectado dos Aplicativos de Contêiner do Azure.

  1. Defina as seguintes variáveis de ambiente para o nome desejado do local personalizado e para a ID do cluster conectado ao 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. Crie o local personalizado:

    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 tiver dificuldades em criar uma localização personalizada no seu cluster, poderá precisar de ativar a funcionalidade de localização personalizada no cluster. Ative esta funcionalidade quando iniciar sessão na CLI usando um principal de serviço ou um utilizador Microsoft Entra com permissões restritas no recurso do cluster.

  3. Espera que a localização personalizada termine de provisionar e guarda o ID do seu recurso.

    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
    

    Verifique se State é Succeeded, se Host identifica o cluster ligado que pretende e se Namespace corresponde a $NAMESPACE. Se o provisionamento falhar, veja Falhas na criação de localização personalizada.

Criar o ambiente conectado das Aplicações de Contentores do Azure

Antes de começar a criar aplicativos no local personalizado, você precisa de um ambiente conectado de Aplicativos de Contêiner do Azure.

  1. Crie o ambiente ligado ao Container Apps:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. Espera que o ambiente ligado termine o provisionamento.

    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
    

    Continue apenas quando State for Succeeded e CustomLocation corresponder à localização personalizada que criou neste tutorial. Guarde o que é exibido Domain para a configuração DNS da aplicação. Se o provisionamento falhar, veja Falhas na criação de ambientes conectados.

Próximos passos