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.
Passez en revue les exigences et limitations de la préversion publique. Les exigences en matière de cluster sont particulièrement importantes.
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 vous aident à 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.
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
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
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
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
Validez la connexion à l’aide de la commande suivante. Elle devrait afficher la propriété
provisioningState
avec la valeurSucceeded
. 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.
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
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
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 fait 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
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 est 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 est créé par rapport à cette extension. keda.enabled
Indique si KEDA doit être installé sur le cluster Kubernetes. Accepte true
oufalse
.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éedefault
, 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. Accepte ReadWriteOnce
ouReadWriteMany
.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 deappsNamespace
.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
ounone
. Le choix d’aucun désactive les journaux de plateforme.logProcessor.appLogs.logAnalyticsConfig.customerId
Obligatoire uniquement quand logProcessor.appLogs.destination
a la valeurlog-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 valeurlog-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é.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)
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.
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)
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.
Vérifiez que l’emplacement personnalisé a été correctement créé avec la commande suivante. La sortie devrait afficher la propriété
provisioningState
avec la valeurSucceeded
. 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
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.
Créez l’environnement Kubernetes App Service :
az appservice kube create \ --resource-group $GROUP_NAME \ --name $KUBE_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID
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 valeurSucceeded
. 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