Tutoriel : activer Azure Container Apps sur Kubernetes avec Azure Arc

Ce tutoriel prépare un cluster Kubernetes pris en charge pour exécuter Azure Container Apps. Il crée un cluster Kubernetes compatible Azure Arc, installe l’extension Container Apps, crée un emplacement personnalisé et crée un environnement connecté Container Apps.

Compléter ce tutoriel modifie à la fois votre abonnement Azure et votre cluster Kubernetes. Vous avez besoin des permissions Azure pour créer les ressources listées et un accès administrateur cluster au cluster Kubernetes.

Ce tutoriel montre comment activer Azure Container Apps sur un cluster Kubernetes compatible Azure Arc. Dans ce tutoriel, vous allez :

  • Connectez un cluster Kubernetes à Azure Arc, s'il n'est pas déjà connecté.
  • Éventuellement, créez un espace de travail Log Analytics.
  • Installez et validez l’extension Conteneur Applications.
  • Créez et validez un emplacement personnalisé.
  • Créer et valider un environnement connecté aux applications conteneur.

Avant de commencer, consultez Azure Container Apps sur Azure Arc. Si une ressource ou un composant en cluster n'est pas prêt, consultez Troubleshoot Azure Container Apps on Azure Arc-enabled Kubernetes.

Prérequis

Avant de commencer, vérifiez les exigences suivantes :

  • Compte Azure avec un abonnement actif. Si vous n’en avez pas, créez-en un gratuitement.
  • Permission d’enregistrer des fournisseurs de ressources et de créer des groupes de ressources, une ressource Kubernetes compatible Azure Arc, une extension de cluster, un emplacement personnalisé, un environnement connecté Container Apps, et éventuellement un espace de travail Log Analytics.
  • L’Azure CLI et ses prérequis.
  • Une kubectl version compatible avec votre cluster Kubernetes et l’accès réseau depuis votre poste de travail au serveur API Kubernetes.
  • Un cluster Kubernetes pris en charge avec des nœuds de travail Linux amd64 et un accès d’administrateur du cluster via le contexte kubectl actif.
  • Une implémentation fonctionnelle du service Kubernetes LoadBalancer .
  • Connectivité sortante vers les points de terminaison requis par Azure Arc et Container Apps.
  • Un CPU et une mémoire suffisants allouables pour les charges de travail d’extension et d’application.

Avant de changer un cluster de production, consultez le déploiement de Plan a Container Apps sur Kubernetes compatible Azure Arc.

Programme d’installation

Installez les extensions Azure CLI suivantes.

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

Inscrivez les espaces de noms requis.

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

Définissez des variables d’environnement en fonction de votre déploiement de cluster Kubernetes.

GROUP_NAME="my-arc-cluster-group"
AKS_CLUSTER_GROUP_NAME="my-aks-cluster-group"
AKS_NAME="my-aks-cluster"
LOCATION="eastus"

Créer un cluster connecté

Si vous avez déjà un cluster Kubernetes compatible Azure Arc dans $GROUP_NAME, ne créez pas d'autre cluster. Définissez CLUSTER_NAME le nom de ressource existante du cluster connecté, vérifiez l’accès avec kubectl get nodes, et continuez à créer un espace de travail Log Analytics.

Les étapes suivantes créent un cluster AKS et le connectent à Azure Arc. Ce chemin est uniquement destiné à être un environnement d’évaluation hébergé sur Azure pour le tutoriel. Pour un cluster local ou multicloud existant, suivez Quickstart : Connectez un cluster Kubernetes existant à Azure Arc, puis revenez à ce tutoriel.

  1. Créez un cluster dans le service Azure Kubernetes.

    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-keys
    
  2. Récupérez le fichier kubeconfig et testez votre connexion au cluster. Par défaut, le fichier kubeconfig est enregistré dans ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Créez un groupe de ressources pour accueillir vos ressources Azure Arc.

    az group create --name $GROUP_NAME --location $LOCATION
    
  4. Connectez le cluster que vous avez créé à Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Attendez que le cluster connecté termine de provisionner.

    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 table
    

    Continue seulement lorsque State est Succeeded et Connectivity est Connected. Si la commande expire, consultez Le cluster connecté n’est pas prêt.

