Gérer les pools de nœuds d'un cluster

Un pool de nœuds est un groupe de nœuds au sein d'un cluster qui possèdent tous la même configuration. Tous les nœuds de votre cluster doivent appartenir à un pool de nœuds. Il existe trois types de pools de nœuds dans un cluster GKE sur Bare Metal: le plan de contrôle, l'équilibreur de charge et les pools de nœuds de calcul.

Cette page explique comment vérifier l'état des pools de nœuds de calcul, et comment ajouter, mettre à jour et supprimer des pools de nœuds de calcul.

Choisir un outil pour la gestion des pools de nœuds

La manière dont vous gérez les pools de nœuds dépend du type de cluster et, pour les clusters d'utilisateur, si le cluster est géré par l'API GKE On-Prem ou non. Un cluster d'utilisateur est géré par l'API GKE On-Prem si l'une des conditions suivantes est remplie:

  • Le cluster a été créé dans la console Google Cloud ou à l'aide de la Google Cloud CLI (gcloud CLI), qui configure automatiquement l'API GKE On-Prem pour gérer le cluster.

  • Le cluster a été créé à l'aide de bmctl, mais il a été configuré pour être géré par l'API GKE On-Prem.

Si l'API GKE On-Prem gère un cluster d'utilisateur, vous pouvez utiliser la console ou la gcloud CLI pour gérer les pools de nœuds. Si le cluster d'utilisateur n'est pas géré par l'API GKE On-Prem, utilisez kubectl sur le poste de travail administrateur pour gérer les pools de nœuds. Vous pouvez également utiliser kubectl pour gérer des pools de nœuds pour tous les types de clusters pouvant contenir des pools de nœuds de calcul (clusters hybrides, autonomes et d'utilisateur).

Si vous prévoyez d'utiliser gcloud CLI, procédez comme suit sur un ordinateur sur lequel la gcloud CLI est installée:

  1. Connectez-vous à l'aide de votre compte Google

    gcloud auth login
    
  2. Mettez à jour les composants :

    gcloud components update
    

Vérifier l'état du nœud

Avant d'ajouter ou de supprimer des pools de nœuds, vérifiez l'état des nœuds et de leurs pools respectifs.

kubectl

Avec kubectl, vous pouvez obtenir l'état des nœuds d'un espace de noms spécifique ou de l'ensemble du cluster. L'exemple suivant montre l'état des pools de nœuds dans l'espace de noms cluster-abm-cluster du cluster :

kubectl get nodepools.baremetal.cluster.gke.io -n cluster-abm-cluster

Le système renvoie des résultats semblables à ceux-ci :

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
abm-cluster             3       0             0         0                  0
default-pool            2       0             0         0                  0
backup-pool             3       0             0         0                  0

Chaque colonne du tableau indique les différents états dans lesquels un nœud peut se trouver. Chaque ligne du tableau correspond au nombre de nœuds par pool dans chacun des états de nœud.

Lorsque vous ajoutez un nœud, il est initialement dans l'état Reconciling durant son provisionnement. Une fois le nœud intégré au cluster, son état passe à Ready.

Vous pouvez également vérifier l'état des nœuds du cluster en exécutant la commande suivante :

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

Console

  1. Dans la console, accédez à la page de présentation des clusters Google Kubernetes Engine.

    Accéder aux clusters GKE

  2. Sélectionnez le projet Google Cloud dans lequel se trouve le cluster d'utilisateur.

  3. Dans la liste des clusters, cliquez sur le nom du cluster puis sur Afficher les détails dans le panneau Détails.

  4. Cliquez sur l'onglet Nœuds.

    Une liste de pools de nœuds s'affiche.

Capture d'écran d'une liste de nœuds

gcloud CLI

  1. Répertoriez les pools de nœuds du cluster:

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Remplacez les éléments suivants :

    • USER_CLUSTER_NAME: nom du cluster d'utilisateur contenant les pools de nœuds.

    • FLEET_HOST_PROJECT_ID: ID du projet dans lequel le cluster a été créé.

    • LOCATION: emplacement Google Cloud associé au cluster d'utilisateur.

  2. Décrivez un pool de nœuds:

    gcloud container bare-metal node-pools describe NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Remplacez NODE_POOL_NAME par le nom du pool de nœuds.

Si vous avez besoin d'informations supplémentaires sur le diagnostic de vos clusters, consultez la page Créer des instantanés pour diagnostiquer les clusters.

Ajouter un pool de nœuds

kubectl

Tenez compte des règles suivantes lorsque vous ajoutez un pool de nœuds à un cluster :

  • Un cluster d'administrateur peut contenir un pool de nœuds d'équilibreur de charge et un pool de nœuds de plan de contrôle, mais il ne peut pas contenir de pool de nœuds de calcul. Toute tentative d'ajout d'un pool de nœuds de calcul à un cluster d'administrateur génère une erreur.

  • Un cluster ne peut contenir qu'un seul pool de nœuds de plan de contrôle et un seul pool de nœuds d'équilibreur de charge. Vous ne pouvez pas ajouter d'autres pools de nœuds de plan de contrôle ou d'équilibreur de charge à un cluster.

