Tutoriel : activer Azure Container Apps sur Kubernetes avec Azure Arc (préversion)


Avec les clusters Kubernetes avec Azure Arc, vous pouvez créer un emplacement personnalisé activé par Container Apps dans votre cluster Kubernetes local ou cloud pour déployer vos applications Azure Container Apps comme vous le feriez dans n’importe quelle autre région.

Ce tutoriel vous montre comment activer Azure Container Apps sur votre cluster Kubernetes avec Arc. Ce didacticiel vous apprendra à effectuer les opérations suivantes :

  • Créez un cluster connecté.
  • Créez un espace de travail Log Analytics.
  • Installez l’extension Container Apps.
  • Créer un emplacement personnalisé.
  • Créez l’environnement connecté Azure Container Apps.

Notes

Pendant la préversion, Azure Container Apps sur Arc ne sont pas pris en charge dans les configurations de production. Cet article fournit un exemple de configuration à des fins d’évaluation uniquement.

Ce didacticiel utilise Azure Kubernetes Service (AKS) pour fournir des instructions concrètes pour la configuration d’un environnement à partir de zéro. Toutefois, dans le cas d’une charge de travail de production, vous ne souhaitez probablement pas activer Azure Arc sur un cluster AKS, car il est déjà géré dans Azure.

Prérequis

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.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é

Les étapes suivantes vous aideront à comprendre le service, mais pour les déploiements de production, elles doivent être affichées sous forme d’illustration et non de manière normative. Consultez Démarrage rapide : Connecter un cluster Kubernetes existant à Azure Arc pour obtenir des instructions générales sur la création d’un cluster Kubernetes compatible avec Azure Arc.

  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. Validez la connexion à l’aide de la commande suivante. Elle devrait afficher la propriété provisioningState avec la valeur Succeeded. Si ce n’est pas le cas, réexécutez la commande après une minute.

    az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
    

Créer un espace de travail Log Analytics

Un espace de travail Log Analytics permet d’accéder aux journaux pour les applications Container Apps exécutées dans le cluster Kubernetes avec Azure Arc. Un espace de travail Log Analytics est facultatif, mais recommandé.

  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.

    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
    

Installez l’extension Container Apps

Important

Si vous effectuez un déploiement sur AKS-HCI, vérifiez que vous avez configuré HAProxy ou un équilibreur de charge personnalisé avant de tenter d’installer l’extension.

  1. Définissez les variables d’environnement suivantes pour le nom souhaité de l’extension Container Apps, l’espace de noms de cluster dans lequel les ressources doivent être approvisionnées, et le nom de l’environnement Azure Container Apps. Choisissez un nom unique pour <connected-environment-name>. Le nom de l’environnement connecté fait partie du nom de domaine de l’application que vous allez créer dans l’environnement connecté Azure Container Apps.

    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 "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${AKS_CLUSTER_GROUP_NAME}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    Notes

    Pour installer l’extension sans l’intégration de Log Analytics, supprimez les trois paramètres --configuration-settings de la commande.

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

    Paramètre Description
    Microsoft.CustomLocation.ServiceAccount Compte de service créé pour l’emplacement personnalisé. Il est recommandé qu’il soit défini sur la valeur 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 qui sera 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. ID d’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. Clé partagée d’espace de travail Log Analytics codé en base64. Ce paramètre doit être configuré en tant que paramètre protégé.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Nom du groupe de ressources dans lequel réside le cluster Azure Kubernetes Service. Valide et obligatoire uniquement lorsque le cluster sous-jacent est un cluster Azure Kubernetes Service.
  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. Il se peut que vous deviez faire attendre votre session de terminal jusqu’à ce que l’opération soit terminée en exécutant la commande suivante :

    az resource wait --ids $EXTENSION_ID --custom "properties.provisioningState!='Pending'" --api-version "2020-07-01-preview"
    

Vous pouvez utiliser kubectl pour afficher les pods créés dans votre cluster Kubernetes :

kubectl get pods -n $NAMESPACE

Pour en savoir plus sur ces pods et leur rôle dans le système, consultez Vue d’ensemble d’Azure Arc.

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
    

    Notes

    Si vous rencontrez des problèmes pour créer un emplacement personnalisé dans votre cluster, vous devrez peut-être activer la fonctionnalité emplacement personnalisé pour votre cluster. Cela est nécessaire si vous êtes connecté à l’interface CLI à l’aide d’un principal de service ou au moyen d’un utilisateur Microsoft Entra disposant d’autorisations restreintes sur la ressource de cluster.

  3. Vérifiez que l’emplacement personnalisé a été correctement créé avec la commande suivante. La sortie devrait afficher la propriété provisioningState avec la valeur Succeeded. Si ce n’est pas le cas, réexécutez la commande après une minute.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Enregistrez l’ID d’emplacement personnalisé pour l’étape suivante.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

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. Vérifiez que l’environnement connecté Container Apps est correctement créé avec la commande suivante. La sortie devrait afficher la propriété provisioningState avec la valeur Succeeded. Si ce n’est pas le cas, réexécutez la commande après une minute.

    az containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME
    

Étapes suivantes