Autoscaler de cluster

10

Dans Anthos clusters on VMware (GKE On-Prem) version 1.10, l'autoscaling de cluster pour les pools de nœuds dans les clusters d'utilisateur est en disponibilité générale. L'autoscaling de cluster redéfinit le nombre de nœuds d'un pool donné en fonction des exigences de vos charges de travail. Vous n'avez pas besoin d'ajouter ou de supprimer manuellement des nœuds, ni de surprovisionner vos pools de nœuds. À la place, il suffit de spécifier une taille minimale et une taille maximale pour le pool de nœuds, après quoi le reste est automatique.

Si des ressources sont supprimées ou déplacées lors de l'autoscaling de votre cluster, vos charges de travail peuvent être temporairement interrompues. Par exemple, si votre charge de travail est un pod unique et que son nœud actuel est supprimé, le pod est reprogrammé sur un nœud différent. Avant d'activer l'autoscaling, concevez vos charges de travail de manière à tolérer des perturbations potentielles et à garantir que les pods critiques ne sont pas interrompus.

L'autoscaling des clusters est désactivé par défaut pour les pools de nœuds. Vous pouvez activer et désactiver l'autoscaling sur les pools de nœuds du cluster d'utilisateur pendant ou après la création du cluster à l'aide de la commande gkectl update.

Fonctionnement de l'autoscaling de cluster

L'autoscaler de cluster fonctionne par pool de nœuds. Lorsque vous configurez un pool de nœuds avec l'autoscaler de cluster, vous spécifiez une taille minimale et maximale pour le pool de nœuds.

Cette fonctionnalité augmente ou diminue automatiquement la taille d'un pool de nœuds en fonction des demandes en ressources (plutôt que de l'utilisation réelle) des pods exécutés sur les nœuds de ce pool. Elle vérifie régulièrement l'état des pods et des nœuds, et prend les mesures suivantes :

  • Si les pods ne peuvent pas être programmés, car il n'y a pas assez de nœuds dans le pool de nœuds, l'autoscaler de cluster en ajoute jusqu'à atteindre la taille maximale du pool de nœuds.
  • Si les nœuds sont sous-utilisés et que tous les pods peuvent être programmés, même avec moins de nœuds dans le pool, l'autoscaler de cluster supprime des nœuds jusqu'à atteindre la taille minimale du pool de nœuds. Si le nœud ne peut pas être drainé correctement, il est arrêté de force et le disque géré par Kubernetes associé est dissocié en toute sécurité.

Si vos pods ont demandé trop peu de ressources (ou n'ont pas changé les valeurs par défaut qui pourraient être insuffisantes) et si vos nœuds connaissent des manques, l'autoscaler de cluster ne corrigera pas la situation. Vous pouvez vous assurer que l'autoscaler de cluster fonctionne aussi précisément que possible en effectuant des demandes de ressources explicites pour toutes vos charges de travail.

Critères d'exploitation

L'autoscaler de cluster repose sur les hypothèses suivantes lors du redimensionnement d'un pool de nœuds :

  • Tous les pods répliqués peuvent être redémarrés sur un autre nœud, ce qui peut entraîner une brève interruption. Si vos services ne peuvent pas tolérer de perturbations, il est déconseillé d'utiliser l'autoscaler de cluster.
  • Les utilisateurs ou les administrateurs ne gèrent pas manuellement les nœuds. Si l'autoscaler de cluster est activé pour un pool de nœuds, vous ne pouvez pas remplacer le champ replicas du pool de nœuds.
  • Tous les nœuds d'un pool de nœuds unique ont le même ensemble de libellés.
  • L'autoscaler de cluster prend en compte le coût relatif des types d'instances dans les différents pools de nœuds et tente de développer le pool de nœuds de manière à engendrer le moins de coûts possible.

Taille minimale et maximale du pool de nœuds

Vous pouvez spécifier la taille minimale et maximale de chaque pool de nœuds de votre cluster à l'aide des valeurs autoscaling.minReplicas et autoscaling.maxReplicas. L'autoscaler de cluster prend des décisions de redimensionnement dans le cadre de ces limites. La valeur replicas du pool de nœuds, qui correspond au nombre de nœuds par défaut sans autoscaling, doit être supérieure à la valeur minReplicas spécifiée et inférieure à la valeur maxReplicas spécifiée. Lorsque vous activez l'autoscaling, l'autoscaler de cluster attend qu'un nouveau nœud soit requis dans le pool de nœuds ou qu'un nœud puisse être supprimé du pool en toute sécurité.

Prendre en compte la planification et l'interruption des pods

Lors de la réduction, l'autoscaler de cluster respecte les règles de planification et d'éviction définies sur les pods. Ces restrictions peuvent empêcher la suppression d'un nœud par l'autoscaler. Si un nœud possède un pod remplissant l'une des conditions suivantes, il risque de ne pas être supprimé.

  • Les règles d'affinité ou d'anti-affinité du pod empêchent la replanification.
  • Le pod dispose d'un stockage en local.
  • Le pod n'est pas géré par un contrôleur tel que Deployment, StatefulSet, Job ou ReplicaSet.
  • Le pod se trouve dans l'espace de noms kube-system et n'a pas de PodDisruptionBudget.

Le PodDisruptionBudget d'une application peut également empêcher l'autoscaling. Si la suppression de nœuds entraîne un dépassement du budget, le cluster ne se réduit pas.

Pour en savoir plus sur l'autoscaler de cluster et éviter les interruptions, consultez la section Questions fréquentes sur l'autoscaler de cluster :

Limites

L'autoscaler de cluster présente les limites suivantes :

  • Le scaling à zéro instance dupliquée dans le pool de nœuds n'est pas autorisé.
  • La somme des nœuds de calcul du cluster d'utilisateur à un moment donné doit être au moins égale à 3. Cela signifie que la somme des valeurs minReplicas pour tous les pools de nœuds avec autoscaling et des valeurs replicas pour tous les pools de nœuds sans autoscaling doit être au moins égale à 3.
  • Parfois, l'autoscaler de cluster ne peut pas effectuer un scaling à la baisse complet et un nœud supplémentaire demeure après cette opération. Cela peut se produire lorsque les pods système requis sont planifiés sur différents nœuds, car aucun déclencheur ne permet de transférer l'un de ces pods vers un autre nœud. Reportez-vous à la page J'ai quelques nœuds avec une faible utilisation, mais ils ne sont pas réduits. Pourquoi ? Pour contourner cette limitation, vous pouvez configurer un budget d'interruption de pod.
  • La programmation personnalisée avec des filtres modifiés n'est pas acceptée.
  • Les nœuds n'évolueront pas si les pods ont une valeur PriorityClass inférieure à -10. Pour en savoir plus, consultez la section Comment l'autoscaler de cluster fonctionne-t-il avec la priorité et la préemption des pods ?