Tutoriel : Créer une application conteneur sur Kubernetes compatible Azure Arc

Dans ce tutoriel, vous déployez une application conteneur sur un environnement connecté existant à Container Apps sur un cluster Kubernetes compatible Azure Arc. Vous vérifiez ensuite le provisionnement, le DNS, les entrées, la réponse de l’application et les journaux.

  • Récupérez un environnement connecté spécifique par son nom.
  • Créez une application conteneur avec une entrée externe.
  • Vérifiez la révision de l’application et le nom de domaine entièrement qualifié.
  • Envoyez une requête à l’application.
  • Consultez les journaux d’application dans Log Analytics, si configurés.
  • Supprime l’application tutoriel.

Prérequis

Avant de commencer, vérifiez les exigences suivantes :

  • Un environnement connecté créé en complétant Enable Azure Container Apps sur Azure Arc-enabled Kubernetes.
  • Accès à Azure CLI pour l’abonnement qui contient l’environnement connecté.
  • Permission Azure de créer des applications conteneurs dans le groupe de ressources cible et l’environnement connecté.
  • Le groupe de ressources et le nom de l’environnement connecté.
  • Accès réseau et DNS depuis votre poste de travail à l’adresse d’entrée de l’environnement connecté.
  • Permission optionnelle pour interroger l’espace de travail Log Analytics configuré lors de l’installation de l’extension.

Avant de déployer une application de production, consultez Azure Container Apps sur Azure Arc. Si l'application ne se provisionne pas ou ne devient pas accessible, consultez Troubleshoot Azure Container Apps on Azure Arc-enabled Kubernetes.

Ajouter l’extension Azure CLI

Lancez l’environnement Bash dans Azure Cloud Shell.

Lancer Cloud Shell dans une nouvelle fenêtre.

Ensuite, ajoutez l’extension Azure CLI requise.

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

Créez un groupe de ressources pour l’application

L’application conteneur peut utiliser un groupe de ressources différent de l’environnement connecté. Définissez le groupe de ressources applicatifs et la région Azure utilisée pour stocker ses métadonnées de ressources. Le conteneur applicatif s’exécute dans le cluster Kubernetes associé à l’environnement connecté.

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

Obtenez un environnement connecté

Définissez le groupe de ressources et le nom de l’environnement connecté :

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

Récupérez cet environnement connecté spécifique et vérifiez qu’il est prêt :

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

Continuer seulement lorsque State est Succeeded.

Créez et vérifiez l’application

Créez l’exemple d’application :

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

Attendez que le provisionnement réussisse :

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)

Continuer seulement lorsque State est Succeeded, Revision n’est pas vide, et FQDN contient le domaine de l’environnement connecté. Test DNS et réponse de l’application depuis un réseau pouvant atteindre l’adresse d’entrée de l’environnement connecté :

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

Vous pouvez également ouvrir l’application dans un navigateur :

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

Si DNS ne se résout pas, si la requête expire ou si la réponse n’est pas réussie, voir L’entrée d’application n’est pas joignable.

Récupérer des journaux de diagnostic à l’aide de Log Analytics

Remarque

Cette section ne s’applique que lorsque vous configurez Log Analytics lors de l’installation de l’extension Container Apps. Si vous n'avez pas configuré Log Analytics, passez cette section.

Ouvrez l’espace de travail Log Analytics configuré pour l’extension Conteneurs Applications et sélectionnez Logs. Exécutez la requête suivante pour afficher les journaux des 72 dernières heures. L’ingestion initiale peut prendre 10 à 15 minutes.

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

Les journaux d’application pour toutes les applications hébergées dans votre cluster Kubernetes sont enregistrés dans l’espace de travail Log Analytics de la table de journaux personnalisée nommée ContainerAppConsoleLogs_CL.

  • Log_s contient les messages de journal d’application et les messages du cycle de vie du conteneur.
  • ContainerAppName_s identifie l’application conteneur. Ce champ est utilisé par la requête précédente.

Pour en savoir plus sur les requêtes de journal, consultez Commencer avec Kusto.

Nettoyez l’application tutoriel

Supprimez l’application conteneur exemple :

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

Si vous avez créé le groupe de ressources applicatif uniquement pour ce tutoriel et qu’il ne contient aucune autre ressource, supprimez-le.

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

Ne supprimez pas l’environnement connecté, la localisation personnalisée, l’extension ou le cluster connecté car d’autres applications peuvent partager ces ressources.

Étapes suivantes