Crear y gestionar grupos de nodos

Cuando creas un clúster de usuario, debes configurar al menos un grupo de nodos, que es un grupo de nodos que tienen la misma configuración. Una vez creado el clúster, puedes añadir grupos de nodos, actualizar su configuración y eliminarlos.

Elegir una herramienta para gestionar grupos de nodos

La forma de crear, actualizar y eliminar grupos de nodos depende de si el clúster está gestionado por la API de GKE On-Prem. Un clúster de usuario está gestionado por la API GKE On-Prem si se cumple una de las siguientes condiciones:

  • El clúster se creó en la Google Cloud consola o mediante la CLI de Google Cloud (CLI de gcloud), que configura automáticamente la API de GKE On-Prem para gestionar el clúster.

  • El clúster se creó con gkectl, pero se configuró para que lo gestionara la API de GKE On-Prem.

Si la API de GKE On-Prem gestiona un clúster de usuario, puedes usar la consola o la CLI de gcloud para gestionar los grupos de nodos. Si el clúster de usuario no está gestionado por la API de GKE On-Prem, usa gkectl en la estación de trabajo de administrador para gestionar los grupos de nodos.

Si tienes previsto usar la CLI de gcloud, haz lo siguiente en un ordenador que tenga instalada la CLI de gcloud:

  1. Inicia sesión con tu cuenta de Google

    gcloud auth login
    
  2. Actualiza los componentes:

    gcloud components update
    

Añadir un grupo de nodos

Si el clúster está gestionado por la API GKE On-Prem, puedes usar la consola o la CLI de gcloud para añadir un grupo de nodos. Sin embargo, debes usar gkectl en tu estación de trabajo de administrador para configurar los siguientes ajustes del grupo de nodos:

Antes de añadir otro grupo de nodos, verifica que haya suficientes direcciones IP disponibles en el clúster.

gkectl

Haz lo siguiente en tu estación de trabajo de administrador:

  1. En el archivo de configuración del clúster de usuarios, rellena la sección nodePools.

    Debe especificar los siguientes campos:

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

    Los siguientes campos son opcionales. Si no incluye nodePools[i].bootDiskSizeGB o nodePools[i].osImageType, se usarán los valores predeterminados.

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. Ejecuta el siguiente comando:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Haz los cambios siguientes:

    • ADMIN_CLUSTER_KUBECONFIG con la ruta del archivo kubeconfig de tu clúster de administrador.

    • USER_CLUSTER_CONFIG con la ruta del archivo de configuración de tu clúster de usuarios.

Configuración de ejemplo

En la siguiente configuración de ejemplo, hay cuatro grupos de nodos, cada uno con atributos diferentes:

  • pool-1: solo se especifican los atributos obligatorios mínimos
  • pool-2: incluye vsphere.datastore y vsphere.tags
  • pool-3: incluye taints y labels
  • pool-4: incluye osImageType y 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

Consola

  1. En la consola, ve a la página Descripción general de los clústeres de Google Kubernetes Engine.

    Ir a clústeres de GKE

  2. Selecciona el proyecto en el que se encuentra el clúster de usuario. Google Cloud

  3. En la lista de clústeres, haga clic en el nombre del clúster y, a continuación, en Ver detalles en el panel Detalles.

  4. Haz clic en Añadir grupo de nodos.

  5. Configura el grupo de nodos:

    1. Escribe el nombre del grupo de nodos.
    2. Introduce el número de vCPUs de cada nodo del grupo (un mínimo de 4 por cada trabajador del clúster de usuario).
    3. Introduce el tamaño de la memoria en mebibytes (MiB) de cada nodo del grupo (el mínimo es de 8192 MiB por nodo de trabajador del clúster de usuarios y debe ser un múltiplo de 4).
    4. En el campo Nodos, introduce el número de nodos del pool (3 como mínimo).
    5. Selecciona el tipo de imagen de SO: Ubuntu Containerd o COS.

    6. Introduce el tamaño del disco de arranque en gibibytes (GiB). El valor predeterminado es 40 GiB.

  6. En la sección Metadatos del grupo de nodos (opcional), si quieres añadir etiquetas y marcas de Kubernetes, haz lo siguiente:

    1. Haz clic en + Añadir etiquetas de Kubernetes. Introduce la clave y el valor de la etiqueta. Repite el proceso tantas veces como sea necesario.
    2. Haz clic en + Añadir Taint. Introduce la clave, el valor y el efecto de la contaminación. Repite el proceso tantas veces como sea necesario.
  7. Haz clic en Crear.

  8. La consola Google Cloud muestra el mensaje Estado del clúster: cambios en curso. Haga clic en Mostrar detalles para ver la condición del estado del recurso y los mensajes de estado.

