Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
kubectlcompatí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
amd64e acesso de administrador ao cluster através do contexto ativokubectl. - 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.
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-keysObtenha 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 nsCrie um grupo de recursos para conter seus recursos do Azure Arc.
az group create --name $GROUP_NAME --location $LOCATIONConecte 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_NAMEEspera 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 tableContinue apenas quando
StateforSucceededeConnectivityforConnected. 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.
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_NAMEExecute 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.
Defina os nomes da extensão Container Apps, do seu espaço de nomes Kubernetes e do ambiente conectado.
-
EXTENSION_NAMEidentifica 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. AappsNamespacedefinição tem de corresponder exatamente ao namespace da versão da extensão. -
CONNECTED_ENVIRONMENT_NAMEpassa 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>"-
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
loadBalancerIpcomo 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 widepara 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-settingsparâmetros ao executar o comando:Parâmetro Descrição Microsoft.CustomLocation.ServiceAccountA conta de serviço criada para o local personalizado. Defina o valor como default.appsNamespaceO namespace usado para criar as definições e revisões do aplicativo. Ele deve corresponder ao do namespace de versão de extensão. clusterNameO nome do ambiente Kubernetes da extensão Container Apps criado especificamente para esta extensão. logProcessor.appLogs.destinationOpcional. Destino dos registos da aplicação. Aceita log-analyticsounone; se não escolher nenhuma das opções, desativa os registos da plataforma.logProcessor.appLogs.logAnalyticsConfig.customerIdNecessário somente quando logProcessor.appLogs.destinationestiver definido comolog-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.sharedKeyNecessário somente quando logProcessor.appLogs.destinationestiver definido comolog-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.loadBalancerIpO IP de entrada do balanceador de carga. Salve a
idpropriedade 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)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 tableContinue apenas quando
StateforSucceeded. Se o comando exceder o tempo limite ou indicar uma falha, veja A instalação da extensão falha ou excede o tempo limite.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=.lastTimestampNã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.
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.
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)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_IDNota
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.
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 tableVerifique se
StateéSucceeded, seHostidentifica o cluster ligado que pretende e seNamespacecorresponde 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.
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 $LOCATIONEspera 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 yamlContinue apenas quando
StateforSucceededeCustomLocationcorresponder à localização personalizada que criou neste tutorial. Guarde o que é exibidoDomainpara a configuração DNS da aplicação. Se o provisionamento falhar, veja Falhas na criação de ambientes conectados.