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.
Rappelez-vous, dans l’exemple de suivi de drones, du développement par votre équipe d’un nouveau service de modélisation prédictive qui traite les informations de plans de vol dans des conditions météorologiques extrêmes et crée des itinéraires de vol optimaux. 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 ensuite configurer le cluster pour prendre en charge plusieurs pools de nœuds et permettre aux clusters de mettre à l’échelle les nœuds dans les pools de nœuds. Ensuite, vous ajoutez un deuxième pool de nœuds pour prendre des charges de travail utilisateur avec un nombre de nœuds dynamiques. Enfin, vous effectuez une mise à l’échelle sur zéro du nombre de nœuds pour réduire le coût des nœuds utilisés 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 réutilisez les valeurs créées ici tout au long des exercices de ce module. Enregistrez la sortie pour l’utiliser ultérieurement.
Choisissez une région pour héberger votre groupe de ressources. Les fonctionnalités des exercices d’après ne sont pas disponibles dans toutes les régions. C’est pourquoi nous vous recommandons d’utiliser eastus comme région. Si vous choisissez d’utiliser une valeur différente, changez la valeur de
REGION_NAME
.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 le terminal Cloud Shell et sélectionnez Coller ou utilisez le raccourci clavier Maj+Inser (⌘+V sur macOS).
Vous pouvez vérifier chaque valeur en exécutant la commande
echo
, par exempleecho $REGION_NAME
.Notez votre
AKS_CLUSTER_NAME
. Tout au long des exercices, vous utilisez cette valeur pour les paramètres de nettoyage et de configuration de votre cluster.echo $AKS_CLUSTER_NAME
Créez un groupe de ressources nommé rg-akscostsaving. Vous 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
Avec le groupe de ressources créé, vous pouvez créer des clusters AKS au sein du groupe. La première étape consiste à obtenir la version de Kubernetes dans la région que vous avez sélectionnée. Cette version est définie pour configurer votre cluster.
Pour obtenir la version de Kubernetes, exécutez la commande
az aks get-versions
. La requête suivante retourne une version de Kubernetes qui n’est pas une préversion. Stockez cette valeur dans une variable Bash appelé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 "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
Exécutez la commande
az aks create
pour créer le cluster AKS. Le cluster s’exécute avec deux nœuds dans le pool de nœuds système. Cette commande peut prendre quelques minutes.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
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. 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
. Rappelez-vous de la description précédente que 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 automatiquement attribué.
Ajouter un pool de nœuds
Votre cluster a un seul pool de nœuds. Ajoutez un deuxième pool de nœuds en exécutant la commande
az aks nodepool add
. Exécutez 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
Vous exécutez la commande az aks nodepool scale
pour effectuer une mise à l’échelle manuelle des nœuds d’un pool de nœuds.
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 définie sur 0 et que la valeur enableAutoScaling
est définie sur null
. Pour planifier des charges de travail, vous devez augmenter manuellement le nombre de nœuds pour ce pool de nœuds parce que la création de nœuds ne se produit pas automatiquement par défaut.
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
.
Exécutez
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. Exécutez la commandeaz aks get-credentials
pour configurer le contexte 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
Répertoriez les nœuds de vos pools de nœuds.
kubectl get nodes
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.