Autoscaling de pods verticaux

Cette page présente l'autoscaling de pods verticaux et fournit du matériel de référence pour la ressource personnalisée VerticalPodAutoscaler et les types associés.

Présentation

L'autoscaling de pods vertical est un outil d'autoscaling qui permet de dimensionner les pods pour obtenir des ressources optimales de processeur et de mémoire. Plutôt que d'avoir à configurer des demandes et limites de ressources de processeur et des demandes et limites de ressources de mémoire à jour pour les conteneurs de vos pods, vous pouvez configurer l'autoscaling de pods vertical pour qu'il fournisse les valeurs recommandées pour les demandes et limites de ressources mémoire et de processeur, ou pour mettre à jour automatiquement les valeurs.

Pour plus de stabilité et de rentabilité, il est important de définir des demandes et des limites de ressources adaptées à vos charges de travail. Si la taille des ressources de vos pods est inférieure à celle requise par vos charges de travail, votre application peut être limitée ou échouer en raison d'erreurs de saturation de mémoire. Si la taille de vos ressources est trop importante, vous encourez un gaspillage, et donc des factures plus élevées. Découvrez les bonnes pratiques d'autoscaling dans les Bonnes pratiques pour l'exécution d'applications Kubernetes à coût maîtrisé sur GKE..

Pour configurer l'autoscaling de pods vertical, activez-le dans votre cluster GKE et créez un objet de définition de ressource personnalisé nommé VerticalPodAutoscaler. Pour les clusters Autopilot, l'autoscaling de pods vertical est activé par défaut. Cependant, vous devez toujours configurer l'autoscaling de pods vertical en créant des objets VerticalPodAutoscaler. Découvrez comment configurer l'autoscaling de pods vertical.

Avantages

L'autoscaling de pods verticaux offre les avantages suivants :

  • Les nœuds de cluster sont utilisés efficacement, car les pods utilisent exactement ce dont ils ont besoin.
  • Les pods sont programmés sur des nœuds disposant des ressources appropriées.
  • Il n'est pas nécessaire d'exécuter des tâches d'analyse comparative chronophages pour déterminer les valeurs adéquates pour les demandes de ressources mémoire et de processeur.
  • Le temps de maintenance est réduit, car l'autoscaler peut ajuster les demandes de ressources mémoire et de processeur au fil du temps, sans intervention de votre part.

L'autoscaling de pods verticaux Google Kubernetes Engine (GKE) offre les avantages suivants par rapport à l'autoscaler Open Source de Kubernetes :

  • Il prend en compte la taille maximale des nœuds et les quotas de ressources lors de la détermination de l'objectif de recommandation.

  • Il notifie l'autoscaler de cluster pour ajuster la capacité des clusters.

  • Il utilise les données de l'historique, en fournissant des métriques recueillies avant l'activation de l'autoscaling de pods verticaux.

  • Il exécute les pods de l'autoscaling de pods verticaux en tant que processus de plan de contrôle, au lieu de déploiements sur vos nœuds de calcul.

Limites

  • L'autoscaling de pods vertical ne génère pas de recommandations basées sur des augmentations soudaines de l'utilisation des ressources. Au lieu de cela, elle fournit des recommandations stables sur une période plus longue. Pour les augmentations soudaines, utilisez l'autoscaler de pods horizontal.

  • L'autoscaling de pods verticaux accepte un maximum de 500 objets VerticalPodAutoscaler par cluster.

  • Pour utiliser l'autoscaling de pods vertical avec l'autoscaling de pods horizontal, utilisez l'autoscaling de pods multidimensionnel. Vous pouvez également utiliser l'autoscaling de pods verticaux avec l'autoscaling de pods horizontaux sur les métriques personnalisées et externes.

  • L'autoscaling de pods verticaux n'est pas encore prêt pour une utilisation avec des charges de travail basées sur JVM en raison d'une visibilité limitée sur l'utilisation réelle de la mémoire de la charge de travail.

Document de référence sur les API

Il s'agit de la documentation de référence de l'API v1. Nous vous recommandons vivement d'utiliser cette version de l'API.

VerticalPodAutoscaler v1 autoscaling.k8s.io

Champs

TypeMeta

Groupe, version et type d'API.

metadata

ObjectMeta

Métadonnées d'objet standards.

spec

VerticalPodAutoscalerSpec

Comportement souhaité de VerticalPodAutoscaler.

status

VerticalPodAutoscalerStatus

Dernier état observé de VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

Champs
targetRef

CrossVersionObjectReference

Référence au contrôleur qui gère l'ensemble des pods que doit contrôler l'autoscaler, par exemple, un déploiement ou un StatefulSet. Vous pouvez pointer un VerticalPodAutoscaler sur un contrôleur associé à une sous-ressource Scale. En règle générale, VerticalPodAutoscaler récupère l'ensemble des pods à contrôler à partir du ScaleStatus du contrôleur. Pour certains contrôleurs bien connus, par exemple DaemonSet, VerticalPodAutoscaler le récupère à partir des spécifications du contrôleur.

