Définir un emplacement compact pour les nœuds GKE


Vous pouvez contrôler si vos nœuds Google Kubernetes Engine (GKE) sont physiquement situés les uns par rapport aux autres dans une zone à l'aide d'une stratégie d'emplacement compact.

Présentation

Lorsque vous créez des pools de nœuds et des charges de travail dans un cluster GKE, vous pouvez définir une stratégie d'emplacement compact, qui spécifie que ces nœuds ou charges de travail doivent être proches les uns des autres dans une zone. Le fait de disposer de nœuds plus proches les uns des autres permet de réduire la latence du réseau entre les nœuds, ce qui peut être particulièrement utile pour les charges de travail par lot à couplage fort.

Utiliser un emplacement compact avec GKE Autopilot

Dans les clusters Autopilot, vous pouvez demander un emplacement compact pour des charges de travail spécifiques en ajoutant des sélecteurs de nœuds à la spécification de votre pod. Vous pouvez utiliser la stratégie d'emplacement compact par défaut d'Autopilot ou une stratégie d'emplacement compact Compute Engine existante qui utilise la série de machines N2 ou la série de machines N2D.

Limites

  • GKE provisionne des charges de travail dans un emplacement compact de la même zone.
  • Disponible avec les classes de calcul Balanced, Performance et Accelerator.
  • Disponible uniquement sur les types de machines C2, C2D, C3, C3D, H3, N2 et N2D.
  • Disponible uniquement avec les GPU A100, L4 et H100.
  • L'emplacement compact est disponible pour les pods regroupés sur un maximum de 1 500 nœuds.

Activer une stratégie d'emplacement compact

Pour activer l'emplacement compact pour GKE Autopilot, ajoutez un élément nodeSelector à la spécification de pod avec les clés suivantes:

  • cloud.google.com/gke-placement-group: identifiant que vous attribuez au groupe de pods devant s'exécuter ensemble dans le même groupe d'emplacements compacts. Chaque groupe d'emplacements est limité à 1 500 nœuds. Nous vous recommandons de limiter un groupe d'emplacements uniquement aux charges de travail qui bénéficient du regroupement, et de répartir vos charges de travail dans des groupes d'emplacements distincts si possible.

  • L'une des clés suivantes pour définir le type de ressource:

    • cloud.google.com/compute-class: "Balanced"
    • cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
  • cloud.google.com/placement-policy-name: nom facultatif d'une stratégie d'emplacement compact Compute Engine existante. Vous ne pouvez spécifier une stratégie d'emplacement compact personnalisée que dans la version 1.31.1-gke.2010000 et ultérieure de GKE.

    Pour obtenir des instructions, consultez la section Créer une stratégie d'emplacement compact de cette page.

L'exemple de spécification de pod suivant active l'emplacement compact avec une stratégie d'emplacement compact personnalisée:

apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
  nodeSelector:
    cloud.google.com/gke-placement-group: "placement-group-1"
    cloud.google.com/compute-class: "Balanced"
    cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME

Remplacez PLACEMENT_POLICY_NAME par le nom d'une règle d'emplacement compact Compute Engine existante. Pour utiliser la stratégie d'emplacement compact par défaut pour Autopilot, ignorez la ligne cloud.google.com/placement-policy-name.

Utiliser une stratégie d'emplacement compact personnalisée sans groupes d'emplacements

Pour utiliser une stratégie d'emplacement compact personnalisée sans groupes d'emplacements, vous devez ajouter le sélecteur de nœud cloud.google.com/placement-policy-name à la spécification de votre pod.

Cette approche peut être utile si vous souhaitez utiliser un JobSet pour planifier chaque tâche séparément, mais que vous souhaitez également utiliser une stratégie d'emplacement compact personnalisée pour placer les nœuds qui exécutent la même tâche plus près les uns des autres.

Étant donné que JobSet ne permet pas de spécifier différents sélecteurs de nœuds pour chaque tâche, vous ne pouvez pas utiliser JobSet avec des groupes d'emplacements dans ce scénario. Toutefois, vous pouvez utiliser la prise en charge intégrée des topologies exclusives de JobSet pour obtenir le même effet.

L'exemple de spécification de pod suivant active l'emplacement compact avec une règle d'emplacement compact personnalisée pour une charge de travail JobSet:

apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
  name: my-jobset
  annotations:
    alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-nodepool
spec:
 replicatedJobs:
    - name: my-job
      template:
        spec:
          # lines omitted for clarity
          template:
            spec:
              nodeSelector:
                cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
                cloud.google.com/machine-family: "n2"
              # lines omitted for clarity