CLI de gcloud

Ejecuta el siguiente comando para crear un pool de nodos:

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

Haz los cambios siguientes:

  • NODE_POOL_NAME: el nombre que quieras darle al grupo de nodos. El nombre debe cumplir los siguientes requisitos:

    • Contener un máximo de 40 caracteres
    • Contener únicamente caracteres alfanuméricos en minúscula o un guion (-)
    • Empezar por un carácter alfabético
    • terminar con un carácter alfanumérico
  • USER_CLUSTER_NAME: nombre del clúster de usuarios en el que se creará el grupo de nodos.

  • FLEET_HOST_PROJECT_ID: el ID del proyecto en el que está registrado el clúster.

    • LOCATION: la Google Cloud ubicación asociada al clúster de usuarios.

    • IMAGE_TYPE: el tipo de imagen de SO que se ejecutará en las VMs del grupo de nodos. Se debe configurar como uno de los siguientes valores: ubuntu_containerd o cos.

    • BOOT_DISK_SIZE: tamaño del disco de arranque en gibibytes (GiB) de cada nodo del grupo. El mínimo es de 40 GiB.

    • vCPUs: número de vCPUs de cada nodo del pool de nodos. El valor mínimo es 4.

    • MEMORY: tamaño de la memoria en mebibytes (MiB) de cada nodo del grupo. El mínimo es de 8192 MiB por nodo de trabajador de clúster de usuarios y el valor debe ser un múltiplo de 4.

    • NODES: número de nodos del grupo de nodos. El valor mínimo es 3.

    Por ejemplo:

    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
    

    También puedes especificar lo siguiente:

    • --enable-load-balancer: solo es relevante para el balanceador de carga MetalLB. Si se especifica, permite que el altavoz de MetalLB se ejecute en los nodos del grupo. Se debe habilitar al menos un grupo de nodos para el balanceador de carga de MetalLB.

    • --image=IMAGE: nombre de la imagen del SO en vCenter.

    • --node-labels=KEY=VALUE,...: lista separada por comas de etiquetas de Kubernetes (pares clave-valor) aplicadas a cada nodo del grupo.

    • --node-taints=KEY=VALUE:EFFECT,... Lista separada por comas de intolerancias de Kubernetes aplicadas a cada nodo del grupo. Los taints son pares clave-valor asociados a un efecto. Las intolerancias se usan con las tolerancias para programar pods. Especifica uno de los siguientes valores para EFFECT: NoSchedule, PreferNoSchedule o NoExecute.

    Por ejemplo:

    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
    

    Para obtener información sobre otras marcas opcionales, consulta la referencia de gcloud.

Actualizar un grupo de nodos

Cuando aumentas el número de réplicas, Google Distributed Cloud añade el número de nodos necesario al clúster de usuarios. Cuando disminuyes el número de réplicas, se eliminan nodos. Cambiar el número de réplicas de un grupo de nodos no interrumpe las cargas de trabajo. Asegúrate de que tienes direcciones IP disponibles si aumentas el número de réplicas.

