À propos des mises à jour de la surutilisation

Ce document fournit un bref aperçu des mises à jour progressives standards, puis décrit en détail les mises à jour de surutilisation, qui constituent un type particulier de mise à jour progressive. Par rapport aux mises à jour progressives standards, les mises à jour de surutilisation vous permettent de configurer la vitesse de mise à jour. Les mises à jour de la surutilisation vous permettent également de contrôler l'impact des mises à jour perturbatrices sur vos charges de travail.

Pour en savoir plus sur l'activation et la configuration des mises à jour de surutilisation pour GKE sur AWS, consultez la page Configurer les mises à jour de surutilisation des pools de nœuds.

Fonctionnement des mises à jour progressives standards

Certaines mises à jour d'un pool de nœuds, telles que la modification des annotations d'un pool de nœuds, ne nécessitent pas le redémarrage des nœuds et ne déclenchent donc pas de mise à jour progressive. Si GKE sur AWS peut appliquer des modifications à un pool de nœuds sans avoir à redémarrer ou à recréer des ressources, cela permet d'éviter toute interruption.

Toutefois, la plupart des mises à jour d'un pool de nœuds dans GKE sur AWS impliquent généralement l'arrêt des nœuds existants et le lancement de nouveaux nœuds avec les paramètres mis à jour. Le processus d'arrêt des nœuds existants peut perturber les charges de travail.

Par défaut, GKE sur AWS effectue des mises à jour progressives standards. Cette méthode met à jour les nœuds un par un, et ceux-ci sont remplacés à l'aide d'une approche de type "interruption avant création" : un nœud est d'abord arrêté, puis un nouveau nœud mis à jour est lancé. Cela minimise les perturbations, car un seul nœud est arrêté et remplacé à un moment donné.

Voici les étapes suivies par GKE sur AWS lors d'une mise à jour progressive standard:

  1. Sélectionne un nœud dans le pool de nœuds et le marque comme indisponible afin de s'assurer qu'aucun nouveau pod ne démarre sur celui-ci. Cette action s'appelle le tournement.
  2. Déplace les pods actifs du nœud marqué comme non programmables vers d'autres nœuds disponibles dans le cluster. Si les autres nœuds disposent d'une capacité suffisante, ils s'adaptent aux pods évincés. Sinon, l'autoscaler de cluster, qui reste actif lors d'une mise à jour progressive standard, lance un scaling à la hausse et provisionne des nœuds supplémentaires pour s'assurer que la capacité est suffisante pour planifier les pods évincés. Pour en savoir plus sur les mesures prises pour protéger les charges de travail lors de ce processus, consultez la section Protection des charges de travail lors du redimensionnement.
  3. Arrête le nœud marqué comme non programmable.
  4. Remplace le nœud marqué comme non programmable par un nouveau nœud avec les paramètres mis à jour.
  5. Effectue une vérification de l'état sur le nouveau nœud opérationnel. Si le pool de nœuds échoue à la vérification de l'état l'état, il est associé à l'état DEGRADED. Vous pouvez afficher cet état à l'aide de la commande gcloud container aws node-pools describe. Lorsqu'un pool de nœuds est marqué comme DEGRADED, les nouveaux pods peuvent ne pas être programmés sur les nœuds de ce pool.
  6. Il poursuit la mise à jour nœud par nœud jusqu'à ce que tous les nœuds du pool aient été mis à jour.

Fonctionnement des mises à jour de la surutilisation

Dans GKE sur AWS, la méthode glissante standard met à jour les nœuds un par un. Les mises à jour de la surutilisation, qui sont une forme de mise à jour progressive, vous permettent de mettre à jour plusieurs nœuds simultanément. Les mises à jour de la surutilisation sont donc plus rapides que les mises à jour progressives standards. Toutefois, la mise à jour simultanée de plusieurs nœuds peut perturber les charges de travail. Pour limiter ce phénomène, les mises à jour de surutilisation offrent des options permettant de moduler le niveau de perturbation de vos charges de travail.

Le remplacement des nœuds constitue une autre différence entre les mises à jour de surutilisation et les mises à jour progressives standards. Les mises à jour progressives standards remplacent les nœuds à l'aide d'une stratégie de type "Arrêter avant de créer". Selon les paramètres que vous choisissez, les mises à jour de la surutilisation peuvent utiliser une stratégie "créer avant d'arrêter", une stratégie "arrêter avant de créer" ou même une combinaison des deux.

