Utilisation du programme de mise à l’échelle automatique de cluster d’Azure Kubernetes Service (AKS)
Pour suivre le rythme des demandes applicatives dans AKS, vous devrez peut-être ajuster le nombre de nœuds qui exécutent vos charges de travail. Le composant de mise à l’échelle automatique de cluster peut surveiller les pods de votre cluster qui ne peuvent pas être planifiés en raison de contraintes de ressources. Lorsque la mise à l’échelle automatique détecte des problèmes, elle augmente le nombre de nœuds dans le pool de nœuds pour répondre à la demande de l’application. Les nœuds sont également régulièrement vérifiés. En l’absence de pods exécutés, le nombre de nœuds est réduit au besoin.
Cet article vous montre comment activer et gérer l’autoscaler de cluster dans AKS, qui est basé sur la version open source Kubernetes.
Cet article nécessite la version 2.0.76 ou ultérieure d’Azure CLI. Exécutez az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Important
L’autoscaler de cluster est un composant Kubernetes. Bien que le cluster AKS utilise un groupe de machines virtuelles identiques défini pour les nœuds, n’activez pas et ne modifiez pas manuellement les paramètres pour la mise à l’échelle automatique du groupe de machines virtuelles identiques dans le Portail Azure ou en utilisant l’interface de ligne de commande Azure. Laissez le programme de mise à l’échelle automatique de cluster Kubernetes gérer les paramètres de mise à l’échelle requis. Pour plus d’informations, consultez Puis-je modifier les ressources AKS dans le groupe de ressources de nœuds ?
Créez un groupe de ressources avec la commande
az group create
.az group create --name myResourceGroup --location eastus
Créez un cluster AKS à l’aide de la commande
az aks create
et activez et configurez la mise à l’échelle automatique de cluster sur le pool de nœuds pour le cluster à l’aide du paramètre--enable-cluster-autoscaler
et en spécifiant un nœud--min-count
et--max-count
. L’exemple de commande suivant crée un cluster avec un seul nœud adossé à un groupe de machines virtuelles identiques, active la mise à l’échelle automatique du cluster, définit au minimum un et au maximum trois nœuds :az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 1 \ --vm-set-type VirtualMachineScaleSets \ --load-balancer-sku standard \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3 \ --generate-ssh-keys
La création du cluster et la configuration des paramètres du programme de mise à l’échelle automatique de cluster prennent quelques minutes.
Créez un cluster AKS à l’aide de la commande
az aks update
et activez et configurez la mise à l’échelle automatique de cluster sur le pool de nœuds pour le cluster à l’aide du paramètre--enable-cluster-autoscaler
et en spécifiant un nœud--min-count
et--max-count
. L’exemple suivant met à jour un cluster AKS existant pour activer la mise à l’échelle automatique de cluster sur le pool de nœuds pour le cluster et définit un minimum de 1 et un maximum de 3 nœuds :az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
La mise à jour du cluster et la configuration des paramètres du programme de mise à l’échelle automatique de cluster prennent quelques minutes.
Désactivez la mise à l’échelle automatique de cluster à l’aide de la commande
az aks update
et du paramètre--disable-cluster-autoscaler
.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --disable-cluster-autoscaler
Les nœuds ne sont pas supprimés lorsque le programme de mise à l’échelle automatique de cluster est désactivé.
Notes
Vous pouvez mettre à l’échelle votre cluster manuellement après avoir désactivé le programme de mise à l’échelle automatique du cluster à l’aide de la commande az aks scale
. Si vous utilisez l’autoscaler de pod horizontal, il continue de s’exécuter avec l’autoscaler de cluster désactivé, mais la planification des pods risque de devenir impossible si toutes les ressources de nœuds sont utilisées.
Vous pouvez la réactiver à l’aide de la commande az aks update
, en spécifiant les paramètres --enable-cluster-autoscaler
, --min-count
et --max-count
.
Vous pouvez utiliser l’autoscaler de cluster avec plusieurs pools de nœuds et activer l’autoscaler de cluster sur chaque pool de nœuds individuel et transmettre des règles de mise à l’échelle automatique uniques.
Mettez à jour une étiquette sur un pool de nœuds existant à l’aide de la commande
az aks nodepool update
.az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1 \ --update-cluster-autoscaler \ --min-count 1 \ --max-count 5
Désactivez la mise à l’échelle automatique de cluster sur un pool de nœuds à l’aide de la commande
az aks nodepool update
et du paramètre--disable-cluster-autoscaler
.az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1 \ --disable-cluster-autoscaler
Vous pouvez réactiver l’autoscaler de cluster sur un pool de nœuds à l’aide de la commande az aks nodepool update
, en spécifiant les paramètres --enable-cluster-autoscaler
, --min-count
et --max-count
.
Notes
Si vous envisagez d’utiliser l’autoscaler de cluster avec des pools de nœuds qui s’étendent sur plusieurs zones afin de bénéficier des fonctionnalités de planification liées aux zones, telles que la planification topologique des volumes, il est recommandé d’avoir un pool de nœuds par zone et d’activer --balance-similar-node-groups
via le profil d’autoscaler. Cela garantit que le programme de mise à l’échelle automatique peut effectuer un scale-up réussi et maintient un équilibre au niveau des tailles des pools de nœuds.
Si vos demandes d’application changent, vous devrez peut-être ajuster le nombre de nœuds de l’autoscaler de cluster pour que la mise à l'échelle soit efficace.
Modifiez le nombre de nœuds à l’aide de la commande
az aks update
et mettez à jour la mise à l’échelle automatique du cluster à l’aide du paramètre--update-cluster-autoscaler
et en spécifiant votre nœud mis à jour--min-count
et--max-count
.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --update-cluster-autoscaler \ --min-count 1 \ --max-count 5
Notes
La mise à l’échelle automatique de cluster appliquera le nombre minimal dans les cas où le nombre réel chute au-dessous du minimum en raison de facteurs externes, par exemple lors d’une éviction ponctuelle ou lors de la modification de la valeur du nombre minimal à partir de l’API AKS.
Vous pouvez configurer une plus grande précision dans les détails d’autoscaler de cluster en changeant les valeurs par défaut du profil d’autoscaler sur l’ensemble du cluster. Par exemple, un événement de scale-down se produit lorsque des nœuds sont sous-utilisés après 10 minutes. Si vous avez des charges de travail qui s’exécutent toutes les 15 minutes, vous souhaitez peut-être modifier le profil du programme de mise à l’échelle automatique pour effectuer un scale-down des nœuds sous-utilisés après 15 ou 20 minutes. Lorsque vous activez l’option de mise à l’échelle automatique de cluster, un profil par défaut est utilisé, à moins de spécifier différents paramètres.
Important
Le profil de mise à l’échelle automatique de cluster modifie tous les pools de nœuds qui utilisent la mise à l’échelle automatique de cluster. Vous ne pouvez pas définir de profil de mise à l’échelle automatique par pool de nœuds. Lorsque vous définissez le profil, tous les pools de nœuds existants pour lesquels la mise à l’échelle automatique de cluster est activée commencent immédiatement à utiliser le profil.
Le tableau suivant répertorie les paramètres disponibles pour le profil d’autoscaler de cluster :
Setting | Description | Valeur par défaut |
---|---|---|
scan-interval |
Fréquence à laquelle le cluster est réévalué pour effectuer un scale-up ou un scale-down. | 10 secondes |
scale-down-delay-after-add |
Durée, après le scale-up, à l’issue de laquelle s’effectue la reprise de l’évaluation de scale-down. | 10 minutes |
scale-down-delay-after-delete |
Durée, après la suppression du nœud, à l’issue de laquelle s’effectue la reprise de l’évaluation de scale-down. | scan-interval |
scale-down-delay-after-failure |
Durée, après un échec de scale-down, à l’issue de laquelle s’effectue la reprise de l’évaluation de scale-down. | Trois minutes |
scale-down-unneeded-time |
Durée pendant laquelle un nœud doit être inutile avant d’être éligible pour un scale-down. | 10 minutes |
scale-down-unready-time |
Durée pendant laquelle un nœud non prêt doit être inutile avant d’être éligible pour un scale-down. | 20 minutes |
ignore-daemonsets-utilization |
Indique si les pods DaemonSet seront ignorés lors du calcul de l’utilisation des ressources pour un scale-down. | false |
daemonset-eviction-for-empty-nodes |
Indique si les pods DaemonSet seront correctement arrêtés à partir de nœuds vides. | false |
daemonset-eviction-for-occupied-nodes |
Indique si les pods DaemonSet seront correctement arrêtés à partir de nœuds non vides. | true |
scale-down-utilization-threshold |
Niveau d’utilisation du nœud (défini comme la somme des ressources demandées divisée par la capacité) auquel un nœud peut être envisagé pour un scale-down. | 0,5 |
max-graceful-termination-sec |
Nombre maximal de secondes pendant lesquelles la mise à l’échelle automatique de cluster attend l’arrêt d’un pod lors d’une tentative de scale-down d’un nœud. | 600 secondes |
balance-similar-node-groups |
Détecte les pools de nœuds similaires et équilibre le nombre de nœuds entre eux. | false |
expander |
Type de pool de nœuds utilisé par le développeur pour un scale-up. Les valeurs possibles incluent most-pods , random , least-waste etpriority . |
random |
skip-nodes-with-local-storage |
Si true , l’autoscaler de cluster ne supprime pas les nœuds dotés de pods avec stockage local, par exemple EmptyDir ou HostPath. |
false |
skip-nodes-with-system-pods |
Si true , l’autoscaler de cluster ne supprime pas les nœuds dotés de pods de kube-system (à l’exception de DaemonSet ou de pods miroir). |
true |
max-empty-bulk-delete |
Nombre maximal de nœuds vides pouvant être supprimés en même temps | 10 nœuds |
new-pod-scale-up-delay |
Pour les scénarios de type mise à l’échelle en rafales ou par lots dans lesquels l’autorité de certification ne doit pas agir avant que le planificateur Kubernetes n’ait pu planifier tous les pods, vous pouvez indiquer à l’autorité de certification d’ignorer les pods non planifiés avant qu’ils n’aient atteint une certaine ancienneté. | 0 seconde |
max-total-unready-percentage |
Pourcentage maximal de nœuds non prêts dans le cluster. Une fois ce pourcentage dépassé, l’autorité de certification arrête les opérations. | 45 % |
max-node-provision-time |
Durée maximale pendant laquelle la mise à l’échelle automatique attend qu’un nœud soit provisionné. | 15 minutes |
ok-total-unready-count |
Nombre de nœuds non prêts autorisés, quelle que soit la valeur de max-total-unready-percentage. | Trois nœuds |
Notes
Les paramètres ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes et daemonset-eviction-for-occupied-nodes sont en disponibilité générale à partir de la version 2024-05-01 de l’API. Si vous utilisez l’interface de ligne de commande pour mettre à jour ces indicateurs, vérifiez que vous utilisez la version 2.63 ou ultérieure.
Créez un cluster AKS à l’aide de la commande
az aks create
et définissez le profil de mise à l’échelle automatique de cluster à l’aide du paramètrecluster-autoscaler-profile
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 1 \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3 \ --cluster-autoscaler-profile scan-interval=30s \ --generate-ssh-keys
Définissez la mise à l’échelle automatique de cluster sur un cluster existant à l’aide de la commande
az aks update
et du paramètrecluster-autoscaler-profile
. L’exemple suivant configure le paramètre d’intervalle d’analyse sur 30 s :az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --cluster-autoscaler-profile scan-interval=30s
Notes
Le scale-down agressif n’est pas recommandé pour les clusters qui rencontrent des scale-outs et des scale-ins fréquents dans des intervalles courts, car cela peut entraîner des temps d’approvisionnement de nœuds étendus. Dans ces circonstances, l’augmentation de scale-down-delay-after-add
peut aider en conservant le nœud plus longtemps pour gérer les charges de travail entrantes.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--cluster-autoscaler-profile scan-interval=30s,scale-down-delay-after-add=0m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m
az aks update \
--resource-group "myResourceGroup" \
--name myAKSCluster \
--cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m
Réinitialisez le profil de mise à l’échelle automatique du cluster à l’aide de la commande
az aks update
.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --cluster-autoscaler-profile ""
Vous pouvez récupérer les journaux et les mises à jour d’état à partir de la mise à l’échelle automatique du cluster pour faciliter le diagnostic et le débogage des événements de mise à l’échelle automatique. AKS gère la mise à l’échelle automatique des clusters en votre nom et l’exécute dans le plan de contrôle managé. Vous pouvez activer le nœud de plan de contrôle pour afficher les journaux et les opérations de la mise à l’échelle automatique de cluster.
Configurez une règle pour les journaux de ressources, afin d’envoyer les journaux de la mise à l’échelle automatique de cluster vers Log Analytics à l’aide de ces instructions. Veillez à cocher la case
cluster-autoscaler
lors de la sélection des options pour Journaux d’activité.Sélectionnez la section Journal sur votre cluster.
Dans Log Analytics, entrez l’exemple de requête suivant :
AzureDiagnostics | where Category == "cluster-autoscaler"
Afficher les événements de la mise à l’échelle automatique de cluster non déclenchés dans l’interface CLI.
kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
Afficher les événements d’avertissement de la mise à l’échelle automatique de cluster dans l’interface CLI.
kubectl get events --field-selector source=cluster-autoscaler,type=Warning
Le programme de mise à l’échelle automatique de clusters écrit également l’état d’intégrité sur un élément
configmap
nommécluster-autoscaler-status
. Vous pouvez récupérer ces journaux à l’aide de la commandekubectl
suivante :kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
Pour plus d’informations, consultez FAQ sur le projet GitHub Kubernetes/autoscaler.
Vous pouvez activer les métriques du plan de contrôle (préversion) pour afficher les journaux et les opérations à partir de l’autoscaler de cluster avec le module complémentaire de service Azure Monitor géré pour Prometheus
Cet article vous a montré comment mettre automatiquement à l’échelle le nombre de nœuds AKS. Vous pouvez également utiliser le programme de mise à l’échelle automatique de pods élastique pour ajuster automatiquement le nombre de pods qui exécutent votre application. Pour obtenir des instructions sur l’utilisation du programme de mise à l’échelle automatique de pods élastique, consultez l’article Mettre à l’échelle des applications dans Azure Kubernetes Service (AKS).
Pour améliorer davantage l’utilisation des ressources de cluster et libérer du processeur et de la mémoire pour d’autres pods, consultez Mise à l’échelle automatique des pods verticaux.
Commentaires sur Azure Kubernetes Service
Azure Kubernetes Service est un projet open source. Sélectionnez un lien pour fournir des commentaires :