Pour ajouter des pools de nœuds à un cluster, vous devez créer une ressource nodepools.baremetal.cluster.gke.io dans le cluster. Dans l'exemple suivant, un nouveau pool de nœuds nommé "machine-learning-pool" est ajouté au fichier manifeste. Le nouveau pool de nœuds se compose de deux nœuds ayant les adresses IP 10.200.0.7 et 10.200.0.8 :

apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: machine-learning-pool
  namespace: cluster-abm-cluster
spec:
  clusterName: abm-cluster
  nodes:
  - address: 10.200.0.7
  - address: 10.200.0.8
  taints:
  - key: TAINT_KEY
    value: TAINT_VALUE
    effect: NoSchedule
  labels:
    key1: LABEL_1
    key2: LABEL_2

Stockez la configuration dans un fichier nommé machine-learning-pool.yaml et appliquez-la au cluster à l'aide de la commande suivante :

kubectl apply -f machine-learning-pool.yaml

Les points suivants doivent être pris en compte lors de l'ajout d'un pool de nœuds à un cluster :

  • Les configurations NodePool.spec.taints et NodePool.spec.labels sont rapprochées aux nœuds. Tous les rejets et étiquettes ajoutés directement aux nœuds sont supprimés. Le plan de contrôle ne supprime pas les rejets et les étiquettes que vous ajoutez directement lors du processus de synchronisation. Pour contourner cette étape du rapprochement, vous pouvez annoter le nœud avec baremetal.cluster.gke.io/label-taint-no-sync.

  • La ressource de pool de nœuds doit être créée dans le même espace de noms que le cluster associé et elle doit référencer le nom du cluster dans le champ spec.clusterName.

Console

  1. Dans la console, accédez à la page de présentation des clusters Google Kubernetes Engine.

    Accéder aux clusters GKE

  2. Sélectionnez le projet Google Cloud dans lequel se trouve le cluster d'utilisateur.

  3. Dans la liste des clusters, cliquez sur le nom du cluster puis sur Afficher les détails dans le panneau Détails.

  4. Cliquez sur Ajouter un pool de nœuds.

  5. Saisissez un nom pour le pool de nœuds.

  6. Dans le champ Adresse des nœuds 1, saisissez l'adresse IP de la machine de nœud de calcul.

    Si vous avez plusieurs machines de nœud de calcul à ajouter, cliquez sur  Ajouter une adresse.

  7. Le cas échéant, ajoutez des étiquettes Kubernetes et/ou des rejets Kubernetes.

  8. Cliquez sur Créer.

L'état du pool de nœuds s'affiche dans l'onglet Nœuds. Vous devrez peut-être actualiser la page pour afficher un état mis à jour.

gcloud CLI

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --node-configs-from-file=NODE_POOL_CONFIG

Remplacez les éléments suivants :

  • NODE_POOL_NAME: nom de votre choix pour le pool de nœuds. Ce nom doit :

    • contenir au maximum 40 caractères ;
    • ne contenir que des caractères alphanumériques minuscules ou un trait d'union - ;
    • commencer par un caractère alphabétique ;
    • se terminer par un caractère alphanumérique.
  • USER_CLUSTER_NAME: nom du cluster d'utilisateur.

  • FLEET_HOST_PROJECT_ID: ID du projet dans lequel le cluster a été créé.

  • LOCATION: emplacement Google Cloud que vous avez spécifié lors de la création du cluster.

  • NODE_POOL_CONFIG: chemin d'accès à un fichier de configuration décrivant le pool de nœuds. Exemple :

    nodeConfigs:
    - nodeIP: 10.200.0.10
      labels:
        key1: value1
        key2: value2
    - nodeIP: 10.200.0.11
      labels:
        key3: value3
        key4: value4
    

Vous pouvez également spécifier les éléments suivants :

  • --node-labels=KEY=VALUE,...: liste d'étiquettes Kubernetes (paires clé/valeur) séparées par une virgule appliquée à chaque nœud du pool.

  • --node-taints=KEY=VALUE:EFFECT,... Liste de rejets Kubernetes séparés par une virgule

à chaque nœud du pool. Les rejets sont des paires clé/valeur associées à un effet. Les rejets sont utilisés avec des tolérances pour la planification des pods. Spécifiez l'une des options suivantes pour EFFECT: NoSchedule, PreferNoSchedule ou NoExecute.

  • --validate-only : spécifiez cette option si vous souhaitez valider la mise à jour sans apporter de modifications.

Mettre à jour un pool de nœuds

kubectl

Pour mettre à jour un pool de nœuds, modifiez la ressource nodepools.baremetal.cluster.gke.io dans le cluster. Vous pouvez mettre à jour la ressource directement à l'aide de kubectl edit, ou mettre à jour le fichier YAML et utiliser kubectl apply.

