Ce document décrit l'autoscaler de cluster, qui contrôle automatiquement la taille de vos pools de nœuds. L'autoscaler de cluster est activé lorsque vous spécifiez des valeurs minimales et maximales pour le nombre de nœuds dans un pool de nœuds. Vous spécifiez ces valeurs lorsque vous créez un pool de nœuds ou mettez à jour un pool de nœuds.
GKE sur AWS utilise l'autoscaler de cluster Kubernetes Open Source.
Procéder à l'autoscaling d'un pool de nœuds
L'autoscaler de cluster redimensionne automatiquement le nombre de nœuds dans un pool de nœuds donné, en fonction des demandes des 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 doivent être 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 comprend un contrôleur avec une seule instance dupliquée, le pod de cette instance dupliquée peut être reprogrammé sur un nœud différent si son nœud actuel est supprimé. Pour cette raison, vous devez concevoir vos charges de travail de manière à tolérer des perturbations potentielles ou à garantir que les pods critiques ne sont pas interrompus.
Fonctionnement de l'autoscaler de cluster
L'autoscaler de cluster fonctionne par pool de nœuds. Lorsque vous utilisez l'autoscaler de cluster pour configurer un pool de nœuds, vous spécifiez une taille minimale et maximale pour le pool de nœuds. Vous pouvez modifier la taille minimale et maximale lorsque vous créez un pool de nœuds ou mettez à jour un pool de nœuds.
L'autoscaler de cluster 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) de ce pool de nœuds. L'autoscaler de cluster ajoute des nœuds si les objets Pod ne sont pas programmables et que la capacité du pool de nœuds est insuffisante pour répondre aux requêtes.
L'autoscaler de cluster supprime également les nœuds s'ils sont sous-utilisés et si tous les objets du pod peuvent être programmés sur un plus petit nombre de nœuds. Si le nœud ne peut pas être drainé correctement au bout de 10 minutes, il est automatiquement arrêté. Cette durée n'est pas configurable.
Si un pod demande trop peu de ressources (par exemple, si les valeurs par défaut sont insuffisantes), l'autoscaler de cluster ne corrige 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 adéquates pour toutes vos charges de travail. Pour en savoir plus, consultez la page Gérer les ressources pour les conteneurs.
Annotations de pod et comportement de l'autoscaler de cluster
L'autoscaler de cluster prend en compte certaines annotations de pod lors de la prise de décisions d'ajustement. Par exemple, l'autoscaler de cluster accepte les annotations de pod telles que "cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
. Lorsque cette annotation est définie sur "false", le nœud hébergeant le pod ne peut pas être supprimé lors d'un événement de scaling à la baisse. Comprendre et utiliser ces annotations peut vous aider à affiner le comportement de l'autoscaler pour répondre aux exigences de votre charge de travail.
Pour en savoir plus sur les annotations de pod et leurs effets sur l'autoscaler de cluster, consultez les ressources suivantes:
- Consultez les questions fréquentes sur l'autoscaler de cluster pour découvrir les types de pods pouvant empêcher l'autoscaler de supprimer un nœud.
- Documentation officielle de l'autoscaler de cluster Kubernetes
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 objets Pods répliqués peuvent être redémarrés sur un autre nœud, provoquant éventuellement une brève interruption. Si votre charge de travail ne tolère pas les perturbations, configurez-la pour qu'elle s'exécute sur un pool de nœuds où l'autoscaling est désactivé. Pour en savoir plus, consultez la section Contrôler la planification avec des rejets de nœuds.
- L'autoscaler de cluster peut remplacer toutes les opérations de gestion manuelle des nœuds que vous effectuez.
- Tous les nœuds d'un pool de nœuds unique ont le même ensemble de libellés.
- L'autoscaler de cluster sélectionne un groupe de nœuds disposant du processeur le moins inactif ou de la mémoire la moins inutilisée après le scaling à la hausse. Ce comportement affecte le choix des pools de nœuds soumis à un scaling à la hausse si vous avez différentes tailles de nœuds (par exemple, des nœuds à haute capacité de processeur ou de mémoire) dans le même cluster.
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 options min-nodes
et max-nodes
. Pour désactiver l'autoscaling, définissez min-nodes
et max-nodes
sur le même nombre. L'autoscaler de cluster prend des décisions en matière de scaling dans les limites de cette taille.
Lorsque vous définissez la taille maximale de vos pools de nœuds, assurez-vous qu'ils sont suffisamment volumineux pour exécuter toutes vos charges de travail. Si les pools de nœuds de votre cluster ne disposent pas de suffisamment de mémoire et de processeurs pour exécuter toutes vos charges de travail, des interruptions peuvent se produire.
Utiliser un PodDisruptionBudget
pour protéger les charges de travail
Vous pouvez configurer GKE sur AWS pour vous protéger contre l'interruption de la charge de travail avec un PodDisruptionBudget
. Lorsque vous créez un PodDisruptionBudget
, vous spécifiez le nombre minimal d'instances répliquées de pods devant être disponibles ou le nombre maximal d'instances répliquées de pods pouvant être indisponibles à un moment donné. Pour en savoir plus, consultez la section Spécifier un budget d'interruption pour votre application.
Évoluer à partir de zéro nœud
À partir des versions suivantes de GKE sur AWS, l'autoscaler de cluster prend en charge l'augmentation des pools de nœuds à partir de zéro nœud:
- Version 1.29 et ultérieures
- Versions 1.28 de 1.28.8-gke.800 et versions ultérieures
- Versions 1.27 de 1.27.12-gke.800 et versions ultérieures
Si vous utilisez une version antérieure, vous devez mettre à niveau votre cluster vers l'une de ces versions pour pouvoir utiliser cette fonctionnalité. Pour activer cette fonctionnalité pour les clusters existants, mettez à niveau votre cluster vers une version compatible, puis effectuez une mise à niveau progressive de vos pools de nœuds en mettant à jour leur version Kubernetes. Pour en savoir plus sur la mise à jour de vos pools de nœuds, consultez la section Mettre à jour un pool de nœuds.
L'autoscaler de cluster respecte les libellés et les taints que vous définissez sur les pools de nœuds lorsque vous prenez des décisions de scaling, même lorsqu'aucun nœud n'est disponible à des fins de référence. GKE sur AWS définit automatiquement les libellés et les balises de rejet nécessaires sur le groupe d'autoscaling AWS sous-jacent du pool de nœuds. Pour en savoir plus sur ces balises, consultez la section Configuration de la détection automatique de la page GitHub décrivant la configuration de l'autoscaler de cluster pour AWS.
En définissant ces balises de libellé et de rejet, GKE sur AWS permet à l'autoscaler de cluster de créer des modèles de nœuds précis. Les modèles de nœuds sont des représentations virtuelles de nœuds qui incluent la configuration, les libellés et les rejets de nœuds appropriés, même lorsqu'il n'y a pas de nœuds physiques dans le pool de nœuds. Grâce à ces modèles de nœuds précis, l'autoscaler de cluster peut prendre des décisions d'augmentation de la capacité correctes.
Lorsque vous configurez des taints sur vos pools de nœuds, sachez que les groupes AWS Auto Scaling présentent une limite: si vous appliquez plusieurs taints avec la même clé, mais avec des combinaisons de valeur-effet différentes, seul le dernier taint appliqué avec la clé dupliquée est pris en compte par l'autoscaler de cluster.
En savoir plus
Pour en savoir plus sur l'autoscaler de cluster et éviter les interruptions, consultez les ressources suivantes:
- Questions fréquentes sur l'autoscaler de cluster Kubernetes
- Comment fonctionne le scaling à la baisse ?
- L'autoscaler de cluster fonctionne-t-il avec
PodDisruptionBudget
en phase de scaling à la baisse ?