Gestionar grupos de nodos en un clúster

Un grupo de nodos es un grupo de nodos de un clúster que tienen la misma configuración. Todos los nodos de tu clúster deben pertenecer a un grupo de nodos. Hay tres tipos de grupos de nodos en un clúster de Google Distributed Cloud: plano de control, balanceador de carga y trabajador.

En esta página se describe cómo comprobar el estado de los grupos de nodos de trabajo y cómo añadir, actualizar y eliminar grupos de nodos de trabajo.

Elegir una herramienta para gestionar grupos de nodos

La forma de gestionar los grupos de nodos depende del tipo de clúster y, en el caso de los clústeres de usuario, de si el clúster está gestionado por la API de GKE On-Prem. Un clúster de usuario está gestionado por la API de 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 bmctl, 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 kubectl en la estación de trabajo de administrador para gestionar los grupos de nodos. También puedes usar kubectl para gestionar grupos de nodos de todos los tipos de clústeres que pueden contener grupos de nodos de trabajo (híbridos, independientes y de usuario).

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 a través de tu cuenta de Google.

    gcloud auth login
    
  2. Actualiza los componentes:

    gcloud components update
    

Comprobar el estado de los nodos

Antes de añadir o quitar grupos de nodos, comprueba el estado de los nodos y de sus respectivos grupos de nodos.

kubectl

Con kubectl, puedes obtener el estado de los nodos de un espacio de nombres específico o de todo el clúster. En el siguiente ejemplo se muestra el estado de los grupos de nodos del espacio de nombres del clúster cluster-abm-cluster:

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

El sistema devuelve resultados similares a los siguientes:

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

Cada columna de la tabla indica los diferentes estados en los que puede estar un nodo. Cada fila de la tabla es el número de nodos por grupo de nodos en cada uno de los estados de los nodos.

Cuando añades un nodo, al principio tiene el estado Reconciling mientras se aprovisiona. Una vez que el nodo forme parte del clúster, su estado cambiará a Ready.

También puedes consultar el estado de los nodos del clúster ejecutando el siguiente comando:

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

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 Más detalles en el panel Detalles.

  4. Haz clic en la pestaña Nodos.

    Se muestra una lista de grupos de nodos.

Lista de nodos de captura de pantalla

CLI de gcloud

  1. Lista los grupos de nodos del clúster:

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

    Haz los cambios siguientes:

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

    • FLEET_HOST_PROJECT_ID: ID del proyecto en el que se creó el clúster.

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

  2. Describe un grupo de nodos:

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

    Sustituye NODE_POOL_NAME por el nombre del grupo de nodos.

Si necesitas más información sobre cómo diagnosticar tus clústeres, consulta el artículo Crear capturas para diagnosticar clústeres.

Añadir un grupo de nodos

kubectl

Ten en cuenta las siguientes reglas al añadir un grupo de nodos a un clúster:

  • Un clúster de administrador puede contener un grupo de nodos de balanceador de carga y un grupo de nodos de plano de control, pero no puede contener un grupo de nodos de trabajador. Si intentas añadir un grupo de nodos de trabajador a un clúster de administrador, se producirá un error.

  • Un clúster solo puede contener un grupo de nodos de plano de control y un grupo de nodos de balanceador de carga. No puedes añadir más planos de control ni balanceadores de carga a un clúster.

Para añadir grupos de nodos a un clúster, debes crear un recurso nodepools.baremetal.cluster.gke.io en el clúster. En el siguiente ejemplo, se añade un nuevo grupo de nodos llamado "machine-learning-pool" al manifiesto. El nuevo grupo de nodos consta de dos nodos con las direcciones IP 10.200.0.7 y 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

Almacena la configuración en un archivo llamado machine-learning-pool.yaml y aplícala al clúster con el siguiente comando:

kubectl apply -f machine-learning-pool.yaml

Debes tener en cuenta los siguientes aspectos al añadir un grupo de nodos a un clúster:

  • Las configuraciones de NodePool.spec.taints y NodePool.spec.labels se reconcilian con los nodos. Se eliminan todos los taints y las etiquetas que se hayan añadido directamente a los nodos. El plano de control no elimina las marcas y las etiquetas que añadas directamente durante el proceso de sincronización. Para omitir este paso de conciliación, puede anotar el nodo con baremetal.cluster.gke.io/label-taint-no-sync.

  • El recurso de grupo de nodos debe crearse en el mismo espacio de nombres que el clúster asociado, y debe hacer referencia al nombre del clúster en el campo spec.clusterName.

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 Más detalles en el panel Detalles.

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

  5. Introduce un nombre para el grupo de nodos.

  6. En el campo Dirección del nodo 1, introduce la dirección IP del nodo de trabajo.

    Si tienes más de un nodo de trabajo que añadir, haz clic en Añadir dirección.

  7. Opcionalmente, añade etiquetas de Kubernetes o taints de Kubernetes.

  8. Haz clic en Crear.

