Créer et gérer des pools de nœuds

Lorsque vous créez un cluster d'utilisateur, vous devez configurer au moins un pool de nœuds, qui est un groupe de nœuds partageant tous la même configuration. Une fois le cluster créé, vous pouvez ajouter des pools de nœuds, en mettre à jour les paramètres et les supprimer.

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

La façon dont vous créez, mettez à jour et supprimez des pools de nœuds varie selon que 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 gkectl, 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 gkectl sur le poste de travail administrateur pour gérer les pools de nœuds.

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 avec votre compte Google.

    gcloud auth login
    
  2. Mettez à jour les composants :

    gcloud components update
    

Ajouter un pool de nœuds

Si le cluster est géré par l'API GKE On-Prem, vous pouvez utiliser la console ou la gcloud CLI pour ajouter un pool de nœuds. Toutefois, vous devez utiliser gkectl sur votre poste de travail administrateur pour configurer les paramètres suivants du pool de nœuds:

Avant d'ajouter un autre pool de nœuds, vérifiez qu'il y a suffisamment d'adresses IP disponibles sur le cluster.

gkectl

Procédez comme suit sur votre poste de travail administrateur:

  1. Dans votre fichier de configuration de cluster d'utilisateur, remplissez la section nodePools.

    Vous devez spécifier les champs suivants :

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    Les champs suivants sont facultatifs. Si vous n'incluez pas nodePools[i].bootDiskSizeGB ou nodePools[i].osImageType, les valeurs par défaut sont utilisées.

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. Exécutez la commande ci-dessous.

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Remplacez les éléments suivants :

    • ADMIN_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster d'administrateur.

    • USER_CLUSTER_CONFIG par le chemin d'accès au fichier de configuration du cluster d'utilisateur.

Exemple de configuration

Il y a quatre pools de nœuds dans l'exemple de configuration suivant, avec des attributs différents pour chacun :

  • pool-1 : seuls les attributs minimaux requis sont spécifiés.
  • pool-2 : inclut vsphere.datastore et vsphere.tags.
  • pool-3 : inclut taints et labels.
  • pool-4 : inclut osImageType et bootDiskSizeGB.
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
    tags:
    - category: "purpose"
      name: "testing"