Créer un espace de travail Log Analytics

Un espace de travail Log Analytics donne accès aux journaux d’application pour les applications conteneurs fonctionnant dans le cluster Kubernetes compatible Azure Arc. Un espace de travail Log Analytics est optionnel mais recommandé pour le diagnostic applicatif.

Important

Décidez si vous souhaitez utiliser Log Analytics avant d’installer l’extension Container Apps. Fournissez la configuration Log Analytics lors de l’installation de l’extension. Vous ne pouvez pas ajouter la configuration de Log Analytics à cette instance d'extension plus tard.

  1. Créez un espace de travail 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_NAME
    
  2. Exécutez les commandes suivantes pour obtenir l’ID d’espace de travail encodé et la clé partagée pour un espace de travail Log Analytics existant. Vous aurez besoin de ces informations à l’étape suivante.

    Caution

    La clé partagée de l’espace de travail est une attestation. Ne l’imprimez pas, ne le mettez pas en contrôle de version, ne le stockez pas dans l’historique du shell, ni ne l’incluez dans les packs de support. Les commandes suivantes le gardent dans une variable shell et le transmettent à Azure comme paramètre d’extension protégée.

    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
    

Vérifiez s’il existe une installation de KEDA existante

L’extension Container Apps installe KEDA. Avant d’installer l’extension, vérifiez le cluster pour des composants KEDA existants :

kubectl get deployments -A -o custom-columns="NAMESPACE:.metadata.namespace,NAME:.metadata.name"
kubectl get crd scaledobjects.keda.sh

Inspectez la liste de déploiement des composants KEDA. Si l’une des commandes identifie une installation KEDA existante, arrêtez et confirmez la configuration de coexistence prise en charge avant de continuer. Ne supprimez pas l’installation KEDA existante ni n’appliquez les paramètres d’extension non documentés car d’autres charges de travail pourraient en dépendre.

Installez l’extension Container Apps

Important

