Exercice : configurer plusieurs nœuds et activer la mise à l’échelle de zéro sur un cluster AKS
Le service Azure Kubernetes vous permet de créer des pools de nœuds différents pour faire correspondre des charges de travail spécifiques aux nœuds en cours d’exécution dans chaque pool de nœuds.
Reprenons l’exemple de suivi de drones. Votre équipe a développé un nouveau service de modélisation prédictive qui traite les informations de trajectoire de vol dans des conditions météorologiques extrêmes et crée des trajectoires de vol optimales. Ce service requiert la prise en charge de machines virtuelles basées sur GPU et ne s’exécute que certains jours de la semaine. L’équipe veut s’assurer qu’aucune machine virtuelle n’est utilisée quand le service ne s’exécute pas.
Ici, vous allez créer un cluster Kubernetes géré par Azure Kubernetes Service (AKS). Vous allez configurer le cluster pour prendre en charge plusieurs pools de nœuds et vous assurer que le cluster vous permet de mettre à l’échelle les nœuds dans les pools de nœuds. Ensuite, vous allez ajouter un deuxième pool de nœuds pour prendre les charges de travail utilisateur. Enfin, vous allez mettre à l’échelle de zéro le nombre de nœuds dans le deuxième pool de nœuds pour réduire le coût du nœud utilisé dans votre cluster AKS.
Créer un groupe de ressources
Connectez-vous à Azure Cloud Shell à l’aide de votre compte Azure. Sélectionnez la version Bash de Cloud Shell.
Vous allez réutiliser certaines valeurs des exercices de ce module. Par exemple, vous devez choisir une région dans laquelle créer un groupe de ressources. Il se peut que certaines fonctionnalités que vous allez ajouter dans des exercices ultérieurs ne soient pas disponibles dans la région que vous sélectionnez. Dès lors, nous vous recommandons de sélectionner USA Est. Si vous choisissez une autre valeur, n’oubliez pas de noter la valeur à utiliser avec les exercices de ce module.
Exécutez les commandes suivantes pour inscrire vos variables :
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Conseil
Vous pouvez utiliser le bouton Copier pour copier des commandes dans le Presse-papiers. Pour coller, cliquez avec le bouton droit sur une nouvelle ligne dans la fenêtre Cloud Shell et sélectionnez Coller, ou utilisez le raccourci clavier Maj+Inser (⌘+V sur macOS).
Vous pouvez vérifier chaque valeur à l’aide de la commande
echo
, par exempleecho $REGION_NAME
.Notez le nom de votre nouveau cluster. Vous allez utiliser cette valeur ultérieurement, lorsque vous nettoierez les ressources, et dans les paramètres de configuration du cluster.
echo $AKS_CLUSTER_NAME
Créez un groupe de ressources nommé rg-akscostsaving. Déployez toutes les ressources créées dans ces exercices dans ce groupe de ressources. Un groupe de ressources unique facilite le nettoyage des ressources une fois le module terminé.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Créer le cluster AKS
Une fois le groupe de ressources en place, vous pouvez créer le cluster AKS. La première étape consiste à obtenir la version la plus récente, hors préversion, de Kubernetes dans la région que vous avez sélectionnée. Vous allez utiliser cette version lors la configuration du cluster.
Pour obtenir la version la plus récente, hors préversion, de Kubernetes, utilisez la commande
az aks get-versions
. Stockez la valeur retournée par la commande dans une variable Bash nomméeVERSION
. Pour récupérer et stocker le numéro de version, exécutez la commande suivante :VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query 'orchestrators[?!isPreview] | [-1].orchestratorVersion' \ --output tsv)
Exécutez la commande
az aks create
présentée plus loin dans cette étape pour créer le cluster AKS. Le cluster exécutera la dernière version de Kubernetes avec deux nœuds dans le pool de nœuds système. Cette commande peut prendre quelques minutes.La commande
az aks create
possède plusieurs paramètres qui permettent une configuration précise de votre cluster Kubernetes. Il existe deux paramètres importants pour la configuration de la prise en charge correcte dans votre cluster de la mise à l’échelle et de pools de nœuds multiples :Paramètre et valeur Description --load-balancer-sku standard
La prise en charge de l’équilibreur de charge par défaut dans AKS est basic
. L’équilibreur de chargebasic
n’est pas pris en charge lorsque vous utilisez des pools de nœuds multiples. Définissez la valeur surstandard
.--vm-set-type VirtualMachineScaleSets
Dans AKS, l’utilisation des fonctionnalités de mise à l’échelle implique des groupes de machines virtuelles identiques. Ce paramètre active la prise en charge des groupes identiques. az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --location $REGION_NAME \ --kubernetes-version $VERSION \ --node-count 2 \ --load-balancer-sku standard \ --vm-set-type VirtualMachineScaleSets \ --generate-ssh-keys
Notez que deux nœuds sont configurés dans le pool de nœuds par défaut à l’aide du paramètre
--node-count 2
. Comme nous l’avons vu précédemment, les services système essentiels s’exécutent dans ce pool de nœuds système. Il est important que les clusters de production utilisent au moins--node-count 3
pour garantir la fiabilité des opérations du cluster. Nous n’utilisons ici que deux nœuds compte tenu des coûts dans cet exercice.Exécutez la commande
az aks nodepool list
pour répertorier les pools de nœuds de votre nouveau cluster :az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Voici un exemple de sortie de la commande :
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Notez que le
mode
du pool de nœuds est défini surSystem
et que lename
est attribué automatiquement.
Ajouter un pool de nœuds
Votre cluster a un seul pool de nœuds. Ajoutez un deuxième pool de nœuds à l’aide de la commande
az aks nodepool add
. Utilisez la commande de cette étape pour créer un pool de nœuds utilisateur avec trois nœuds et le nombatchprocpl
. Gardez à l’esprit que les noms de pools de nœuds doivent commencer par une lettre minuscule et ne contenir que des caractères alphanumériques. Les noms de pools de nœuds sont limités à 12 caractères pour les pools de nœuds Linux et à six caractères pour les pools de nœuds Windows.Exécutez la commande suivante :
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Exécutez la commande
az aks nodepool list
pour afficher le nouveau pool de nœuds dans votre nouveau cluster :az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Voici un exemple de sortie de la commande :
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl", "mode": "User", "name": "batchprocpl", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }, { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Notez que le
mode
du pool de nœuds est défini surUser
et que lename
estbatchprocpl
.
Mettre à l’échelle de zéro le nombre de nœuds du pool
Utilisez la commande az aks nodepool scale
pour mettre à l’échelle manuellement les nœuds d’un pool.
Exécutez la commande az aks nodepool scale
et utilisez le paramètre --node-count
pour définir la valeur 0 pour le nombre de nœuds.
Voici un exemple de la commande :
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Voici un exemple de sortie de la commande :
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 0,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "User",
"name": "batchprocpl",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
"nodeLabels": null,
"nodeTaints": null,
"orchestratorVersion": "1.17.9",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "rg-akscostsaving",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
Notez que la valeur du paramètre count
du pool de nœuds est 0 et que la valeur enableAutoScaling
est null
dans le résultat retourné. Vous devez augmenter manuellement le nombre de nœuds pour ce pool de nœuds lorsque vous avez besoin de planifier des charges de travail ici, car la création de nœuds ne se produit pas automatiquement.
Configurer le contexte Kubernetes
Dans la sortie de la commande précédente, le nombre de pools de nœuds a la valeur 0. Vous pouvez vérifier les nœuds disponibles dans le cluster en exécutant la commande kubectl get nodes
.
Vous utilisez
kubectl
pour interagir avec le serveur d’API de votre cluster. Vous devez configurer un contexte de cluster Kubernetes pour autoriserkubectl
à se connecter. Le contexte contient l’adresse du cluster, un utilisateur et un espace de noms. Utilisez la commandeaz aks get-credentials
pour configurer le contexte du Kubernetes dans Cloud Shell.Récupérez les informations d’identification du cluster en exécutant la commande :
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Voici un exemple de sortie de la commande.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Exécutez la commande
kubectl get nodes
pour répertorier les nœuds dans vos pools de nœuds.Voici un exemple de sortie de la commande :
NAME STATUS ROLES AGE VERSION aks-nodepool1-37990379-vmss000000 Ready agent 32m v1.17.9 aks-nodepool1-37990379-vmss000001 Ready agent 32m v1.17.9
Notez que, même si la commande
az aks nodepool list
répertorie deux pools de nœuds, il n’y a que deux nœuds disponibles dans le cluster, qui proviennent tous deux du poolnodepool1
.
Pour optimiser les coûts sur AKS lorsque vous gérez des demandes de charge de travail directement, une bonne stratégie consiste à :
- Mettre à l’échelle manuellement le nombre de nœuds dans les pools de nœuds.
- Mettre à l’échelle les pools de nœuds utilisateur coûteux et basés sur NV à zéro.
Examinons une stratégie dans laquelle vous devez mettre à l’échelle des nœuds, mais ne contrôlez pas directement la demande.
Besoin d'aide ? Consultez notre guide de résolution des problèmes ou fournissez des commentaires spécifiques en signalant un problème.