- name: pool-3
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  osImageType: cos
  bootDiskSizeGB: 40

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. Configurez le pool de nœuds :

    1. Saisissez le nom du pool de nœuds.
    2. Saisissez le nombre de vCPUs pour chaque nœud du pool (au moins quatre par nœud de calcul de cluster d'utilisateur).
    3. Saisissez la taille de la mémoire en mébioctets (Mio) pour chaque nœud du pool (8192 Mio au minimum par nœud de nœud de calcul de cluster d'utilisateur, doit être un multiple de 4).
    4. Dans le champ Nœuds, saisissez le nombre de nœuds du pool (minimum 3).
    5. Sélectionnez le type d'image d'OS : Ubuntu Containerd ou COS.

    6. Saisissez la taille du disque de démarrage en gibioctets (Gio) (la valeur par défaut est 40 Gio).

  6. Dans la section Métadonnées du pool de nœuds (facultatif), si vous souhaitez ajouter des libellés et des rejets Kubernetes, procédez comme suit :

    1. Cliquez sur + Ajouter des libellés Kubernetes. Saisissez la clé et la valeur du libellé. Répétez l'opération autant de fois que nécessaire.
    2. Cliquez sur + Ajouter un rejet. Saisissez la clé, la valeur et l'effet pour le rejet. Répétez l'opération autant de fois que nécessaire.
  7. Cliquez sur Créer.

  8. La console Google Cloud affiche État du cluster : modifications en cours. Cliquez sur Afficher les détails pour afficher la Condition d'état de la ressource et les Messages d'état.

gcloud CLI

Exécutez la commande suivante pour créer un pool de nœuds:

gcloud container vmware node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME  \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --image-type=IMAGE_TYPE  \
  --boot-disk-size=BOOT_DISK_SIZE \
  --cpus=vCPUS \
  --memory=MEMORY \
  --replicas=NODES

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 dans lequel le pool de nœuds sera créé.

  • FLEET_HOST_PROJECT_ID: ID du projet dans lequel le cluster est enregistré.

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

    • IMAGE_TYPE: type d'image de système d'exploitation à exécuter sur les VM du pool de nœuds. Définissez ce paramètre sur l'une des valeurs suivantes: ubuntu_containerd ou cos.

    • BOOT_DISK_SIZE: taille du disque de démarrage en gibioctets (Gio) pour chaque nœud du pool. La valeur minimale est de 40 Gio.

    • vCPUs: nombre de processeurs virtuels pour chaque nœud du pool de nœuds. Le minimum est de 4.

    • MEMORY: taille de la mémoire en mébioctets (Mio) pour chaque nœud du pool. La valeur minimale est de 8 192 Mio par nœud de calcul de cluster d'utilisateur, et la valeur doit être un multiple de 4.

    • NODES : Nombre de nœuds dans le pool de nœuds. Le minimum est de trois.

    Exemple :

    gcloud container vmware node-pools create default-pool \
      --cluster=user-cluster-1  \
      --location=us-west1 \
      --image-type=ubuntu_containerd  \
      --boot-disk-size=40 \
      --cpus=8 \
      --memory=8192 \
      --replicas=5
    

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

    • --enable-load-balancer: uniquement pertinent pour l'équilibreur de charge MetalLB. Si elle est spécifiée, elle permet au haut-parleur MetalLB de s'exécuter sur les nœuds du pool. Au moins un pool de nœuds doit être activé pour l'équilibreur de charge MetalLB.

    • --image=IMAGE: nom de l'image de l'OS dans vCenter.

    • --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és à 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.

    Exemple :

    gcloud container vmware node-pools create default-pool \
        --cluster=user-cluster-1  \
        --location=us-west1 \
        --image-type=ubuntu_containerd  \
        --boot-disk-size=40 \
        --cpus=8 \
        --memory=8192 \
        --replicas=5 \
        --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
    

    Pour plus d'informations sur les autres indicateurs facultatifs, consultez la documentation de référence de gcloud.

Mettre à jour un pool de nœuds

Lorsque vous augmentez le nombre d'instances répliquées, GKE sur VMware ajoute le nombre de nœuds requis au cluster d'utilisateur. Lorsque vous réduisez le nombre d'instances répliquées, les nœuds sont supprimés. La modification du nombre d'instances dupliquées d'un pool de nœuds n'interrompt pas les charges de travail. Assurez-vous que vos adresses IP sont disponibles si vous augmentez le nombre d'instances dupliquées.

Le fait de mettre à jour un autre champ de pool de nœuds a pour effet de déclencher une mise à jour progressive sur le cluster. Lors d'une mise à jour progressive, GKE sur VMware crée un nœud, puis supprime un ancien nœud. Ce processus est répété jusqu'à ce que tous les anciens nœuds soient remplacés par de nouveaux nœuds. Ce processus n'entraîne pas de temps d'arrêt, mais le cluster doit disposer d'une adresse IP supplémentaire à utiliser pendant la mise à jour.

Supposons qu'un pool de nœuds ait N nœuds à la fin d'une mise à jour. Vous devez alors disposer d'au moins N + 1 adresse IP pour les nœuds de ce pool. Cela signifie que si vous redimensionnez un cluster en ajoutant des nœuds à un ou plusieurs pools, vous devez disposer d'au moins une adresse IP de plus que le nombre total de nœuds qui se trouveront dans tous les pools de nœuds du cluster à la fin du redimensionnement. Pour en savoir plus, consultez la section Vérifier que suffisamment d'adresses IP sont disponibles.

Pour mettre à jour un pool de nœuds sur un cluster d'utilisateur :

gkectl

  1. Modifiez les valeurs des champs que vous souhaitez modifier dans la section nodePools du fichier de configuration du cluster d'utilisateur.

  2. Mettez à jour le cluster :

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Remplacez les éléments suivants :

    • ADMIN_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster d'administrateur.

    • USER_CLUSTER_CONFIG par le chemin d'accès au fichier de configuration du cluster d'utilisateur.

Mettre à jour le osImageType utilisé par un pool de nœuds

Pour mettre à jour un pool de nœuds afin d'utiliser un autre osImageType, vous devez utiliser la ligne de commande. Pour modifier le osImageType utilisé par un pool de nœuds, mettez à jour le fichier de configuration du pool de nœuds comme indiqué dans l'exemple suivant, puis exécutez gkectl update cluster.

nodePools:
- name: np-1
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: ubuntu_containerd

Console

Vous ne pouvez mettre à jour que les champs suivants à l'aide de la console:

  • Nombre d'instances dupliquées
  • Memory
  • Nombre de vCPU

Pour mettre à jour d'autres champs, utilisez gcloud CLI ou gkectl.

  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. Cliquez sur le nom du pool de nœuds que vous souhaitez modifier.

  6. Cliquez sur Modifier à côté du champ que vous souhaitez modifier, puis sur OK.

  7. Cliquez sur pour revenir à la page précédente.

  8. La console Google Cloud affiche État du cluster : modifications en cours. Cliquez sur Afficher les détails pour afficher la Condition d'état de la ressource et les Messages d'état.

gcloud CLI

  1. Vous pouvez également répertorier les pools de nœuds pour obtenir le nom de celui que vous souhaitez mettre à jour:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Exécutez la commande suivante pour mettre à jour le pool de nœuds:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --ATTRIBUTE_TO_UPDATE \
      ...
    

    Remplacez les éléments suivants :

    • NODE_POOL_NAME: nom du pool de nœuds à mettre à jour.

    • USER_CLUSTER_NAME: nom du cluster d'utilisateur contenant le pool de nœuds.

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

    • ATTRIBUTE_TO_UPDATE: une ou plusieurs options permettant de mettre à jour les attributs du pool de nœuds. Par exemple, pour modifier le nombre de processeurs virtuels et de nœuds dans le pool, exécutez la commande suivante.

    gcloud container vmware node-pools update default-pool \
        --cluster=user-cluster-1  \
        --project=example-project-12345
        --location=us-west1 \
        --cpus=10 \
        --replicas=6
    

    Pour en savoir plus sur les attributs de pool de nœuds que vous pouvez mettre à jour, consultez la documentation de référence sur gcloud.

Vérifier vos modifications

Pour vérifier que vos pools de nœuds ont été créés ou mis à jour comme prévu, inspectez les nœuds de cluster :

gkectl

Exécutez la commande ci-dessous.

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

Si vous devez annuler vos modifications, modifiez le fichier de configuration du cluster et exécutez la commande gkectl update 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.

  5. Cliquez sur le nom du pool de nœuds que vous souhaitez afficher.

gcloud CLI

Exécutez la commande ci-dessous.

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

Supprimer un pool de nœuds

Bien que vous puissiez supprimer des pools de nœuds, votre cluster d'utilisateur doit disposer d'au moins un pool de nœuds. La suppression d'un pool de nœuds entraîne la suppression immédiate des nœuds de ce pool, que ceux-ci exécutent ou non des charges de travail.

Pour supprimer un pool de nœuds d'un cluster d'utilisateur, procédez comme suit :

gkectl

  1. Assurez-vous qu'aucune charge de travail n'est en cours d'exécution sur les nœuds concernés.

  2. Supprimez sa définition de la section nodePools du fichier de configuration du cluster d'utilisateur.

  3. Mettez à jour le cluster :

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Remplacez les éléments suivants :

    • [ADMIN_CLUSTER_KUBECONFIG] par le chemin d'accès au fichier kubeconfig du cluster d'administrateur.

    • [USER_CLUSTER_CONFIG] par le chemin d'accès au fichier de configuration du cluster d'utilisateur.

Console

  1. Assurez-vous qu'aucune charge de travail n'est en cours d'exécution sur les nœuds concernés.

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

    Accéder aux clusters GKE

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

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

  5. Cliquez sur l'onglet Nœuds.

  6. Cliquez sur le nom du pool de nœuds que vous souhaitez supprimer.

  7. Cliquez sur Supprimer.

  8. Cliquez sur pour revenir à la page précédente.

  9. La console Google Cloud affiche État du cluster : modifications en cours. Cliquez sur Afficher les détails pour afficher la Condition d'état de la ressource et les Messages d'état.

gcloud CLI

  1. Vous pouvez également répertorier les pools de nœuds pour obtenir le nom du pool que vous souhaitez supprimer:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Exécutez la commande suivante pour supprimer le pool de nœuds:

    gcloud container vmware 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: nom du pool de nœuds à supprimer.

    • USER_CLUSTER_NAME: nom du cluster d'utilisateur contenant le pool de nœuds.

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

Dépannage

  • En général, la commande gkectl update cluster fournit des détails en cas d'échec. Si la commande aboutit et que vous ne voyez pas les nœuds, suivez le guide Diagnostiquer les problèmes de cluster pour résoudre le problème.

  • Il est possible que les ressources du cluster soient insuffisantes. Par exemple, il peut arriver qu'il n'y ait plus d'adresse IP disponible lors de la création ou de la mise à jour du pool de nœuds. Consultez la page Redimensionner un cluster d'utilisateur pour savoir comment vérifier que des adresses IP sont disponibles.

  • Vous pouvez également consulter le guide général de dépannage.

  • Symptôme : Plus rien ne se passe après le message Creating node MachineDeployment(s) in user cluster….

    La création ou la mise à jour des pools de nœuds dans votre cluster d'utilisateur peut prendre un certain temps. Cependant, si le temps d'attente est extrêmement long et que vous soupçonnez un échec, vous pouvez exécuter les commandes suivantes :

    1. Exécutez la commande kubectl get nodes pour connaître l'état des nœuds.
    2. Pour tous les nœuds qui ne sont pas "Ready" (prêts), exécutez la commande kubectl describe node NODE_NAME pour obtenir plus de détails.