updatePolicy

PodUpdatePolicy

Indique si les mises à jour recommandées sont appliquées au démarrage d'un pod et pendant sa durée de vie.

resourcePolicy

PodResourcePolicy

Définit les stratégies concernant le traitement des demandes de ressources mémoire et de processeur pour des conteneurs individuels. La règle de ressources permet de définir des contraintes sur les recommandations pour des conteneurs individuels. S'il n'est pas spécifié, l'autoscaler calcule les ressources recommandées pour tous les conteneurs du pod, sans contraintes supplémentaires.

VerticalPodAutoscalerList v1 autoscaling.k8s.io

Champs

TypeMeta

Groupe, version et type d'API.

metadata

ObjectMeta

Métadonnées d'objet standards.

items

VerticalPodAutoscaler array

Liste d'objets VerticalPodAutoscaler.

PodUpdatePolicy v1 autoscaling.k8s.io

Champs
updateMode

string

Indique si les mises à jour recommandées sont appliquées au démarrage d'un pod et pendant sa durée de vie. Les valeurs possibles sont "Off", "Initial", "Recreate" et "Auto".

PodResourcePolicy v1 autoscaling.k8s.io

Champs
containerPolicies

ContainerResourcePolicy array

Tableau de stratégies relatives aux ressources pour des conteneurs individuels. Il peut y avoir au plus une entrée pour chaque conteneur nommé et, éventuellement, une seule entrée de caractère générique avec "containerName = '*'", qui gère tous les conteneurs dépourvus de règles individuelles.

ContainerResourcePolicy v1 autoscaling.k8s.io

Champs
containerName

string

Nom du conteneur auquel s'applique la stratégie. S'il n'est pas spécifié, cette stratégie est celle par défaut.

mode

ContainerScalingMode

Indique si les mises à jour recommandées sont appliquées au démarrage d'un conteneur et pendant sa durée de vie. Les valeurs possibles sont "Off" et "Auto".

minAllowed

ResourceList

Détermine le nombre minimum autorisé de demandes de ressources mémoire et de processeur pour le conteneur.

maxAllowed

ResourceList

Détermine le nombre maximum autorisé de demandes de ressources mémoire et de processeur pour le conteneur.

ControlledResources

[]ResourceName

Spécifie le type de recommandations qui seront calculées (et éventuellement appliquées) par VerticalPodAutoscaler. Si cette valeur est vide, la valeur par défaut [ResourceCPU, ResourceMemory] est utilisée.

VerticalPodAutoscalerStatus v1 autoscaling.k8s.io

Champs
recommendation

RecommendedPodResources

Dernières demandes de ressources mémoire et de processeur recommandées.

conditions

VerticalPodAutoscalerCondition array

Décrit l'état actuel de VerticalPodAutoscaler.

RecommendedPodResources v1 autoscaling.k8s.io

Champs
containerRecommendation

RecommendedContainerResources array

Tableau de recommandations de ressources pour des conteneurs individuels.

RecommendedContainerResources v1 autoscaling.k8s.io

Champs
containerName

string

Nom du conteneur auquel s'applique la recommandation.

target

ResourceList

Demande de ressources mémoire et de processeur recommandée pour le conteneur.

lowerBound

ResourceList

Nombre minimum recommandé de demandes de ressources mémoire et de processeur pour le conteneur. Il n'est pas garanti que cette valeur soit suffisante pour la stabilité de l'application. Il est probable qu'une exécution avec un nombre plus faible de demandes de ressources mémoire et de processeur ait un impact important sur les performances ou la disponibilité.

upperBound

ResourceList

Nombre maximum recommandé de demandes de ressources mémoire et de processeur pour le conteneur. Les demandes de ressources mémoire et de processeur dépassant ces valeurs risquent d'être gaspillées.

uncappedTarget

ResourceList

Dernière recommandation de ressources calculée par l'autoscaler, basée sur l'utilisation réelle des ressources, sans tenir compte de ContainerResourcePolicy. Si l'utilisation réelle des ressources entraîne une violation de ContainerResourcePolicy par la cible, cette dernière peut être différente de la recommandation limitée. Ce champ n'a pas d'incidence sur l'attribution réelle des ressources. Il n'est utilisé qu'à des fins d'indication d'état.

VerticalPodAutoscalerCondition v1 autoscaling.k8s.io

Champs
type

VerticalPodAutoscalerConditionType

Type de condition décrite. Les valeurs possibles sont "RecommendationProvided", "LowConfidence", "NoPodsMatched" et "FetchingHistory".

status

ConditionStatus

État de la condition. Les valeurs possibles sont "True", "False" et "Unknown".

lastTransitionTime

Time

Dernière transition de la condition entre un état et un autre.

reason

string

Raison de la dernière transition d'un état à un autre.

message

string

Chaîne au format lisible qui donne des détails au sujet de la dernière transition d'un état à un autre.

Étape suivante