Remplacez PLACEMENT_POLICY_NAME par le nom d'une règle d'emplacement compact Compute Engine existante.

Utiliser un emplacement compact avec GKE Standard

Limites

L'emplacement compact dans les pools de nœuds GKE Standard présente les limites suivantes :

  • Compatible uniquement avec les nouveaux pools de nœuds. Vous ne pouvez pas activer ou désactiver un emplacement compact sur les pools de nœuds existants.
  • Disponible uniquement pour les pools de nœuds fonctionnant dans une seule zone.
  • Disponible uniquement sur les types de machines A2, A3, A4, C2, C2D, C3, C3D, C4, G2, H3, N2 et N2D. Toutefois, pour A3 Ultra et A4, nous vous recommandons d'utiliser des réservations ciblées par bloc plutôt que l'emplacement compact. Pour en savoir plus, consultez la section Réserver de la capacité.
  • Accepte jusqu'à 1 500 instances de VM Compute Engine dans chaque règle. Tout pool de nœuds qui dépasse cette limite à tout moment sera rejeté lors de la création.
  • La spécification d'une stratégie de ressource personnalisée à l'aide de l'option placement-policy n'est pas compatible avec les mises à niveau bleu-vert.

Créer une règle d'emplacement compact

Pour créer des règles de concentration dans Google Cloud CLI, spécifiez l'option placement-type=COMPACT lors de la création du pool de nœuds ou du cluster. Avec ce paramètre, GKE tente de placer les nœuds dans un pool de nœuds plus près les uns des autres.

Pour utiliser une stratégie de ressource existante dans votre cluster, spécifiez l'emplacement de votre stratégie personnalisée pour l'option placement-policy lors de la création du pool de nœuds ou du cluster. Vous bénéficiez ainsi de la flexibilité nécessaire pour utiliser des emplacements réservés, plusieurs pools de nœuds avec la même stratégie d'emplacement, ainsi que d'autres options d'emplacement avancées. Cependant, cela nécessite également plus d'opérations manuelles que de spécifier l'option -placement-type=COMPACT. Par exemple, vous devez créer, supprimer et gérer vos stratégies de ressources personnalisées. Assurez-vous que le nombre maximal d'instances de VM est respecté sur tous les pools de nœuds à l'aide de la stratégie de ressource. Si cette limite est atteinte alors que certains de vos pools de nœuds n'ont pas atteint leur taille maximale, l'ajout d'autres nœuds va échouer.

Si vous ne spécifiez pas les options placement-type et placement-policy, alors par défaut aucune condition n'est imposée pour l'emplacement des nœuds.

Créer une règle de concentration dans un nouveau cluster

Lorsque vous créez un cluster, vous pouvez spécifier une règle de concentration qui sera appliquée au pool de nœuds par défaut. Pour tout pool de nœuds que vous créez par la suite, vous devrez spécifier si vous souhaitez appliquer un emplacement compact.

Pour créer un cluster dans lequel une règle de concentration est appliquée au pool de nœuds par défaut, utilisez la commande suivante :

gcloud container clusters create CLUSTER_NAME \
    --machine-type MACHINE_TYPE \
    --placement-type COMPACT \
    --max-surge-upgrade 0 \
    --max-unavailable-upgrade MAX_UNAVAILABLE

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom de votre nouveau cluster.
  • MACHINE_TYPE: type de machine à utiliser pour les nœuds, qui doit être un type de machine compatible listé dans les limites du cluster Standard.
  • --placement-type COMPACT : applique un emplacement compact pour les nœuds du pool par défaut.
  • MAX_UNAVAILABLE : nombre maximal de nœuds pouvant être indisponibles simultanément lors d'une mise à niveau du pool de nœuds. Pour les emplacements compacts, nous vous recommandons d'effectuer des mises à niveau rapides, sans mise à niveau de la surutilisation, afin d'optimiser la probabilité de trouver des nœuds colocalisés lors des mises à niveau.

Créer une règle de concentration sur un cluster existant

Sur un cluster existant, vous pouvez créer un pool de nœuds auquel une règle de concentration est appliquée.

Pour créer un pool de nœuds auquel une règle de concentration est appliquée, utilisez la commande suivante :

gcloud container node-pools create NODEPOOL_NAME \
    --machine-type MACHINE_TYPE \
    --cluster CLUSTER_NAME \
    --placement-type COMPACT \
    --max-surge-upgrade 0 \
    --max-unavailable-upgrade MAX_UNAVAILABLE

