Tutorial: Crie um aplicativo container no Kubernetes habilitado para Azure Arc

Neste tutorial, você implanta um aplicativo container em um ambiente conectado ao Container Apps existente em um cluster Kubernetes habilitado para Azure Arc. Você então verifica provisionamento, DNS, entrada, resposta de aplicação e logs.

  • Recupere um ambiente conectado específico pelo nome.
  • Crie um app container com entrada externa.
  • Verifique a revisão da aplicação e o nome de domínio totalmente qualificado.
  • Envie uma solicitação para o aplicativo.
  • Veja logs de aplicação no Log Analytics, se configurado.
  • Exclua o aplicativo de tutorial.

Pré-requisitos

Antes de começar, verifique os seguintes requisitos:

  • Um ambiente conectado criado ao completar o Enable Aplicativos de Contêiner do Azure no Azure Arc-enabled Kubernetes.
  • Acesso do CLI do Azure à assinatura que contém o ambiente conectado.
  • Permissão do Azure para criar aplicativos de contêineres no grupo de recursos alvo e no ambiente conectado.
  • O grupo de recursos e o nome do ambiente conectado.
  • Acesso de rede e DNS da sua estação de trabalho até o endereço de entrada do ambiente conectado.
  • Permissão opcional para consultar o espaço de trabalho do Log Analytics configurado durante a instalação da extensão.

Antes de implantar uma aplicação de produção, revise o Aplicativos de Contêiner do Azure no Azure Arc. Se a aplicação não for provisionada ou não ficar acessível, veja Solucionar problemas do Aplicativos de Contêiner do Azure no Kubernetes habilitado pelo Azure Arc.

Adicionar a extensão CLI do Azure

Inicie o ambiente Bash no Azure Cloud Shell.

Iniciar o Cloud Shell em uma nova janela.

Em 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

O aplicativo container pode usar um grupo de recursos diferente do ambiente conectado. Defina o grupo de recursos da aplicação e a região do Azure usada para armazenar seus metadados de recursos. O contêiner da aplicação roda 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

Tenha o ambiente conectado

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

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

Recupere esse ambiente conectado específico e verifique 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 somente quando State for Succeeded.

Crie e verifique o aplicativo

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 até que o provisionamento 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 estiver Succeeded, Revision não estiver vazio e FQDN contiver o domínio de ambiente conectado. Teste o DNS e a resposta da aplicação 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"

Você também pode abrir o aplicativo em um navegador:

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

Se o DNS não for resolvido, a solicitação expirar ou a resposta não for bem-sucedida, veja Entrada de aplicação não é alcançável.

Obter logs de diagnóstico usando Log Analytics

Observação

Esta seção se aplica apenas quando você configura o Log Analytics durante a instalação da extensão Container Apps. Se você não configurou o Log Analytics, pule esta seção.

Abra o espaço de trabalho do Log Analytics configurado para a extensão do Container Apps e selecione Logs. Execute a consulta a seguir para mostrar os registros das últimas 72 horas. A ingestão inicial pode levar de 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 logs do aplicativo para todos os aplicativos hospedados no cluster do Kubernetes são registrados no workspace do Log Analytics, na tabela de log personalizada chamada ContainerAppConsoleLogs_CL.

  • Log_s contém mensagens de log de aplicação e mensagens do ciclo de vida do contêiner.
  • ContainerAppName_s identifica o aplicativo de contêiner. Este campo é usado pela consulta anterior.

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

Limpe o aplicativo tutorial

Exclua o aplicativo de contêineres de exemplo:

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

Se você criou o grupo de recursos de aplicativos apenas para este tutorial e ele não contém outros recursos, delete-o.

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

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

Próximas etapas