Activer l'autoscaling du cluster

Ce document décrit l'autoscaling pour un cluster d'utilisateur dans Google Distributed Cloud.

L'autoscaling des clusters augmente ou diminue le nombre de nœuds dans un pool de nœuds en fonction des exigences de vos charges de travail.

Avant de commencer

Consultez les limites de l'autoscaler de cluster.

L'autoscaler de cluster repose sur les hypothèses suivantes:

  • Tous les pods répliqués peuvent être redémarrés sur un autre nœud, ce qui peut entraîner une brève interruption. Si vos services ne peuvent pas tolérer de perturbations, nous vous déconseillons d'utiliser l'autoscaler de cluster.

  • Les utilisateurs ou les administrateurs ne gèrent pas manuellement les nœuds. Si l'autoscaling est activé pour un pool de nœuds, vous ne pouvez pas remplacer le champ replicas du pool de nœuds.

  • Tous les nœuds d'un pool de nœuds unique ont le même ensemble de libellés.

Fonctionnement de l'autoscaling de cluster

L'autoscaler de cluster fonctionne par pool de nœuds. Lorsque vous activez l'autoscaling pour un pool de nœuds, vous spécifiez un nombre minimal et maximal de nœuds pour le pool.

L'autoscaler de cluster augmente ou diminue automatiquement le nombre de nœuds du pool, en fonction des demandes de ressources (et non de l'utilisation réelle) des pods exécutés sur les nœuds. Elle vérifie régulièrement l'état des pods et des nœuds, et prend les mesures suivantes:

  • Si les pods ne sont pas programmables en raison d'un nombre insuffisant de nœuds dans le pool, l'autoscaler de cluster ajoute des nœuds, dans la limite du nombre maximal spécifié.

  • Si les nœuds sont sous-utilisés et que tous les pods peuvent être planifiés avec moins de nœuds dans le pool, l'autoscaler de cluster supprime des nœuds, jusqu'à atteindre le minimum spécifié. Si un nœud ne peut pas être drainé correctement, il est automatiquement arrêté et le disque géré par Kubernetes associé est dissocié en toute sécurité.

Si vos pods ont demandé trop peu de ressources (ou n'ont pas modifié les valeurs par défaut, ce qui pourrait s'avérer insuffisant) et que vos nœuds font face à des pénuries, l'autoscaler de cluster ne corrige pas cette situation. Vous pouvez vous assurer que l'autoscaler de cluster fonctionne avec précision en effectuant des demandes de ressources explicites pour toutes vos charges de travail.

Pour un pool de nœuds individuel, minReplicas doit être ≥ 1. Toutefois, la somme des nœuds de cluster d'utilisateur non rejetés à un moment donné doit être au moins égale à 3. Cela signifie que la somme des valeurs minReplicas pour tous les pools de nœuds avec autoscaling et des valeurs replicas pour tous les pools de nœuds sans autoscaling doit être au moins égale à 3.

L'autoscaler de cluster prend en compte le coût relatif des types d'instances dans les différents pools de nœuds et tente de développer le pool de nœuds de manière à générer le moins de déchets possible.

Créer un cluster d'utilisateur avec autoscaling

Pour créer un cluster d'utilisateur avec l'autoscaling activé pour un pool de nœuds, renseignez la section autoscaling du pool de nœuds dans le fichier de configuration du cluster d'utilisateur. Exemple :

nodePools:
- name: pool‐1
  …
  replicas: 3
  ...
  autoscaling:
    minReplicas: 1
    maxReplicas: 5

La configuration précédente crée un pool de nœuds avec trois instances répliquées et applique l'autoscaling avec une taille minimale de pool de nœuds égale à 1 et une taille maximale de pool de nœuds égale à 5.

La valeur minReplicas doit être ≥ 1. Un pool de nœuds ne peut pas être réduit à zéro nœud.

Ajouter un pool de nœuds avec autoscaling