Si vous déployez sur AKS via Azure Local, assurez-vous de configurer HAProxy ou un équilibreur de charge personnalisé avant d'essayer d'installer l'extension. Vous pouvez aussi configurer az containerapp arc setup-core-dns --distro AksAzureLocal CoreDNS pour les contextes locaux.

  1. Définissez les noms de l’extension Container Apps, de son espace de noms Kubernetes et de l’environnement connecté.

    • EXTENSION_NAMEidentifie la ressource d’extension de cluster Azure.
    • NAMESPACE est créé dans le cluster Kubernetes et contient des composants d’extension ainsi que des ressources gérées par les applications conteneures. Le appsNamespace paramètre doit correspondre exactement à l’espace de noms de la version de l’extension.
    • CONNECTED_ENVIRONMENT_NAME devient partie intégrante du domaine d’application par défaut. Utilisez un nom compatible DNS, unique au sein du groupe de ressources.

    N’installez pas de charges de travail non liées dans l’espace de noms des extensions.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Installez l’extension Container Apps sur votre cluster connecté Azure Arc, avec Log Analytics activé. Log Analytics ne peut pas être ajouté à l’extension ultérieurement.

    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}"
    

    Remarque

    Pour installer l’extension sans intégration Log Analytics, supprimez les trois paramètres liés à la journalisation de la commande.

    Pour un cluster utilisant un équilibreur de charge personnalisé, définissez loadBalancerIp une adresse réservée à l’entrée des applications conteneurs :

    --configuration-settings "loadBalancerIp=<LOAD_BALANCER_INGRESS_IP>"
    

    L’adresse doit être accessible par les clients d’application et ne doit pas être attribuée à un autre service. Après l’installation, utilisez kubectl get service -n $NAMESPACE -o wide pour vérifier que le service d’entrée d’extension rapporte cette adresse. Configurez le DNS joker uniquement après l’attribution de l’adresse. Voir les exigences DNS.

    Le tableau suivant décrit les différents paramètres --configuration-settings inclus lors de l’exécution de la commande :

    Paramètre Descriptif
    Microsoft.CustomLocation.ServiceAccount Compte de service créé pour l’emplacement personnalisé. Définissez la valeur sur default.
    appsNamespace Espace de noms utilisé pour créer les définitions et révisions d’application. Il doit correspondre à l’espace de noms de la version de l’extension.
    clusterName Nom de l’environnement Kubernetes de l’extension Container Apps créé par rapport à cette extension.
    logProcessor.appLogs.destination facultatif. Destination des journaux d’application. Accepte log-analytics ou none. Le choix d’aucun désactive les journaux de plateforme.
    logProcessor.appLogs.logAnalyticsConfig.customerId Obligatoire uniquement quand logProcessor.appLogs.destination a la valeur log-analytics. L’ID de l’espace de travail Log Analytics codé en base64. Ce paramètre doit être configuré en tant que paramètre protégé.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Obligatoire uniquement quand logProcessor.appLogs.destination a la valeur log-analytics. La clé partagée de l’espace de travail Log Analytics codée en base64. Ce paramètre doit être configuré en tant que paramètre protégé.
    loadBalancerIp Adresse IP d’entrée de l’équilibreur de charge.
  3. Enregistrez la propriété id de l’extension Container Apps pour plus tard.

    EXTENSION_ID=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query id \
        --output tsv)
    
  4. Attendez que l’extension soit complètement installée avant de continuer.

    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 table
    

    Continuer seulement lorsque State est Succeeded. Si la commande expire ou signale une défaillance, voir Échecs ou expiration de l’installation de l’extension.

  5. Examinez les charges de travail de l’extension, les services et les événements récents :

    kubectl get pods -n $NAMESPACE
    kubectl get services -n $NAMESPACE -o wide
    kubectl get events -n $NAMESPACE --sort-by=.lastTimestamp
    

    Ne créez pas l’emplacement personnalisé alors qu’un pod d’extension est en attente, redémarre à plusieurs reprises ou n’est pas prêt de façon inattendue. Pour en savoir plus sur ces pods et leur rôle dans le système, consultez Vue d’ensemble d’Azure Arc.

  6. Si vous configurez Log Analytics, effacez les variables locales qui contiennent la clé de l’espace de travail.

    unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
    

Créer un emplacement personnalisé

L’emplacement personnalisé est un emplacement Azure que vous attribuez à l’environnement connecté Azure Container Apps.

  1. Définissez les variables d’environnement suivantes pour le nom souhaité de l’emplacement personnalisé et pour l’ID du cluster connecté 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)
    
  2. Créez l’emplacement personnalisé :

    az customlocation create \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --host-resource-id $CONNECTED_CLUSTER_ID \
        --namespace $NAMESPACE \
        --cluster-extension-ids $EXTENSION_ID
    

    Remarque

    Si vous avez du mal à créer un emplacement personnalisé dans votre cluster, il se peut que vous ayez besoin d’activer la fonction de localisation personnalisée sur votre cluster. Activez cette fonctionnalité lorsque vous vous connectez à la CLI en utilisant un principal de service ou un utilisateur Microsoft Entra avec des permissions restreintes sur la ressource du cluster.

  3. Attends que le site personnalisé termine le provisionnement et enregistre son identifiant de ressource.

    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 table
    

    Vérifiez que State est Succeeded, que Host identifie le cluster connecté souhaité et que Namespace correspond à $NAMESPACE. Si le provisionnement échoue, consultez La création d’un emplacement personnalisé échoue.

Créez l’environnement connecté Azure Container Apps

Avant de commencer à créer des applications à l’emplacement personnalisé, vous avez besoin d’un environnement connecté à Azure Container Apps.

  1. Créez l’environnement connecté Container Apps :

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. Attends que l’environnement connecté termine de provisionner.

    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 yaml
    

    Continuez seulement lorsque State est Succeeded et CustomLocation correspond à l’emplacement personnalisé que vous avez créé dans ce tutoriel. Sauvegardez l’affichage Domain pour la configuration DNS de l’application. Si le provisionnement échoue, voir La création de l’environnement connecté échoue.

Étapes suivantes