Si actualizas cualquier otro campo del grupo de nodos, se activará una actualización gradual en el clúster. En una actualización continua, Google Distributed Cloud crea un nodo nuevo y, a continuación, elimina un nodo antiguo. Este proceso se repite hasta que todos los nodos antiguos se hayan sustituido por nodos nuevos. Este proceso no provoca tiempo de inactividad, pero el clúster debe tener una dirección IP adicional disponible para usarla durante la actualización.

Supongamos que un grupo de nodos tendrá N nodos al final de una actualización. Después, debes tener al menos N + 1 direcciones IP disponibles para los nodos de ese pool. Esto significa que, si cambias el tamaño de un clúster añadiendo nodos a uno o varios grupos, debes tener al menos una dirección IP más que el número total de nodos que habrá en todos los grupos de nodos del clúster al final del cambio de tamaño. Para obtener más información, consulta Verificar que haya suficientes direcciones IP disponibles.

Para actualizar un grupo de nodos en un clúster de usuarios, sigue estos pasos:

gkectl

  1. Modifica los valores de los campos que quieras cambiar en la sección nodePools del archivo de configuración del clúster de usuarios.

  2. Actualiza el clúster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Haz los cambios siguientes:

    • ADMIN_CLUSTER_KUBECONFIG con la ruta del archivo kubeconfig de tu clúster de administrador.

    • USER_CLUSTER_CONFIG con la ruta del archivo de configuración de tu clúster de usuarios.

Actualizar el osImageType que usa un grupo de nodos

Para actualizar un grupo de nodos de forma que use un osImageType diferente, debes usar la línea de comandos. Para cambiar el osImageType que usa un grupo de nodos, actualiza el archivo de configuración del grupo de nodos, como se muestra en el siguiente ejemplo, y ejecuta gkectl update cluster.

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

Consola

Solo puede actualizar los siguientes campos mediante la consola:

  • Número de réplicas
  • Memoria
  • Número de vCPUs

Para actualizar otros campos, usa la CLI de gcloud o gkectl.

  1. En la consola, ve a la página Descripción general de los clústeres de Google Kubernetes Engine.

    Ir a clústeres de GKE

  2. Selecciona el proyecto en el que se encuentra el clúster de usuario. Google Cloud

  3. En la lista de clústeres, haga clic en el nombre del clúster y, a continuación, en Ver detalles en el panel Detalles.

  4. Haz clic en la pestaña Nodos.

  5. Haz clic en el nombre del grupo de nodos que quieras modificar.

  6. Haz clic en Editar junto al campo que quieras modificar y, a continuación, en Hecho.

  7. Haz clic en para volver a la página anterior.

  8. La consola Google Cloud muestra el mensaje Estado del clúster: cambios en curso. Haga clic en Mostrar detalles para ver la condición del estado del recurso y los mensajes de estado.

CLI de gcloud

  1. También puede enumerar los grupos de nodos para obtener el nombre del grupo que quiere actualizar:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Ejecuta el siguiente comando para actualizar el grupo de nodos:

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

    Haz los cambios siguientes:

    • NODE_POOL_NAME: nombre del grupo de nodos que se va a actualizar.

    • USER_CLUSTER_NAME: el nombre del clúster de usuarios que contiene el grupo de nodos.

    • LOCATION: la Google Cloud ubicación asociada al clúster de usuarios.

    • ATTRIBUTE_TO_UPDATE: una o varias marcas para actualizar los atributos del grupo de nodos. Por ejemplo, para cambiar el número de vCPUs y nodos del pool, ejecuta el siguiente comando.

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

    Para obtener información sobre los atributos del grupo de nodos que puedes actualizar, consulta la referencia de gcloud.

Verificar los cambios

Para verificar que los grupos de nodos se han creado o actualizado correctamente, inspecciona los nodos del clúster:

gkectl

Ejecuta el siguiente comando:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

Si necesitas deshacer los cambios, edita el archivo de configuración del clúster y ejecuta gkectl update cluster.