Pour ajouter un pool de nœuds avec autoscaling à un cluster existant, procédez comme suit :

  1. Modifiez le fichier de configuration du cluster d'utilisateur pour ajouter un pool de nœuds et incluez une section autoscaling pour le pool. Définissez les valeurs de replicas, minReplicas et maxReplicas comme vous le souhaitez. Exemple :

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 2
        maxReplicas: 6
    
  2. Mettez à jour le cluster :

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Activer l'autoscaling pour un pool de nœuds existant

Pour activer l'autoscaling pour un pool de nœuds dans un cluster existant, procédez comme suit :

  1. Modifiez un nodePool spécifique dans le fichier de configuration du cluster d'utilisateur et incluez la section autoscaling. Définissez les valeurs de minReplicas et maxReplicas comme vous le souhaitez.

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. Mettez à jour le cluster :

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Désactiver l'autoscaling pour un pool de nœuds existant

Pour désactiver l'autoscaling pour un pool de nœuds spécifique, procédez comme suit :

  1. Modifiez le fichier de configuration du cluster d'utilisateur et supprimez la section autoscaling de ce pool de nœuds.

  2. Exécutez gkectl update cluster.

Vérifier le comportement de l'autoscaler de cluster

Vous pouvez déterminer ce que fait l'autoscaler de cluster de plusieurs manières.

Vérifier les journaux de l'autoscaler de cluster

Tout d'abord, recherchez le nom du pod de l'autoscaler de cluster:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler

Vérifiez les journaux sur le pod de l'autoscaler de cluster:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME

Remplacez POD_NAME par le nom du pod de l'autoscaler de cluster.

Vérifier le plan de configuration

L'autoscaler de cluster publie la carte de configuration kube-system/cluster-autoscaler-status.

Pour afficher le mappage de configuration:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml

Vérifiez les événements d'autoscaling du cluster.

Vous pouvez vérifier les événements d'autoscaling de cluster :

  • Sur les pods (en particulier ceux qui ne peuvent pas être planifiés ou sur des nœuds sous-utilisés)
  • Sur les nœuds
  • Sur la carte de configuration kube-system/cluster-autoscaler-status.

Limites

L'autoscaler de cluster présente les limites suivantes:

Dépannage

  • Parfois, l'autoscaler de cluster ne peut pas effectuer un scaling à la baisse complet et un nœud supplémentaire demeure après cette opération. Cela peut se produire lorsque les pods système requis sont planifiés sur différents nœuds, car aucun déclencheur ne permet de transférer l'un de ces pods vers un autre nœud. Reportez-vous à la page J'ai quelques nœuds avec une faible utilisation, mais ils ne sont pas réduits. Pourquoi ? Pour contourner cette limitation, vous pouvez configurer un budget d'interruption de pod.

  • Si vous rencontrez des problèmes lors d'un scaling à la baisse du cluster, consultez la page Prendre en compte la planification et l'interruption des pods. Il vous faudra peut-être ajouter un PodDisruptionBudget pour les pods kube-system. Pour en savoir plus sur l'ajout manuel d'un PodDisruptionBudget pour les pods kube-system, consultez les questions fréquentes sur l'autoscaler de cluster Kubernetes.

  • Lors d'un scaling à la baisse, l'autoscaler de cluster respecte les règles de planification et d'éviction définies sur les pods. Ces restrictions peuvent empêcher la suppression d'un nœud par l'autoscaler. La suppression d'un nœud peut être empêchée si ce nœud contient un pod remplissant l'une des conditions suivantes :

    • Les règles d'affinité ou d'anti-affinité du pod empêchent le replanification.

    • Le pod dispose d'un stockage en local.

    • Le pod n'est pas géré par un contrôleur tel qu'un déploiement, un StatefulSet, une tâche ou un ReplicaSet.

    • Le pod se trouve dans l'espace de noms kube-system et ne possède pas de PodDisruptionBudget.

  • L'attribut PodDisruptionBudget d'une application peut empêcher l'autoscaling. Si la suppression de nœuds entraîne un dépassement du budget, le cluster n'effectue pas de scaling à la baisse.

Informations complémentaires

Pour en savoir plus sur l'autoscaler de cluster et éviter les interruptions, consultez la section Questions fréquentes sur l'autoscaler de cluster :