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.

Avant de commencer

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.

Utiliser l’autoscaler de cluster sur votre cluster AKS

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 ?

Activer la mise à l’échelle automatique de cluster sur un nouveau cluster

  1. Créez un groupe de ressources avec la commande az group create.

    az group create --name myResourceGroup --location eastus
    
  2. 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
    

    La création du cluster et la configuration des paramètres du programme de mise à l’échelle automatique de cluster prennent quelques minutes.

Activez la mise à l’échelle automatique de clusters sur un cluster existant

  • 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ésactiver la mise à l’échelle automatique de cluster sur un cluster

  • 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.

Réactiver l’autoscaler de cluster sur un cluster

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.

Utiliser l’autoscaler de cluster avec les pools de nœuds

Utiliser l’autoscaler de cluster sur plusieurs pools de nœuds

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ésactiver la mise à l’échelle automatique de cluster sur un pool de nœuds

  • 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
    

Réactiver la mise à l’échelle automatique de cluster sur un pool de nœuds

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.

Remarque

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.

Modifier les paramètres de l’autoscaler de cluster

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.

Utiliser le profil de mise à l’échelle automatique de cluster

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.

Paramètres du profil d’autoscaler de cluster

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 (version préliminaire) 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 (version préliminaire) Indique si les pods DaemonSet seront correctement arrêtés à partir de nœuds vides. false
daemonset-eviction-for-occupied-nodes (version préliminaire) 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

Définir le profil de mise à l’échelle automatique de cluster sur un cluster existant

  • 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ètre cluster-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
    

Définir le profil de mise à l’échelle automatique de cluster sur un cluster AKS existant

  • Définissez la mise à l’échelle automatique de cluster sur un cluster existant à l’aide de la commande az aks update et du paramètre cluster-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
    

Configurer le profil d’autoscaler de cluster pour un scale-down agressif

Remarque

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=0s,scale-down-delay-after-failure=30s,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

Configurer le profil d’autoscaler de cluster pour les charges de travail en rafale

 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établir les valeurs par défaut du profil de mise à l’échelle automatique de cluster

  • 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 ""
    

Récupérer les journaux et l’état de la mise à l’échelle automatique des clusters

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.

  1. 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é.

  2. Sélectionnez la section Journal sur votre cluster.

  3. Dans Log Analytics, entrez l’exemple de requête suivant :

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Vous devez voir des journaux d’activité similaires à ce qui suit, à condition qu’il y ait des journaux à récupérer :

    Capture d’écran des journaux Log Analytics.

  4. Afficher les événements d’autoscaler de cluster non déclenchés dans l’interface CLI

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Afficher les événements d’avertissement d’autoscaler de cluster dans l’interface CLI

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. 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 commande kubectl suivante :

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Pour plus d’informations, consultez FAQ sur le projet GitHub Kubernetes/autoscaler.

Métriques de l’autoscaler de cluster

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

Étapes suivantes

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.