Console

  1. Dans la console, accédez à la page de présentation des clusters Google Kubernetes Engine.

    Accéder aux clusters GKE

  2. Sélectionnez le projet Google Cloud dans lequel se trouve le cluster d'utilisateur.

  3. Dans la liste des clusters, cliquez sur le nom du cluster puis sur Afficher les détails dans le panneau Détails.

  4. Cliquez sur l'onglet Nœuds.

  5. Dans la liste, cliquez sur le pool de nœuds que vous souhaitez mettre à jour.

  6. Sur la page Détails du pool de nœuds, cliquez sur Modifier.

  7. Modifiez les paramètres selon vos besoins, puis cliquez sur Enregistrer.

gcloud CLI

  1. Vous pouvez également répertorier les pools de nœuds du cluster pour obtenir le nom du pool de nœuds à mettre à jour.

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Remplacez les éléments suivants :

    • USER_CLUSTER_NAME: nom du cluster d'utilisateur contenant les pools de nœuds.

    • FLEET_HOST_PROJECT_ID: ID du projet dans lequel le cluster a été créé.

    • LOCATION: emplacement Google Cloud associé au cluster d'utilisateur.

  2. Exécutez la commande ci-dessous.

    gcloud container bare-metal node-pools update NODE_POOL_NAME  \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --node-configs-from-file=NODE_CONFIG_FILE
    

    Remplacez les éléments suivants :

    • NODE_POOL_NAME par le nom du pool de nœuds.

    • NODE_CONFIG_FILE: chemin d'accès à un fichier de configuration décrivant le pool de nœuds. Exemple :

    nodeConfigs:
      - nodeIP: 10.200.0.10
        labels:
          key1: value1
      - nodeIP: 10.200.0.11
    

Vous pouvez également spécifier les éléments suivants :

  • --node-labels=KEY=VALUE,...: liste d'étiquettes Kubernetes (paires clé/valeur) séparées par une virgule appliquée à chaque nœud du pool.

  • --node-taints=KEY=VALUE:EFFECT,...Liste de rejets Kubernetes séparés par une virgule, appliquée à chaque nœud du pool. Les rejets sont des paires clé/valeur associées à un effet. Les rejets sont utilisés avec des tolérances pour la planification des pods. Spécifiez l'une des options suivantes pour EFFECT: NoSchedule, PreferNoSchedule ou NoExecute.

  • --validate-only : spécifiez cette option si vous souhaitez valider la mise à jour sans apporter de modifications.

Exemple :

gcloud container bare-metal node-pools create default-pool \
    --cluster=user-cluster-1  \
    --location=us-west1 \
    --node-configs-from-file=node-pool-config.yaml \
    --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute

Supprimer un pool de nœuds

kubectl

Vous supprimez les pools de nœuds avec kubectl delete. Par exemple, pour supprimer le pool de nœuds ajouté à la section précédente, machine-learning-pool, utilisez la commande suivante :

kubectl delete nodepool machine-learning-pool -n cluster-abm-cluster

N'oubliez pas que les pools de nœuds de plan de contrôle et d'équilibreur de charge sont essentiels au bon fonctionnement d'un cluster et ne peuvent donc pas être supprimés d'un cluster.

Console

  1. Dans la console, accédez à la page de présentation des clusters Google Kubernetes Engine.

    Accéder aux clusters GKE

  2. Sélectionnez le projet Google Cloud dans lequel se trouve le cluster d'utilisateur.

  3. Dans la liste des clusters, cliquez sur le nom du cluster puis sur Afficher les détails dans le panneau Détails.

  4. Cliquez sur l'onglet Nœuds, puis sur le pool de nœuds que vous souhaitez supprimer.

  5. Cliquez sur Supprimer.

  6. Dans la boîte de dialogue de confirmation, saisissez le nom du pool de nœuds, puis cliquez sur Confirmer.

gcloud CLI

gcloud container bare-metal node-pools delete NODE_POOL_NAME  \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

Remplacez les éléments suivants :

  • NODE_POOL_NAME par le nom du pool de nœuds.

  • USER_CLUSTER_NAME: nom du cluster d'utilisateur contenant les pools de nœuds.

  • FLEET_HOST_PROJECT_ID: ID du projet dans lequel le cluster a été créé.

  • LOCATION: emplacement Google Cloud associé au cluster d'utilisateur.

La suppression d'un pool de nœuds de calcul dans un cluster peut provoquer l'interruption des pods. Si un PodDisruptionBudget (PDB) est en place, il se peut que vous ne puissiez pas supprimer un pool de nœuds. Pour en savoir plus sur les règles d'interruption des pods, consultez la section Supprimer des nœuds bloqués par le budget d'interruption de pod.

Étapes suivantes

Si vos exigences liées aux charges de travail changent après la création des pools de nœuds, vous pouvez mettre à jour un pool de nœuds de calcul pour ajouter ou supprimer des nœuds. Pour ajouter des nœuds à un pool de nœuds de calcul ou en supprimer, consultez la section Ajouter ou supprimer des nœuds dans un cluster.