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 minimale et maximale 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.
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.
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 page Spécifier un budget d'interruption pour votre application.
Effectuer un scaling à la hausse à partir de zéro nœud
À partir des versions suivantes de GKE sur AWS, l'autoscaler de cluster prend en charge le scaling à la hausse des pools de nœuds à partir de zéro nœud:
- Versions 1.29 et ultérieures
- Versions 1.28 à partir de 1.28.8-gke.800 et versions ultérieures
- Versions 1.27 à partir de 1.27.12-gke.800
Si vous utilisez une version antérieure, vous devez mettre à niveau votre cluster vers l'une de ces versions pour utiliser cette fonctionnalité. Pour activer cette fonctionnalité pour les clusters existants, mettez à jour votre cluster vers une version compatible, puis effectuez une mise à jour progressive de vos pools de nœuds en mettant à jour leur version Kubernetes. Pour en savoir plus sur la mise à jour des pools de nœuds, consultez la page Mettre à jour un pool de nœuds.
L'autoscaler de cluster respecte les libellés et les rejets 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 pour référence. GKE sur AWS définit automatiquement les tags d'étiquette et de rejet nécessaires sur le groupe AWS Auto Scaling sous-jacent du pool de nœuds. Pour en savoir plus sur ces tags, consultez la section Configuration de la découverte automatique de la page GitHub qui décrit la configuration de l'autoscaler de cluster pour AWS.
En définissant ces tags d'étiquette 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 étiquettes et les rejets corrects, même lorsqu'aucun nœud physique n'est présent 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 correctes de scaling à la hausse.
Lorsque vous configurez des rejets dans vos pools de nœuds, sachez que les groupes AWS Auto Scaling ont une limite: si vous appliquez plusieurs rejets avec la même clé, mais des combinaisons valeur/effet différentes, seul le dernier rejet appliqué avec la clé dupliquée est pris en compte par l'autoscaler de cluster.