Consola

  1. En la consola, ve a la página Descripción general de los clústeres de Google Kubernetes Engine.

    Ir a clústeres de GKE

  2. Selecciona el proyecto en el que se encuentra el clúster de usuario. Google Cloud

  3. En la lista de clústeres, haga clic en el nombre del clúster y, a continuación, en Ver detalles en el panel Detalles.

  4. Haz clic en la pestaña Nodos.

  5. Haga clic en el nombre del grupo de nodos que quiera ver.

CLI de gcloud

Ejecuta el siguiente comando:

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

Eliminar un grupo de nodos

Aunque puedes eliminar grupos de nodos, tu clúster de usuarios debe tener al menos uno. Si eliminas un grupo de nodos, los nodos del grupo se quitarán inmediatamente, independientemente de si están ejecutando cargas de trabajo.

Para eliminar un grupo de nodos de un clúster de usuarios, sigue estos pasos:

gkectl

  1. Asegúrate de que no haya cargas de trabajo ejecutándose en los nodos afectados.

  2. Elimina su definición de la sección nodePools del archivo de configuración del clúster de usuarios.

  3. Actualiza el clúster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Haz los cambios siguientes:

    • [ADMIN_CLUSTER_KUBECONFIG] con la ruta del archivo kubeconfig de tu clúster de administrador.

    • [USER_CLUSTER_CONFIG] con la ruta del archivo de configuración de tu clúster de usuarios.

Consola

  1. Asegúrate de que no haya cargas de trabajo ejecutándose en los nodos afectados.

  2. En la consola, ve a la página Descripción general de los clústeres de Google Kubernetes Engine.

    Ir a clústeres de GKE

  3. Selecciona el proyecto en el que se encuentra el clúster de usuario. Google Cloud

  4. En la lista de clústeres, haga clic en el nombre del clúster y, a continuación, en Ver detalles en el panel Detalles.

  5. Haz clic en la pestaña Nodos.

  6. Haz clic en el nombre del grupo de nodos que quieras eliminar.

  7. Haz clic en Eliminar.

  8. Haz clic en para volver a la página anterior.

  9. La consola Google Cloud muestra el mensaje Estado del clúster: cambios en curso. Haga clic en Mostrar detalles para ver la condición del estado del recurso y los mensajes de estado.

CLI de gcloud

  1. También puedes enumerar los grupos de nodos para obtener el nombre del grupo que quieras eliminar:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Ejecuta el siguiente comando para eliminar el grupo de nodos:

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

    Haz los cambios siguientes:

    • NODE_POOL_NAME: el nombre del grupo de nodos que se va a eliminar.

    • USER_CLUSTER_NAME: el nombre del clúster de usuarios que contiene el grupo de nodos.

    • LOCATION: la Google Cloud ubicación asociada al clúster de usuarios.

Solución de problemas

  • Por lo general, el comando gkectl update cluster proporciona información específica cuando falla. Si el comando se ha ejecutado correctamente y no ves los nodos, puedes solucionar el problema con la guía Diagnosticar problemas del clúster.

  • Es posible que no haya suficientes recursos de clúster, como una falta de direcciones IP disponibles durante la creación o actualización del grupo de nodos. Consulta el tema Cambiar el tamaño de un clúster de usuarios para obtener información sobre cómo verificar que las direcciones IP estén disponibles.

  • También puedes consultar el artículo Solucionar problemas de actualización de Google Distributed Cloud.

  • No se podrá continuar después de Creating node MachineDeployment(s) in user cluster….

    Puede que tarde un poco en crear o actualizar los grupos de nodos de tu clúster de usuario. Sin embargo, si el tiempo de espera es muy largo y sospechas que puede haber algún error, puedes ejecutar los siguientes comandos:

    1. Ejecuta kubectl get nodes para obtener el estado de tus nodos.
    2. En el caso de los nodos que no estén listos, ejecuta kubectl describe node NODE_NAME para obtener más información.