Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez modifier la taille de vos machines virtuelles pour prendre en charge un nombre croissant de déploiements ou pour exécuter une charge de travail plus importante. Le redimensionnement des instances AKS n’est pas directement pris en charge lors de l’utilisation de Virtual Machine Scale Sets dans AKS, comme indiqué dans les stratégies de prise en charge d’AKS :
Les nœuds d’agent AKS sont affichés dans le portail Azure en tant que ressources Azure IaaS standard. Toutefois, ces machines virtuelles sont déployées dans un groupe de ressources Azure personnalisé (portant généralement le préfixe MC_*). Vous ne pouvez pas effectuer de personnalisations directes sur ces nœuds à l’aide des API ou ressources IaaS. Toutes les modifications personnalisées qui ne sont pas effectuées via l’API AKS ne sont pas conservées par le biais d’une mise à niveau, d’une mise à l’échelle, d’une mise à jour ou d’un redémarrage.
Dans cet article, vous allez apprendre la méthode recommandée pour redimensionner un pool de nœuds en créant un pool de nœuds avec la taille de référence SKU souhaitée, le cordon et le drainage des nœuds existants, puis en supprimant le pool de nœuds existant.
Important
Cette méthode est spécifique aux clusters AKS basés sur des Virtual Machine Scale Sets. Lorsque vous utilisez des pools de nœuds basés sur des machines virtuelles, vous pouvez facilement mettre à jour les tailles de machine virtuelle dans un pool de nœuds existant à l’aide d’une seule commande Azure CLI et avoir plusieurs tailles de machine virtuelle dans le même pool de nœuds. Pour plus d’informations, consultez la documentation sur les pools de nœuds de machines virtuelles.
Créer un pool de nœuds avec la référence SKU souhaitée
Remarque
Chaque cluster AKS doit contenir au moins un pool de nœuds système avec au moins un nœud. Dans cet exemple, nous utilisons un --mode de System pour ajouter un pool de nœuds système afin de remplacer le pool de nœuds système que nous voulons redimensionner. Vous pouvez mettre à jour le mode d’un pool de nœuds à tout moment. Vous pouvez également ajouter un pool de nœuds utilisateur en définissant --mode sur User.
Lors du redimensionnement, veillez à prendre en compte toutes les exigences de charge de travail, telles que les zones de disponibilité, et configurez votre pool de nœuds VMSS en conséquence. Il se peut que vous deviez modifier la commande suivante pour qu'elle réponde au mieux à vos besoins. Pour obtenir la liste complète des options de configuration, consultez la page de référence az aks nodepool add.
Créez un pool de nœuds à l’aide de la commande
az aks nodepool add. Dans cet exemple, nous créons un pool de nœuds,mynodepoolavec trois nœuds et laStandard_DS3_v2référence SKU de machine virtuelle pour remplacer un pool de nœuds existant,nodepool1qui a la référence SKU de machineStandard_DS2_v2virtuelle.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 3 \ --node-vm-size Standard_DS3_v2 \ --mode System \ --no-waitLa création du nouveau pool de nœuds prend quelques minutes.
Obtenez l’état du nouveau pool de nœuds à l’aide de la
kubectl get nodescommande.kubectl get nodesVotre sortie doit ressembler à l’exemple de sortie suivant, montrant à la fois le nouveau pool
mynodepoolde nœuds et le pool denodepool1nœuds existant :NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 23m v1.21.9 aks-nodepool1-12345678-vmss000000 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 10d v1.21.9
Isoler les nœuds existants
L’isolement marque les nœuds spécifiés comme non planifiables et empêche l’ajout d’autres pods aux nœuds.
Obtenez les noms des nœuds que vous souhaitez mettre en cordon à l’aide de la
kubectl get nodescommande.kubectl get nodesVotre sortie doit ressembler à l’exemple de sortie suivant, montrant les nœuds dans le pool de nœuds existant
nodepool1que vous souhaitez isoler.NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 7d21h v1.21.9Cordon des nœuds existants à l’aide de la
kubectl cordoncommande, en spécifiant les nœuds souhaités dans une liste séparée par espace. Par exemple:kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002Votre sortie doit ressembler à l’exemple de sortie suivant, montrant que les nœuds sont cordonnés :
node/aks-nodepool1-12345678-vmss000000 cordoned node/aks-nodepool1-12345678-vmss000001 cordoned node/aks-nodepool1-12345678-vmss000002 cordoned
Drainer les nœuds existants
Important
Pour drainer correctement les nœuds et supprimer les pods en cours d’exécution, assurez-vous que chaque PodDisruptionBudgets (PDB) autorise le déplacement d’au moins 1 réplica de pod à la fois. Autrement, l'opération d'évacuation/d'éviction échoue. Pour vérifier cela, vous pouvez exécuter kubectl get pdb -A et vérifier que ALLOWED DISRUPTIONS est au moins à la version 1 ou plus.
Lorsque vous effectuez un drainage de nœuds, les pods s’y exécutant sont supprimés et recréés sur les autres nœuds planifiables.
Videz les nœuds existants à l'aide de la commande
kubectl drainavec les indicateurs--ignore-daemonsetset--delete-emptydir-data, en spécifiant les nœuds souhaités dans une liste séparée par des espaces. Par exemple:Important
L’utilisation de
--delete-emptydir-dataest requise pour supprimer les podscorednsetmetrics-servercréés par AKS. Si vous n’utilisez pas cet indicateur, vous obtenez une erreur. Pour plus d’informations, consultez la documentation sur emptydir.kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-dataUne fois l’opération de drainage terminée, tous les pods (autres que ceux contrôlés par les ensembles de démons) doivent s’exécuter sur le nouveau pool de nœuds. Vous pouvez le vérifier à l’aide de la commande
kubectl get pods.kubectl get pods -o wide -A
Résoudre des problèmes d’éviction de pods
Vous pouvez rencontrer l’erreur suivante lors du drainage des nœuds :
Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
Par défaut, votre cluster dispose de budgets de perturbation de pod gérés par AKS (tels que coredns-pdb ou konnectivity-agent) avec un MinAvailable de 1. Par exemple, si deux coredns pods fonctionnent, un seul peut être perturbé à la fois. Si l’un d’eux est recréé et n’est pas disponible, vous ne pouvez pas supprimer l’autre podcoredns en raison du budget d’interruption de pod. Ce problème se résout une fois que le pod initial coredns est programmé et en cours d’exécution, ce qui permet au second pod d’être correctement supprimé et recréé.
Conseil
Envisagez d’effectuer le drainage des nœuds un par un pour faciliter l’expérience de suppression et éviter une limitation. Pour plus d'informations, consultez les pages suivantes :
Supprimer le pool de nœuds existant
Important
Lorsque vous supprimez un pool de nœuds, AKS n’exécute pas d’isolement et de drainage. Pour réduire l’interruption de la replanification des pods en cours d’exécution sur le pool de nœuds que vous envisagez de supprimer, effectuez un isolement et un drainage sur tous les nœuds du pool de nœuds avant de procéder à la suppression.
Supprimez le pool de nœuds d’origine à l’aide de la
az aks nodepool deletecommande.az aks nodepool delete \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1Vérifiez que votre cluster AKS dispose uniquement du nouveau pool de nœuds, avec les applications et les pods en cours d'exécution correctement à l’aide de la commande
kubectl get nodes.kubectl get nodesVotre sortie doit ressembler à l’exemple de sortie suivant, affichant uniquement le nouveau pool
mynodepoolde nœuds :NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 63m v1.21.9
Étapes suivantes
Après le redimensionnement d’un pool de nœuds par isolement et drainage, explorez plus en détail l’utilisation de plusieurs pools de nœuds.