Remplacez les éléments suivants :

  • NODEPOOL_NAME : nom de votre nouveau pool de nœuds.
  • MACHINE_TYPE: type de machine à utiliser pour les nœuds, qui doit être un type de machine compatible listé dans les limites du cluster Standard.
  • CLUSTER_NAME : nom de votre cluster existant.
  • --placement-type COMPACT : indique d'appliquer un emplacement compact pour les nœuds du nouveau pool de nœuds.
  • MAX_UNAVAILABLE : nombre maximal de nœuds pouvant être indisponibles simultanément lors d'une mise à niveau du pool de nœuds. Pour les emplacements compacts, nous vous recommandons d'effectuer des mises à niveau rapides, sans mise à niveau de la surutilisation, afin d'optimiser la probabilité de trouver des nœuds colocalisés lors des mises à niveau.

Créer des pools de nœuds à l'aide d'une stratégie d'emplacement personnalisée partagée

Vous pouvez créer manuellement une stratégie de ressource et l'utiliser dans plusieurs pools de nœuds.

  1. Créez la stratégie de ressource dans la région du cluster Google Cloud :

    gcloud compute resource-policies create group-placement POLICY_NAME \
        --region REGION \
        --collocation collocated
    

    Remplacez les éléments suivants :

    • POLICY_NAME : nom de votre stratégie de ressource.
    • REGION : région de votre cluster.
  2. Créez un pool de nœuds à l'aide de la stratégie de ressource personnalisée :

    gcloud container node-pools create NODEPOOL_NAME \
        --machine-type MACHINE_TYPE \
        --cluster CLUSTER_NAME \
        --placement-policy POLICY_NAME \
        --max-surge-upgrade 0 \
        --max-unavailable-upgrade MAX_UNAVAILABLE
    

    Remplacez les éléments suivants :

    • NODEPOOL_NAME : nom de votre nouveau pool de nœuds.
    • MACHINE_TYPE: type de machine à utiliser pour les nœuds, qui doit être un type de machine compatible listé dans les limites du cluster standard.
    • CLUSTER_NAME : nom de votre cluster existant.
    • MAX_UNAVAILABLE : nombre maximal de nœuds pouvant être indisponibles simultanément lors d'une mise à niveau du pool de nœuds. Pour les emplacements compacts, nous vous recommandons d'effectuer des mises à niveau rapides, sans mise à niveau de la surutilisation, afin d'optimiser la probabilité de trouver des nœuds colocalisés lors des mises à niveau.

Utiliser une réservation Compute Engine avec une stratégie d'emplacement compact

Les réservations vous aident à garantir la disponibilité du matériel dans la zone spécifiée, ce qui réduit le risque d'échec de création du pool de nœuds pour cause de matériel insuffisant.

  1. Créez une réservation qui spécifie une stratégie d'emplacement compact :

    gcloud compute reservations create RESERVATION_NAME \
        --vm-count MACHINE_COUNT \
        --machine-type MACHINE_TYPE \
        --resource-policies policy=POLICY_NAME \
        --zone ZONE \
        --require-specific-reservation
    

    Remplacez les éléments suivants :

    • RESERVATION_NAME : nom de votre réservation.
    • MACHINE_COUNT : nombre de nœuds réservés.
    • MACHINE_TYPE: type de machine à utiliser pour les nœuds, qui doit être un type de machine compatible listé dans les limites du cluster standard.
    • POLICY_NAME : nom de votre stratégie de ressource.
    • ZONE : zone dans laquelle créer votre réservation.
  2. Créez un pool de nœuds en spécifiant à la fois la stratégie d'emplacement compact et la réservation que vous avez créée à l'étape précédente :

    gcloud container node-pools create NODEPOOL_NAME \
        --machine-type MACHINE_TYPE \
        --cluster CLUSTER_NAME \
        --placement-policy POLICY_NAME \
        --reservation-affinity specific \
        --reservation RESERVATION_NAME \
        --max-surge-upgrade 0 \
        --max-unavailable-upgrade MAX_UNAVAILABLE
    

Remplacez les éléments suivants :

  • NODEPOOL_NAME : nom de votre nouveau pool de nœuds.
  • MACHINE_TYPE: type de machine à utiliser pour les nœuds, qui doit être un type de machine compatible listé dans les limites du cluster Standard.
  • CLUSTER_NAME : nom de votre cluster existant.

Créer une charge de travail sur des nœuds utilisant un emplacement compact

Pour exécuter des charges de travail sur des nœuds dédiés utilisant un emplacement compact, vous pouvez utiliser plusieurs mécanismes Kubernetes, tels que l'attribution de pods aux nœuds et l'arrêt de la planification des pods indésirables sur un groupe de nœuds pour y parvenir.

