À propos des ComputeClasses GKE


Vous pouvez définir des ensembles d'attributs de nœud et de paramètres d'autoscaling que Google Kubernetes Engine (GKE) utilise pour créer des nœuds afin d'exécuter des pods à l'aide de ComputeClasses. Cette page décrit le fonctionnement des classes de calcul, leurs cas d'utilisation et leurs avantages, ainsi que les types de classes de calcul disponibles.

Ces informations sont destinées aux personnes suivantes :

  • Architectes cloud et ingénieurs de plate-forme qui souhaitent réduire les frais généraux associés à la gestion de l'infrastructure de cluster.
  • Opérateurs d'applications et ingénieurs SRE qui souhaitent se concentrer sur l'exploitation des charges de travail sans se soucier de l'infrastructure sous-jacente.

À propos des ComputeClasses et de l'autoscaling des clusters

Une ComputeClass est un ensemble d'attributs de nœud et de paramètres d'autoscaling qui existe en tant qu'objet de l'API Kubernetes dans un cluster GKE. Vous pouvez sélectionner une ComputeClass dans n'importe quelle charge de travail Kubernetes que vous déployez. L'autoscaling de cluster GKE utilise les attributs d'une ComputeClass pour créer des nœuds pour les charges de travail.

Les ingénieurs de plate-forme peuvent utiliser ComputeClasses pour configurer l'infrastructure pour différents types de charges de travail, de sorte que chaque nouveau nœud soit optimisé pour les exigences spécifiques de vos applications. Les ComputeClasses améliorent la vitesse et la flexibilité de l'autoscaling GKE, et vous offrent une méthode déclarative pour configurer les options d'infrastructure dans vos clusters. Pour en savoir plus, consultez la section Avantages de l'utilisation de ComputeClasses.

Certaines fonctionnalités et caractéristiques de GKE ne sont disponibles qu'avec les ComputeClasses, par exemple :

  • Priorités de calcul de remplacement : définissez plusieurs ensembles de configurations d'infrastructure dans une ComputeClass, hiérarchisés en fonction de vos préférences. Lors de la mise à l'échelle, si la configuration la plus appropriée n'est pas disponible, GKE revient à la configuration suivante.
  • Migration active vers des nœuds de priorité supérieure : lorsqu'elle est configurée, GKE remplace automatiquement les nœuds qui se trouvent plus bas dans votre liste de priorités de remplacement par des nœuds qui se trouvent plus haut dans cette liste au fil du temps. Par conséquent, vos pods s'exécutent finalement sur vos nœuds préférés dans une ComputeClass, même si ce matériel n'était pas disponible lorsque vous avez créé la charge de travail.
  • Autopilot dans GKE Standard : exécutez des charges de travail en mode GKE Autopilot pour utiliser les fonctionnalités Autopilot telles que la plate-forme de calcul optimisée pour les conteneurs et la facturation basée sur les pods, même dans les clusters Standard. GKE gère ces nœuds et charges de travail, ce qui vous permet de bénéficier des avantages du mode Autopilot dans n'importe quel cluster.

Avantages des ComputeClasses

Les ComputeClasses offrent aux administrateurs et opérateurs de plate-forme des avantages tels que les suivants :

  • Amélioration de la disponibilité des ressources : les ComputeClasses étendent les capacités de l'autoscaling de cluster GKE. Les fonctionnalités ComputeClass, telles que les priorités de secours et les paramètres de consolidation des nœuds, peuvent réduire le risque de blocage des pods à l'état "En attente" et augmenter la gamme d'options que vous pouvez utiliser pour mettre à l'échelle vos nœuds.
  • Configuration déclarative au niveau de la plate-forme : les ComputeClasses permettent aux ingénieurs de plate-forme de décrire de manière déclarative les configurations de nœuds pour différents types de charges de travail. L'autoscaling GKE gère la création et la configuration des nœuds et des pools de nœuds. Vous pouvez intégrer vos ComputeClasses à vos pipelines CI/CD pour assurer la cohérence de l'infrastructure provisionnée sur votre plate-forme.
  • Réduction des frais de gestion : les ComputeClasses réduisent la complexité de la gestion de l'infrastructure et des charges de travail à grande échelle. Les ingénieurs de plate-forme déclarent des classes d'infrastructure, et les opérateurs d'applications sélectionnent une classe pertinente dans une charge de travail. GKE gère le scaling et la configuration matérielle des nœuds, et applique les rejets, les tolérances et les étiquettes.