El estado del grupo de nodos se muestra en la pestaña Nodos. Es posible que tengas que actualizar la página para ver el estado actualizado.

CLI de gcloud

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

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.

  • FLEET_HOST_PROJECT_ID: ID del proyecto en el que se creó el clúster.

  • LOCATION: la Google Cloud ubicación que especificaste al crear el clúster.

  • NODE_POOL_CONFIG: la ruta de un archivo de configuración que describe el grupo de nodos. Por ejemplo:

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

También puedes especificar lo siguiente:

se aplica 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. Especifique uno de los siguientes valores para EFFECT: NoSchedule, PreferNoSchedule o NoExecute.

  • --validate-only Especifica esta marca si quieres validar la actualización, pero no hacer ningún cambio.

Actualizar un grupo de nodos

kubectl

Para actualizar un grupo de nodos, modifica el recurso nodepools.baremetal.cluster.gke.io del clúster. Puedes actualizar el recurso directamente con kubectl edit o actualizar el archivo YAML y usar kubectl apply.

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 Más detalles en el panel Detalles.

  4. Haz clic en la pestaña Nodos.

  5. En la lista, haz clic en el grupo de nodos que quieras actualizar.

  6. En la página Detalles del grupo de nodos, haga clic en Editar.

  7. Cambie los ajustes según sea necesario y haga clic en Guardar.

CLI de gcloud

  1. También puedes enumerar los grupos de nodos del clúster para obtener el nombre del grupo que quieras actualizar.

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

    Haz los cambios siguientes:

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

    • FLEET_HOST_PROJECT_ID: ID del proyecto en el que se creó el clúster.

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

  2. Ejecuta el siguiente comando:

    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
    

    Haz los cambios siguientes:

    • NODE_POOL_NAME con el nombre del grupo de nodos.

    • NODE_CONFIG_FILE: la ruta de un archivo de configuración que describe el grupo de nodos. Por ejemplo:

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

También puedes especificar lo siguiente:

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

  • --node-taints=KEY=VALUE:EFFECT,... Lista separada por comas de taints de Kubernetes aplicados 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.

  • --validate-only Especifica esta marca si quieres validar la actualización, pero no hacer ningún cambio.

Por ejemplo:

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

Eliminar un grupo de nodos

kubectl

Para eliminar grupos de nodos, usa kubectl delete. Por ejemplo, para quitar el nodo pool añadido en la sección anterior, machine-learning-pool, usa el siguiente comando:

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

Ten en cuenta que los grupos de nodos del plano de control y los grupos de nodos del balanceador de carga son fundamentales para el funcionamiento de un clúster y, por lo tanto, no se pueden eliminar de un clúster.

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 Más detalles en el panel Detalles.

  4. Haz clic en la pestaña Nodos y, a continuación, en el grupo de nodos que quieras eliminar.

  5. Haz clic en Eliminar.

  6. En el cuadro de diálogo de confirmación, introduce el nombre del grupo de nodos y haz clic en Confirmar.

CLI de gcloud

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

Haz los cambios siguientes:

  • NODE_POOL_NAME con el nombre del grupo de nodos.

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

  • FLEET_HOST_PROJECT_ID: ID del proyecto en el que se creó el clúster.

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

Si eliminas un grupo de nodos de trabajador de un clúster, se pueden producir interrupciones de pods. Si hay un presupuesto de interrupciones de pods (PDB), es posible que no puedas eliminar un grupo de nodos. Para obtener más información sobre las políticas de interrupción de pods, consulta el artículo sobre cómo eliminar nodos bloqueados por el presupuesto de interrupción de pods.

Siguientes pasos

Si los requisitos de tu carga de trabajo cambian después de crear grupos de nodos, puedes actualizar un grupo de nodos de trabajador para añadir o quitar nodos. Para añadir o quitar nodos de un grupo de nodos de trabajador, consulta Añadir o quitar nodos en un clúster.