Tutorial: Crear una aplicación en contenedor en un Kubernetes habilitado para Azure Arc

En este tutorial, implementas una aplicación de contenedor en un entorno conectado de Container Apps existente en un clúster de Kubernetes habilitado con Azure Arc. Luego verificas el provisionamiento, el DNS, el ingreso, la respuesta de la aplicación y los registros.

  • Recuperar un entorno conectado específico por su nombre.
  • Crea una aplicación contenedor con entrada externa.
  • Verificar la revisión de la aplicación y el nombre de dominio completo.
  • Envía una solicitud a la aplicación.
  • Consulta los registros de aplicaciones en Log Analytics, si está configurado.
  • Elimina la aplicación del tutorial.

Requisitos previos

Antes de empezar, verifica los siguientes requisitos:

  • Un entorno conectado creado al completar Habilitar Azure Container Apps en Kubernetes con Azure Arc habilitado.
  • Acceso con CLI de Azure a la suscripción que contiene el entorno conectado.
  • Permiso de Azure para crear aplicaciones contenedor en el grupo de recursos objetivo y en el entorno conectado.
  • El grupo de recursos y el nombre del entorno conectado.
  • Acceso a red y DNS desde tu estación de trabajo hasta la dirección de entrada del entorno conectado.
  • Permiso opcional para consultar el espacio de trabajo de Log Analytics configurado durante la instalación de la extensión.

Antes de desplegar una aplicación de producción, revisa Azure Container Apps en Azure Arc. Si la aplicación no se aprovisiona o no se vuelve accesible, consulta Solucionar problemas de Azure Container Apps en Kubernetes habilitado para Azure Arc.

Añadir la extensión CLI de Azure

Inicie el entorno de Bash en Azure Cloud Shell.

Iniciar Cloud Shell en una nueva ventana.

A continuación, añade la extensión necesaria de CLI de Azure.

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

Crea un grupo de recursos para la aplicación

La app contenedor puede usar un grupo de recursos diferente al entorno conectado. Establece el grupo de recursos de la aplicación y la región de Azure utilizada para almacenar sus metadatos de recursos. El contenedor de aplicación se ejecuta en el clúster Kubernetes asociado al entorno conectado.

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

Obtén el entorno conectado

Establezca el grupo de recursos y el nombre del entorno conectado:

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

Recupera ese entorno conectado específico y verifica que esté listo:

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

Continúa solo cuando State sea Succeeded.

Crea y verifica la app

Cree la aplicación de ejemplo:

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

Espera a que el aprovisionamiento tenga é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)

Continúa solo cuando State es Succeeded, Revision no está vacío y FQDN contiene el dominio del entorno conectado. Prueba el DNS y la respuesta de la aplicación desde una red que puede llegar a la dirección de entrada del entorno conectado:

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

También puedes abrir la aplicación en un navegador:

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

Si el DNS no resuelve la dirección, la solicitud agota el tiempo de espera o la respuesta no se realiza correctamente, consulte No se puede acceder a la entrada de la aplicación.

Obtención de registros de diagnóstico con Log Analytics

Nota:

Esta sección solo se aplica cuando configuras Log Analytics durante la instalación de la extensión Contenedores de Apps. Si no configuraste Log Analytics, sáltate esta sección.

Abre el espacio de trabajo de Log Analytics configurado para la extensión de Container Apps y selecciona Registros. Ejecuta la siguiente consulta para mostrar los registros de las últimas 72 horas. La ingestión inicial puede durar entre 10 y 15 minutos.

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

Los registros de aplicación de todas las aplicaciones hospedadas en el clúster de Kubernetes se registran en el área de trabajo de Log Analytics en la tabla de registros personalizada denominada ContainerAppConsoleLogs_CL.

  • Log_s contiene mensajes de registro de aplicaciones y mensajes del ciclo de vida del contenedor.
  • ContainerAppName_s identifica la aplicación contenedora. Este campo es utilizado por la consulta anterior.

Puede obtener más información sobre las consultas de registro en Introducción a Kusto.

Limpia la aplicación del tutorial

Elimina la aplicación contenedora de ejemplo:

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

Si creaste el grupo de recursos de aplicaciones solo para este tutorial y no contiene otros recursos, elimíralo.

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

No elimines el entorno conectado, la ubicación personalizada, la extensión o el clúster conectado porque otras aplicaciones pueden compartir estos recursos.

Pasos siguientes