À propos de la ressource personnalisée ComputeClass

Les ComputeClasses sont des ressources personnalisées Kubernetes. Vous pouvez définir la spécification d'une ComputeClass dans un fichier manifeste et la créer dans vos clusters, de la même manière que vous définissez et créez vos ressources de charge de travail Kubernetes, comme les déploiements et les services.

L'exemple de fichier manifeste suivant définit une ComputeClass nommée n4 :

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: n4
spec:
  nodePoolAutoCreation:
    enabled: true
  priorities:
  - machineFamily: n4
  - machineFamily: n2
  whenUnsatisfiable: DoNotScaleUp

Lorsqu'un pod sélectionne cette ComputeClass, GKE effectue les opérations suivantes lorsqu'il crée des nœuds :

  1. GKE crée des nœuds qui utilisent la série de machines N4.
  2. Si la série de machines N4 n'est pas disponible, GKE crée des nœuds qui utilisent la série de machines N2 à la place.
  3. Si la série de machines N2 n'est pas disponible, GKE attend que des ressources le soient pour planifier le pod.

Vous pouvez contrôler différents paramètres de vos nœuds à l'aide de ComputeClasses, y compris les accélérateurs, les paramètres système des nœuds, les emplacements des nœuds et le comportement de secours de GKE lorsque les ressources matérielles ne sont pas disponibles. Pour en savoir plus sur toutes les configurations disponibles pour les ComputeClasses, consultez la définition de ressource personnalisée ComputeClass.

Sélection de ComputeClass dans les charges de travail

Pour utiliser une ComputeClass pour une charge de travail GKE, vous devez sélectionner la ComputeClass dans le fichier manifeste de la charge de travail à l'aide d'un sélecteur de nœuds pour le libellé cloud.google.com/compute-class.

L'exemple de fichier manifeste Deployment suivant sélectionne une ComputeClass :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "4Gi"

Remplacez COMPUTE_CLASS par le nom d'une ComputeClass existante dans le cluster. Par exemple, vous pouvez spécifier la ComputeClass n4 à partir de la section À propos de la ressource personnalisée ComputeClass ou la ComputeClass intégrée autopilot.

Configuration des nœuds dans les spécifications de charge de travail

Les clusters GKE Autopilot et le provisionnement automatique des nœuds dans GKE Standard vous permettent d'utiliser des sélecteurs de nœuds dans vos pods pour créer des nœuds dotés de propriétés spécifiques, comme des familles de machines, des Spot VM ou des GPU et TPU. Les ComputeClasses vous permettent de définir ces exigences de manière centralisée au lieu d'ajouter des sélecteurs individuels à chaque charge de travail.

À propos de l'application des ComputeClasses par défaut

Vous pouvez configurer GKE pour qu'il applique une ComputeClass par défaut aux pods qui n'en sélectionnent pas de spécifique. Vous pouvez définir une ComputeClass par défaut pour des espaces de noms spécifiques ou pour un cluster entier. Pour savoir comment configurer vos clusters ou espaces de noms avec une classe par défaut, consultez Appliquer des ComputeClasses aux pods par défaut.

Le tableau suivant décrit les effets de la définition d'une ComputeClass comme classe de calcul par défaut pour un espace de noms ou pour un cluster :

Effets des ComputeClasses par défaut
Valeur par défaut au niveau de l'espace de noms
  • GKE n'applique la ComputeClass qu'aux pods d'un espace de noms spécifique.
  • GKE modifie les pods pour ajouter un sélecteur de nœuds pour la classe par défaut au niveau de l'espace de noms.
  • GKE n'effectue un scaling à la hausse que pour les nœuds qui possèdent des libellés et des rejets de nœud pour cette ComputeClass, comme pour toute autre classe de calcul.
  • GKE ajoute des libellés et des rejets de nœud aux nœuds qu'il crée pour la classe par défaut au niveau de l'espace de noms.