L'autoscaler de cluster joue un rôle plus important dans les mises à jour de surutilisation que dans les mises à jour progressives standards. C'est pourquoi il apparaît en évidence dans la liste suivante des actions effectuées par GKE sur AWS lors d'une mise à jour de la surutilisation:

  1. Création d'un groupe d'autoscaling: GKE sur AWS provisionne les nouveaux nœuds avec les modifications spécifiées par la commande "update" et attribue ces nouveaux nœuds à un nouveau groupe d'autoscaling AWS.
  2. Comportement de l'autoscaler de cluster: lorsque la mise à jour de la surutilisation commence, l'autoscaler de cluster est activé pour le nouveau groupe d'autoscaling. L'autoscaler de cluster pour le groupe d'autoscaling d'origine est désactivé. Cela garantit que les opérations de scaling ne ciblent que le nouveau groupe.
  3. Remplacement des nœuds: en fonction des paramètres de mise à jour de la surutilisation, différentes stratégies de remplacement des nœuds sont utilisées :
    • "create before termine": cette stratégie est activée lorsque le paramètre max-surge-update est défini sur une valeur supérieure à zéro. Il génère de nouveaux nœuds dans le nouvel ASG avant d'arrêter les anciens dans le nouvel ASG, dans le but de minimiser les interruptions de service.
    • "terminate before create": cette méthode est déclenchée lorsque le paramètre max-surge-update est défini sur zéro et que le paramètre max-unavailable-update a une valeur supérieure à zéro. Les nœuds du groupe ASG d'origine sont arrêtés en premier, suivis de la création de nouveaux nœuds dans le nouvel ASG.
  4. Ajustements de la taille du pool de nœuds: lors de la mise à jour, la taille du pool de nœuds (c'est-à-dire la somme des nœuds de l'ancien et du nouveau ASG) peut fluctuer au-dessus ou en dessous du nombre initial de nœuds présents dans le pool avant le début de la mise à jour. Plus précisément, GKE sur AWS vise à maintenir le nombre total de nœuds compris entre (original_count - max-unavailable-update) et (original_count + max-surge-update). À terme, les nœuds de l'ancien ASG (original_count) sont remplacés par des nœuds mis à jour dans le nouveau ASG. L'autoscaler de cluster peut lancer davantage de nœuds dans le nouvel ASG s'il détecte que les pods ne peuvent pas être planifiés, mais qu'il respecte les limites définies par min-nodes et max-nodes.

Un exemple pour illustrer le processus

Pour mieux comprendre le fonctionnement des mises à jour de la surutilisation, prenons l'exemple suivant. Supposons que vous disposiez d'un pool de cinq nœuds et que vous exécutiez la commande suivante:

  gcloud container aws node-pools update production-node-pool
      --cluster my-cluster \
      --location us-west1 \
      --max-surge-update 2 \
      --max-unavailable-update 1 \
      --node-version 1.27.6-gke.700

Dans cet exemple, max-surge-update est défini sur 2, max-unavailable-update est défini sur 1 et vous fournissez une nouvelle version du pool de nœuds (en d'autres termes, vous modifiez la version de GKE en cours d'exécution sur les nœuds du pool de nœuds).

L'exécution de cette commande déclenche une mise à jour de la surutilisation, et GKE sur AWS effectue les actions suivantes:

  1. Crée 2 nœuds supplémentaires, car la valeur de max-surge-update est égale à 2.
  2. Il attribue ces deux nœuds supplémentaires à un nouveau groupe d'autoscaling AWS.
  3. Supprime les nœuds du groupe d'autoscaling d'origine une fois que ces nouveaux nœuds seront opérationnels. GKE sur AWS réduit jusqu'à trois nœuds (la valeur combinée de max-surge-update et max-unavailable-update), mais garantit qu'un seul nœud devient indisponible à tout moment (en raison de la valeur max-unavailable-update de 1).
  4. Répétez ces étapes jusqu'à ce que tous les nœuds du pool aient été mis à jour vers la nouvelle version de GKE.

Au cours de cette mise à jour, le pool de nœuds contient entre 4 et 7 nœuds opérationnels.

Points à prendre en compte avant d'exécuter des mises à jour de surutilisation

Avant d'exécuter une mise à jour de la surutilisation, tenez compte des points suivants:

  • Les instances supplémentaires créées lors de cette étape de surutilisation peuvent potentiellement dépasser votre limite de quota d'instances AWS. Si vous ne disposez pas d'un quota suffisant et que ces instances supplémentaires ne peuvent pas être provisionnées, la mise à jour peut échouer.
  • Si max-unavailable-update est défini sur 0, des interruptions des charges de travail peuvent toujours se produire lorsque les pods sont évincés et replanifiés sur les nouveaux nœuds.
  • Le nombre maximal de nœuds pouvant être mis à jour simultanément est égal à la somme de max-surge-update et max-unavailable-update, et est limité à 20.