Dans l'exemple suivant, nous ajoutons un rejet aux nœuds dédiés, ainsi qu'une tolérance et une affinité correspondantes aux pods.

  1. Ajoutez un rejet aux nœuds du pool de nœuds associés à une règle de concentration :

    kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
    
  2. Dans la définition de la charge de travail, spécifiez la tolérance et l'affinité de nœud nécessaires. Voici un exemple avec un seul pod :

    apiVersion: v1
    kind: Pod
    metadata:
      ...
    spec:
      ...
      tolerations:
      - key: dedicated-pool
        operator: "Equal"
        value: "NODEPOOL_NAME"
        effect: "NoSchedule"
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: dedicated-pool
                operator: In
                values:
                - NODEPOOL_NAME
    

Dans certains emplacements, il peut être impossible de créer un pool de nœuds volumineux à l'aide d'une règle de concentration. Pour limiter la taille de ces pools de nœuds aux besoins nécessaires, vous pouvez envisager de créer un pool de nœuds par charge de travail nécessitant un emplacement compact.

Utiliser l'emplacement compact pour le provisionnement automatique des nœuds

Le provisionnement automatique de nœuds permet à GKE de provisionner automatiquement des pools de nœuds en fonction des besoins en ressources des clusters. Pour en savoir plus, consultez la page Utiliser le provisionnement automatique des nœuds.

Pour activer l'emplacement compact pour le provisionnement automatique des nœuds, ajoutez un nodeSelector à la spécification de pod comme dans l'exemple suivant:

apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
  nodeSelector:
    cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
    cloud.google.com/machine-family: MACHINE_FAMILY
    cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
# lines omitted for clarity

Remplacez les éléments suivants :

  • PLACEMENT_GROUP_IDENTIFIER: identifiant que vous attribuez au groupe de pods devant s'exécuter ensemble dans le même groupe d'emplacements compacts.
  • MACHINE_FAMILY: nom de la famille de machines. Utilisez l'une des familles de machines compatibles avec l'emplacement compact. Nous vous recommandons d'utiliser des familles de machines C2 ou C2D pour les charges de travail présentant des exigences de performances en matière de calcul et de mise en réseau.
  • PLACEMENT_POLICY_NAME: nom facultatif d'une stratégie d'emplacement compact Compute Engine existante. GKE utilise la stratégie d'emplacement compact spécifiée lorsque le provisionnement automatique des nœuds crée un pool de nœuds pour regrouper vos pods. Vous ne pouvez spécifier une stratégie d'emplacement compact personnalisée que dans la version 1.31.1-gke.2010000 et ultérieure de GKE.

    Pour obtenir des instructions, consultez la section Créer une stratégie d'emplacement compact de cette page.

Vous pouvez omettre la clé cloud.google.com/machine-family si la configuration du pod définit déjà un type de machine compatible avec l'emplacement compact. Par exemple, si la spécification de pod inclut nvidia.com/gpu et que le cluster est configuré pour utiliser des GPU A100, vous n'avez pas besoin d'inclure la clé cloud.google.com/machine-family.

L'exemple suivant est une spécification de pod qui définit la requête nvidia.com/gpu. Le cluster est configuré pour utiliser des GPU A100. Ce pod spec n'inclut pas la clé cloud.google.com/machine-family:

  apiVersion: v1
  kind: Pod
  metadata:
    ...
  spec:
    ...
    nodeSelector:
      cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
      cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
    resources:
      limits:
        nvidia.com/gpu: 2

Pour en savoir plus, consultez la page Configurer des pods pour qu'ils utilisent des GPU.

Optimiser la taille du groupe d'emplacements

Étant donné que GKE trouve le meilleur emplacement pour des déploiements plus petits, nous vous recommandons d'indiquer à GKE d'éviter d'exécuter différents types de pods dans le même groupe d'emplacements. Ajoutez une clé de tolérance avec la clé cloud.google.com/gke-placement-group et l'identifiant d'emplacement compact que vous avez défini.

L'exemple suivant est une spécification de pod qui définit une tolérance de pod avec un emplacement compact :

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  ...
  tolerations:
  - key: cloud.google.com/gke-placement-group
    operator: "Equal"
    value: PLACEMENT_GROUP_IDENTIFIER
    effect: "NoSchedule"

Pour en savoir plus sur le provisionnement automatique des nœuds avec la tolérance aux pods, consultez la section Séparation des charges de travail.

Étapes suivantes