Configurer un cluster Kubernetes activé pour Azure Arc pour exécuter App Service, Functions et Logic Apps (préversion)

Si vous disposez d’un cluster Kubernetes avec Azure Arc, vous pouvez l’utiliser pour créer un emplacement personnalisé avec App Service et y déployer des applications web, des applications de fonction et des applications logiques.

Kubernetes avec Azure Arc vous permet de rendre votre cluster Kubernetes local ou cloud visible pour App Service, Functions et Logic Apps dans Azure. Vous pouvez créer une application et la déployer comme une autre région Azure.

Prérequis

Si vous n’avez pas encore de compte Azure, inscrivez-vous aujourd’hui pour bénéficier d’un compte gratuit.

Ajouter des extensions Azure CLI

Lancez l’environnement Bash dans Azure Cloud Shell.

Comme ces commandes CLI ne font pas encore partie de l’ensemble principal des commandes CLI, ajoutez-les avec les commandes suivantes.

az extension add --upgrade --yes --name connectedk8s
az extension add --upgrade --yes --name k8s-extension
az extension add --upgrade --yes --name customlocation
az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

Créer un cluster connecté

Notes

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 souhaiterez probablement pas activer Azure Arc sur un cluster AKS, car il est déjà géré dans Azure. Les étapes ci-dessous 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 Azure Kubernetes Service avec une adresse IP publique. Remplacez <group-name> par le nom de groupe de ressources souhaité.

    AKS_CLUSTER_GROUP_NAME="<group-name>" # Name of resource group for the AKS cluster
    AKS_NAME="${aksClusterGroupName}-aks" # Name of the AKS cluster
    RESOURCE_LOCATION="eastus" # "eastus" or "westeurope"
    
    az group create -g $AKS_CLUSTER_GROUP_NAME -l $RESOURCE_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. Remplacez <group-name> par le nom de groupe de ressources souhaité.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_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

Bien qu’un espace de travail Log Analytics ne soit pas requis pour exécuter App service dans Azure Arc, il s’agit de la manière dont les développeurs peuvent obtenir des journaux d’applications pour leurs applications s’exécutant dans le cluster Kubernetes avec Azure Arc.

  1. Par souci de simplicité, créez l’espace de travail maintenant.

    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
    

Installer l’extension App Service

  1. Définissez les variables d’environnement suivantes pour le nom souhaité de l’extension App service, l’espace de noms de cluster dans lequel les ressources doivent être approvisionnées, et le nom de l’environnement Kubernetes App service. Choisissez un nom unique pour <kube-environment-name>, car il fera partie du nom de domaine pour l’application créée dans l’environnement Kubernetes App Service.

    EXTENSION_NAME="appservice-ext" # Name of the App Service extension
    NAMESPACE="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    KUBE_ENVIRONMENT_NAME="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  2. Installez l’extension App Service sur votre cluster connecté Azure Arc, avec Log Analytics activé. Là encore, si Log Analytics n’est pas requis, vous ne pouvez pas l’ajouter à l’extension ultérieurement. Il est donc plus facile de le faire maintenant.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.Web.Appservice' \
        --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=${KUBE_ENVIRONMENT_NAME}" \
        --configuration-settings "keda.enabled=true" \
        --configuration-settings "buildService.storageClassName=default" \
        --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" \
        --configuration-settings "customConfigMap=${NAMESPACE}/kube-environment-config" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${aksClusterGroupName}" \
        --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}"
    

    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 qui doit être créé pour l’emplacement personnalisé qui sera créé. Il est recommandé de définir celui-ci sur la valeur default.
    appsNamespace Espace de noms pour approvisionner les définitions et les pod d’application. Doit correspondre à l’espace de noms de la version de l’extension.
    clusterName Nom de l’environnement Kubernetes App Service qui sera créé par rapport à cette extension.
    keda.enabled Indique si KEDA doit être installé sur le cluster Kubernetes. Accepte true ou false.
    buildService.storageClassName Nom de la classe de stockage pour le service de build qui stocke les artefacts de build. Une valeur telle que default spécifie une classe nommée default, non une classe marquée comme par défaut. La valeur par défaut est une classe de stockage valide pour AKS et AKS HCI, mais il se peut que ce ne soit pas le cas pour d’autres distributions/plateformes.
    buildService.storageAccessMode Mode d’accès à utiliser avec la classe de stockage nommée ci-dessus. Accepte ReadWriteOnce ou ReadWriteMany.
    customConfigMap Nom de la carte de configuration qui sera définie par l’environnement Kubernetes App Service. Actuellement, il doit s’agir de <namespace>/kube-environment-config, en remplaçant <namespace> par la valeur de appsNamespace ci-dessus.
    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.
    logProcessor.appLogs.destination facultatif. 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é.
  3. Enregistrez la propriété id de l’extension App service 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.installState!='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 Pods créés par l’extension App Service.

Créer un emplacement personnalisé

L’emplacement personnalisé dans Azure est utilisé pour attribuer l’environnement Kubernetes App service.

  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éer l’environnement Kubernetes App Service

Avant de pouvoir commencer à créer des applications à l’emplacement personnalisé, vous avez besoin d’un environnement Kubernetes App service.

  1. Créez l’environnement Kubernetes App Service :

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. Vérifiez que l’environnement Kubernetes App Service 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 appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME
    

Étapes suivantes