Choisissez les paramètres de surutilisation adaptés à vos besoins

Bien que les mises à jour progressives standards utilisent souvent une approche de type "interruption avant création", les mises à jour de surutilisation ajoutent plus de flexibilité. Selon la configuration, les mises à jour de la surutilisation peuvent suivre une stratégie de type "Création avant arrêt", "Arrêt avant création" ou une combinaison des deux. Cette section décrit différentes configurations pour vous aider à sélectionner la meilleure approche pour vos charges de travail.

Le tableau suivant présente trois exemples de paramètres et met en évidence leur impact sur la vitesse de mise à jour et l'interruption potentielle de vos charges de travail:

Nom Description Configuration
Paramètre "Équilibré" (par défaut) Équilibrée, plus lent, mais moins perturbateur. maxSurge=1, maxavailable=0
Mises à jour rapides sans ressources supplémentaires Rapide, sans ressources de surutilisation, le plus perturbateur. maxSurge=0, maxavailable=20
Des mises à jour rapides moins perturbatrices Rapide, la plupart des ressources de surutilisation et moins de perturbations. maxSurge=20, maxAVAILABLE=0

Chacun des paramètres du tableau est décrit dans les sections suivantes.

Paramètre "Équilibré" (par défaut)

Le moyen le plus simple d'utiliser les mises à jour de surutilisation consiste à utiliser la configuration par défaut de max-surge-update=1 et max-unavailable-update=0. Cette configuration n'ajoute qu'un seul nœud de surutilisation au pool de nœuds lors de la mise à jour, et un seul nœud est mis à jour à la fois, suivant une approche de type "créer avant d'arrêter". Par rapport à la mise à jour progressive standard sans surutilisation, qui équivaut à (max-surge-update=0, max-unavailable-update=1), cette méthode est moins perturbatrice, accélère les redémarrages des pods pendant les mises à jour et est plus conservatrice dans sa progression.

Il est important de noter que l'adoption du paramètre équilibré peut entraîner des coûts supplémentaires en raison du nœud de surutilisation temporaire ajouté lors de la mise à jour. Ce nœud supplémentaire entraîne des frais tant qu'il est actif, ce qui augmente légèrement les frais globaux par rapport aux méthodes sans nœuds de surutilisation.

Mises à jour rapides sans ressources supplémentaires

Pour les charges de travail pouvant tolérer les interruptions, une approche de mise à jour plus rapide peut être appropriée. Pour ce faire, vous devez configurer max-surge-update=0 et max-unavailable-update=20. Avec cette configuration, 20 nœuds peuvent être mis à jour simultanément sans ajouter de nœuds de surutilisation. Cette méthode de mise à jour suit une approche de type "Arrêter avant la création". Étant donné qu'aucun nœud de surutilisation supplémentaire n'est introduit au cours du processus, cette méthode est également la plus rentable, en évitant les dépenses supplémentaires associées aux nœuds temporaires.

Des mises à jour rapides moins perturbatrices

Si vos charges de travail sont sensibles aux interruptions, vous pouvez accélérer la mise à jour avec les paramètres suivants: max-surge-update=20 et max-unavailable-update=0. Cette configuration met à jour 20 nœuds en parallèle selon une méthode de type "création avant fin".

Toutefois, la vitesse globale de la mise à jour peut être limitée si vous avez configuré PodDisruptionBudgets (PDB) pour vos charges de travail. En effet, le PDB limite le nombre de pods pouvant être drainés à un moment donné. Bien que les configurations des PDB puissent varier, si vous créez un PDB avec maxUnavailable égal à 1 pour une ou plusieurs charges de travail exécutées sur le pool de nœuds, un seul pod de ces charges de travail peut être évincé à la fois, ce qui limite le parallélisme de la mise à jour.

N'oubliez pas que le lancement de plusieurs nœuds de surutilisation au début du processus de mise à jour peut entraîner une augmentation temporaire des coûts, en particulier par rapport aux configurations qui n'ajoutent pas de nœuds supplémentaires ou qui en ajoutent moins lors des mises à jour.

Étapes suivantes

Pour en savoir plus sur l'activation et la configuration des mises à jour de surutilisation pour GKE sur AWS, consultez la page Configurer les mises à jour de surutilisation des pools de nœuds.