Valeur par défaut au niveau du cluster
  • GKE applique la ComputeClass aux pods de n'importe quel espace de noms.
  • GKE n'applique ComputeClass qu'aux pods qui ne disposent pas déjà d'un sélecteur pour une ComputeClass.
  • GKE ne modifie pas les spécifications de pod pour ajouter un sélecteur de nœud pour la classe par défaut au niveau du cluster.
  • GKE augmente le nombre de nœuds qui remplissent l'une des conditions suivantes :
    • Les nœuds ne comportent aucun libellé ni rejet pour une autre classe de calcul.
    • Les nœuds comportent le libellé de nœud cloud.google.com/compute-class: default.
  • GKE ajoute le libellé de nœud cloud.google.com/compute-class: default aux nœuds que GKE crée pour la classe par défaut au niveau du cluster. GKE n'ajoute aucun rejet de nœud à ces nœuds.
  • Si vous mettez à jour un cluster Autopilot pour qu'il utilise une classe de calcul personnalisée comme valeur par défaut au niveau du cluster, GKE n'exécutera pas les pods sur la plate-forme de calcul optimisée pour les conteneurs Autopilot par défaut. Dans GKE version 1.33.1-gke.1107000 et ultérieure, vous pouvez utiliser la plate-forme de calcul Autopilot pour des pods spécifiques en ajoutant le sélecteur de nœud cloud.google.com/compute-class: autopilot à ces pods.

Si GKE applique une ComputeClass par défaut au niveau de l'espace de noms à un pod, ce pod n'activera pas la ComputeClass par défaut au niveau du cluster, car GKE ajoute un sélecteur de nœud pour la classe par défaut au niveau de l'espace de noms au pod.

ComputeClasses par défaut au niveau du cluster

Lorsque vous activez les ComputeClasses par défaut au niveau du cluster, un objet ComputeClass nommé default définit les règles d'autoscaling des nœuds pour le cluster. Si votre cluster possède déjà une ComputeClass nommée default, GKE utilise cette configuration de ComputeClass pour le cluster. Si le cluster ne dispose pas d'une ComputeClass personnalisée nommée default, GKE se comporte comme si les règles ComputeClass suivantes s'appliquaient :

spec:
  whenUnsatisfiable: ScaleUpAnyway
  nodePoolAutoCreation:
    enabled: true

Par défaut, GKE n'applique aucun comportement de secours et ne modifie pas la configuration des nœuds mis à l'échelle automatiquement. Pour appliquer des propriétés spécifiques aux nœuds avec autoscaling par défaut, vous devez déployer une ComputeClass personnalisée nommée default.

Tenez compte des points suivants lorsque vous configurez votre classe de calcul par défaut au niveau du cluster :

  • Pour éviter que les pods ne restent bloqués à l'état Pending, définissez le champ spec.whenUnsatisfiable sur ScaleUpAnyway. Cette valeur permet à GKE de créer des nœuds même si les pods demandent des familles de machines Compute Engine qui ne figurent pas dans les règles de priorité de la classe par défaut au niveau du cluster. Si vous souhaitez forcer ces pods à utiliser les familles de machines qui se trouvent dans la ComputeClass par défaut, définissez ce champ sur DoNotScaleUp.
  • Pour limiter les modifications apportées à la default ComputeClass, utilisez un ClusterRole RBAC pour limiter les opérations update, patch, delete et create sur la ressource ComputeClass nommée default.
  • Pour modifier les paramètres de consolidation des nœuds par défaut de l'autoscaler de cluster, utilisez le champ spec.autoscalingPolicy dans la spécification ComputeClass. Les paramètres que vous spécifiez pour ce champ dans la ComputeClass par défaut au niveau du cluster s'appliquent à tous les nœuds de votre cluster. Pour en savoir plus, consultez Définir les paramètres d'autoscaling pour la consolidation des nœuds.

Étapes suivantes