Cette page présente l'autoscaling de pods vertical dans Google Kubernetes Engine (GKE), et fournit des documents de référence pour la ressource personnalisée VerticalPodAutoscaler
et les types associés.
L'autoscaling de pods vertical fournit des recommandations sur l'utilisation des ressources au fil du temps. Pour les augmentations soudaines d'utilisation des ressources, utilisez l'autoscaler horizontal de pods.
Pour savoir comment utiliser l'autoscaling de pods vertical, consultez la page Effectuer un scaling des demandes et des limites de ressources des conteneurs.
Fonctionnement de l'autoscaling de pods vertical
L'autoscaling de pods vertical vous permet d'analyser et de définir les ressources de processeur et de mémoire requises par les pods. 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 de processeur et de mémoire pouvant vous permettre de mettre à jour manuellement vos pods, ou pour mettre à jour automatiquement les valeurs.
L'autoscaling de pods vertical est activé par défaut dans les clusters Autopilot.
Autoscaling de pods verticaux en mode automatique
En raison des limitations de Kubernetes, le seul moyen de modifier les demandes de ressources d'un pod en cours d'exécution est de le recréer. Si vous créez un VerticalPodAutoscaler
avec un updateMode
Auto
, le VerticalPodAutoscaler
évince un pod s'il doit modifier les demandes de ressources du pod.
Pour limiter le nombre de redémarrages des pods, utilisez un budget d'interruption de pod. Pour vous assurer que votre cluster pourra gérer les charges de travail redimensionnées, utilisez l'autoscaler de cluster et le provisionnement automatique des nœuds.
L'autoscaling de pods vertical prévient l'autoscaler de cluster de la mise à jour et fournit les ressources dont la charge de travail redimensionnée a besoin en amont de sa recréation, de façon à minimiser le temps d'interruption.
Avantages
L'autoscaling de pods vertical offre les avantages suivants :
- Si vous définissez des demandes et des limites de ressources adaptées à vos charges de travail, vous pouvez améliorer leur stabilité et réduire les coûts. 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.
- 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 de processeur et de mémoire au fil du temps, sans intervention de votre part.
L'autoscaling de pods vertical 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 vertical.
- 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
- Pour utiliser l'autoscaling de pods vertical avec l'autoscaling horizontal de pods, utilisez l'autoscaling de pods multidimensionnels. Vous pouvez également utiliser l'autoscaling de pods vertical avec l'autoscaling horizontal de pods sur les métriques personnalisées et externes.
- L'autoscaling de pods vertical 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.
- L'autoscaling de pods vertical a un paramètre par défaut correspondant à deux instances dupliquées au minimum pour les déploiements visant à remplacer des pods en utilisant des valeurs de ressources révisées. Dans GKE 1.22 et dans les versions ultérieures, vous pouvez remplacer ce paramètre en spécifiant une valeur pour
minReplicas
dans le champ PodUpdatePolicy.
Bonnes pratiques
- Pour éviter toute perturbation dans la mise à jour des clusters, nous vous recommandons de limiter à moins de 1 000 le nombre d'objets
VerticalPodAutoscaler
par cluster. - L'autoscaling de pods vertical fonctionne mieux avec des charges de travail homogènes de longue durée.
Documentation de référence sur l'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 | |
---|---|
|
Groupe, version et type d'API. |
metadata |
Métadonnées d'objet standards. |
spec |
Comportement souhaité de |
status |
Dernier état observé de |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
Champs | |
---|---|
targetRef |
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 |
updatePolicy |
Indique si les mises à jour recommandées sont appliquées au démarrage d'un pod et pendant sa durée de vie. |
resourcePolicy |
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. |
recommenders |
Outil de recommandation responsable de la génération de recommandations pour cet objet autoscaler vertical de pods. Laissez ce champ vide pour utiliser l'outil de recommandation par défaut fourni par GKE. Sinon, la liste peut contenir exactement une entrée pour un outil de recommandation alternatif fourni par l'utilisateur. Compatibilité assurée depuis GKE 1.22. |
VerticalPodAutoscalerList v1 autoscaling.k8s.io
Champs | |
---|---|
|
Groupe, version et type d'API. |
metadata |
Métadonnées d'objet standards. |
items |
Liste d'objets |
PodUpdatePolicy v1 autoscaling.k8s.io
Champs | |
---|---|
updateMode |
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". La valeur par défaut est "Auto" si vous ne spécifiez pas de valeur. |
minReplicas |
Nombre minimal d'instances dupliquées qui doivent être actives pour que l'outil de mise à jour puisse tenter d'évincer les pods (en attente d'autres vérifications telles que le budget d'interruption de pod). Seules les valeurs positives sont autorisées. La valeur par défaut est l'option globale "--min-replicas" définie sur 2 dans GKE. Compatibilité assurée depuis GKE 1.22. |
PodResourcePolicy v1 autoscaling.k8s.io
Champs | |
---|---|
containerPolicies |
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 |
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 |
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". La valeur par défaut est "Auto" si vous ne spécifiez pas de valeur. |
minAllowed |
Détermine le nombre minimum autorisé de demandes de ressources mémoire et de processeur pour le conteneur. Par défaut, aucun nombre minimum n'est appliqué. |
maxAllowed |
Détermine le nombre maximum autorisé de demandes de ressources mémoire et de processeur pour le conteneur. Par défaut, aucune limite n'est appliquée. |
ControlledResources |
Spécifie le type de recommandations qui seront calculées (et éventuellement appliquées) par |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
Champs | |
---|---|
name |
Nom de l'outil de recommandation responsable de la génération de recommandations pour cet objet. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
Champs | |
---|---|
recommendation |
Dernières demandes de ressources mémoire et de processeur recommandées. |
conditions |
Décrit l'état actuel de |
RecommendedPodResources v1 autoscaling.k8s.io
Champs | |
---|---|
containerRecommendation |
Tableau de recommandations de ressources pour des conteneurs individuels. |
RecommendedContainerResources v1 autoscaling.k8s.io
Champs | |
---|---|
containerName |
Nom du conteneur auquel s'applique la recommandation. |
target |
Demande de ressources mémoire et de processeur recommandée pour le conteneur. |
lowerBound |
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 |
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 |
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 |
Type de condition décrite. Les valeurs possibles sont "RecommendationProvided", "LowConfidence", "NoPodsMatched" et "FetchingHistory". |
status |
État de la condition. Les valeurs possibles sont "True", "False" et "Unknown". |
lastTransitionTime |
Dernière transition de la condition entre un état et un autre. |
reason |
Raison de la dernière transition d'un état à un autre. |
message |
Chaîne au format lisible qui donne des détails au sujet de la dernière transition d'un état à un autre. |
Étape suivante
Apprenez à effectuer un scaling des demandes et des limites de ressources des conteneurs.
Obtenez des informations sur l'autoscaler de cluster.