Tutorial: Criar uma aplicação de contentores no Kubernetes com Azure Arc

Neste tutorial, implementa uma aplicação container num ambiente conectado Container Apps existente num cluster Kubernetes compatível com Azure Arc. Depois verifica-se provisionamento, DNS, entrada, resposta à aplicação e registos.

  • Obter um ambiente conectado específico pelo nome.
  • Cria uma aplicação de contentores com entrada externa.
  • Verifique a revisão da aplicação e o nome de domínio totalmente qualificado.
  • Envie um pedido para a aplicação.
  • Veja os registos de aplicação no Log Analytics, se configurado.
  • Apaga a aplicação do tutorial.

Pré-requisitos

Antes de começar, verifique os seguintes requisitos:

  • Um ambiente conectado criado ao concluir Ativar o Azure Container Apps no Kubernetes compatível com o Azure Arc.
  • Acesso da CLI do Azure à subscrição que contém o ambiente ligado.
  • Permissão no Azure para criar aplicações em contentor no grupo de recursos de destino e no ambiente ligado.
  • O grupo de recursos e o nome do ambiente conectado.
  • Acesso à rede e DNS a partir da sua estação de trabalho até ao endereço de entrada do ambiente conectado.
  • Permissão opcional para consultar o espaço de trabalho Log Analytics configurado durante a instalação da extensão.

Antes de implementar uma aplicação de produção, consulte o Azure Container Apps no Azure Arc. Se a aplicação não for provisionada ou não se tornar acessível, veja Troubleshoot Azure Container Apps on Azure Arc-enabled Kubernetes.

Adicionar a extensão CLI do Azure

Inicie o ambiente Bash no Azure Cloud Shell.

Inicie o Cloud Shell em uma nova janela.

De seguida, adicione a extensão necessária do CLI do Azure.

az extension add --name containerapp --upgrade --yes

Crie um grupo de recursos para a aplicação

A aplicação de contentores pode usar um grupo de recursos diferente do ambiente conectado. Defina o grupo de recursos da aplicação e a região Azure usada para armazenar os seus metadados de recursos. O contentor de aplicação corre no cluster Kubernetes associado ao ambiente conectado.

APP_RESOURCE_GROUP="my-container-apps-resource-group"
AZURE_LOCATION="eastus"
az group create --name $APP_RESOURCE_GROUP --location $AZURE_LOCATION

Obtenha o ambiente conectado

Defina o grupo de recursos e o nome do ambiente ligado:

CONNECTED_ENVIRONMENT_RESOURCE_GROUP="<CONNECTED_ENVIRONMENT_RESOURCE_GROUP>"
CONNECTED_ENVIRONMENT_NAME="<CONNECTED_ENVIRONMENT_NAME>"

Recupera esse ambiente ligado específico e verifica se está pronto:

CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query id \
  --output tsv)

az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query "{Id:id,State:properties.provisioningState,Domain:properties.defaultDomain}" \
  --output yaml

Continue apenas quando State for Succeeded.

Crie e verifique a aplicação

Crie o aplicativo de exemplo:

CONTAINER_APP_NAME="my-container-app"

az containerapp create \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --environment $CONNECTED_ENVIRONMENT_ID \
  --environment-type connected \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

Aguarde que o aprovisionamento seja concluído com êxito:

CONTAINER_APP_ID=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query id \
  --output tsv)

az resource wait --ids $CONTAINER_APP_ID --created --timeout 600

az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query "{State:properties.provisioningState,Revision:properties.latestReadyRevisionName,FQDN:properties.configuration.ingress.fqdn}" \
  --output yaml

APP_FQDN=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query properties.configuration.ingress.fqdn \
  --output tsv)

Continue apenas quando State for o Succeeded, Revision não estiver vazio e FQDN contiver o domínio do ambiente conectado. Teste o DNS e a resposta da aplicação a partir de uma rede que pode alcançar o endereço de entrada do ambiente conectado:

nslookup $APP_FQDN
curl --fail --show-error "https://$APP_FQDN"

Também pode abrir a aplicação num navegador:

az containerapp browse \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME

Se o DNS não resolver, o pedido exceder o tempo limite ou a resposta não for bem-sucedida, consulte O ingresso da aplicação não está acessível.

Obter registos de diagnóstico usando o Log Analytics

Nota

Esta secção aplica-se apenas quando configura o Log Analytics durante a instalação da extensão Container Apps. Se não configuraste o Log Analytics, salta esta secção.

Abra o espaço de trabalho Log Analytics configurado para a extensão Container Apps e selecione Logs. Execute a seguinte consulta para mostrar registos das últimas 72 horas. A ingestão inicial pode demorar entre 10 a 15 minutos.

let StartTime = ago(72h);
let EndTime = now();
ContainerAppConsoleLogs_CL
| where TimeGenerated between (StartTime .. EndTime)
| where ContainerAppName_s =~ "my-container-app"

Os registos de todas as aplicações hospedadas no seu cluster do Kubernetes são guardados no espaço de trabalho do Log Analytics na tabela de log personalizada chamada ContainerAppConsoleLogs_CL.

  • Log_s contém mensagens de registo de aplicação e mensagens do ciclo de vida do contentor.
  • ContainerAppName_s Identifica a aplicação do contentor. Este campo é usado pela consulta anterior.

Você pode saber mais sobre consultas de log em Introdução ao Kusto.

Limpar a aplicação do tutorial

Eliminar a aplicação de contentor de exemplo:

az containerapp delete \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --yes

Se criaste o grupo de recursos da aplicação apenas para este tutorial e este não contém outros recursos, apaga-o.

az group delete --name $APP_RESOURCE_GROUP --yes --no-wait

Não apague o ambiente conectado, localização personalizada, extensão ou cluster ligado porque outras aplicações podem partilhar esses recursos.

Próximos passos