Administra grupos de nodos en un clúster

Un grupo de nodos es un grupo de nodos dentro de un clúster que tienen la misma configuración. Todos los nodos del clúster deben pertenecer a un grupo de nodos. Existen tres tipos de grupos de nodos en un clúster de GKE en Bare Metal: plano de control, balanceador de cargas y grupos de nodo trabajador.

En esta página, se describe cómo verificar el estado de los grupos de nodo trabajador y cómo agregar, actualizar y quitar grupos de nodo trabajador.

Elige una herramienta para administrar los grupos de nodos

La forma en que administras los grupos de nodos depende del tipo de clúster y de los clústeres de usuario, si la API de GKE On-Prem administra el clúster. La API de GKE On-Prem administra un clúster de usuario si se cumple una de las siguientes condiciones:

Si la API de GKE On-Prem administra un clúster de usuario, puedes usar la consola o gcloud CLI para administrar los grupos de nodos. Si la API de GKE On-Prem no administra el clúster de usuario, usa kubectl en la estación de trabajo de administrador para administrar los grupos de nodos. También puedes usar kubectl para administrar grupos de nodos de todos los tipos de clústeres que pueden contener grupos de nodo trabajador (clústeres híbridos, independientes y de usuario).

Si planeas usar gcloud CLI, haz lo siguiente en una computadora que tenga instalada la gcloud CLI:

  1. 1. Acceder a través de tu cuenta de Google

    gcloud auth login
    
  2. Actualiza los componentes, como se indica a continuación:

    gcloud components update
    

Verifica el estado del nodo

Antes de agregar o quitar grupos de nodos, verifica el estado de los nodos y sus respectivos grupos de nodos.

kubectl

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

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

El sistema muestra resultados similares al siguiente:

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 la cantidad de nodos por grupo de nodos en cada uno de los estados de los nodos.

Cuando agregas un nodo, en un principio, tiene un estado de Reconciling mientras se aprovisiona el nodo. Después de que el nodo es parte del clúster, el estado del nodo cambia a Ready.

También puedes ejecutar el siguiente comando para verificar el estado de los nodos del clúster:

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

Console

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

    Ir a los clústeres de GKE

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

  3. En la lista de clústeres, haz clic en el nombre del clúster y, luego, 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

gcloud CLI

  1. Obtén una lista de 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
    

    Reemplaza lo siguiente:

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

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

    • LOCATION: Es la ubicación de Google Cloud asociada con el clúster de usuario.

  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
    

    Reemplaza NODE_POOL_NAME por el nombre del grupo de nodos.

Si necesitas más información sobre cómo diagnosticar los clústeres, consulta Crea instantáneas para diagnosticar clústeres.

Agrega un nuevo grupo de nodos

kubectl

Ten en cuenta las siguientes reglas cuando agregues un grupo de nodos a un clúster:

  • Un clúster de administrador puede contener un grupo de nodos del balanceador de cargas y un grupo de nodos del plano de control, pero no puede contener un grupo de nodo trabajador: intentar agregar un grupo de nodo trabajador a un clúster de administrador produce un error.

  • Un clúster solo puede contener un solo grupo de nodos del plano de control y un único grupo de nodos del balanceador de cargas. No puedes agregar un plano de control adicional o grupos de nodos de balanceo de cargas a un clúster.

Para agregar grupos de nodos nuevos a un clúster, crea un recurso nodepools.baremetal.cluster.gke.io nuevo en el clúster. En el siguiente ejemplo, se agrega un grupo de nodos nuevo llamado “machine-learning-pool” al manifiesto. El nuevo grupo de nodos consta de dos nodos con 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 aplica la configuración al clúster con el siguiente comando:

kubectl apply -f machine-learning-pool.yaml

Se deben tener en cuenta los siguientes hechos cuando se agrega un grupo de nodos a un clúster:

  • Las configuraciones NodePool.spec.taints y NodePool.spec.labels se concilian a los nodos. Se quitan todos los taints y las etiquetas que se agregan directamente a los nodos. El plano de control no quita los taints ni las etiquetas que agregas directamente durante el proceso de sincronización. Para omitir este paso de conciliación, puedes anotar el nodo con baremetal.cluster.gke.io/label-taint-no-sync.

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

Console

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

    Ir a los clústeres de GKE

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

  3. En la lista de clústeres, haz clic en el nombre del clúster y, luego, en Más detalles en el panel Detalles.

  4. Haz clic en Agregar grupo de nodos.

  5. Ingresa un nombre para el grupo de nodos.

  6. En el campo Dirección de nodos 1, ingresa la dirección IP de la máquina de nodos trabajadores.

    Si tienes más de una máquina de nodo trabajador para agregar, haz clic en Agregar dirección.

  7. De forma opcional, agrega 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 debas actualizar la página para ver el estado actualizado.

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

Reemplaza lo siguiente:

  • NODE_POOL_NAME: Es un nombre que elijas para el grupo de nodos. El nombre debe cumplir con los siguientes requisitos:

    • Contener 40 caracteres como máximo.
    • Contener solo caracteres alfanuméricos en minúscula o un guiones (-).
    • Comenzar con un carácter alfabético
    • Terminar con un carácter alfanumérico
  • USER_CLUSTER_NAME: Es el nombre del clúster de usuario.

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

  • LOCATION: Es la ubicación de Google Cloud que especificaste cuando creaste el clúster.

  • NODE_POOL_CONFIG: Es la ruta de acceso 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
    

De manera opcional, puedes especificar lo siguiente:

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

  • --node-taints=KEY=VALUE:EFFECT,...Una lista separada por comas de taints de Kubernetes

se aplican a cada nodo del grupo. Los taints son pares clave-valor asociados con un efecto. Los taints se usan con tolerancias para la programación de Pods. Especifica una de las siguientes opciones para EFFECT: NoSchedule, PreferNoSchedule o NoExecute.

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

Actualizar un grupo de nodos

kubectl

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

Console

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

    Ir a los clústeres de GKE

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

  3. En la lista de clústeres, haz clic en el nombre del clúster y, luego, 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 deseas actualizar.

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

  7. Cambia la configuración según sea necesario y haz clic en Guardar.

gcloud CLI

  1. De manera opcional, enumera los grupos de nodos en el clúster para obtener el nombre del grupo de nodos que deseas actualizar.

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

    Reemplaza lo siguiente:

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

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

    • LOCATION: Es la ubicación de Google Cloud asociada con el clúster de usuario.

  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
    

    Reemplaza lo siguiente:

    • NODE_POOL_NAME por el nombre del grupo de nodos

    • NODE_CONFIG_FILE: Es la ruta de acceso 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
    

De manera opcional, puedes especificar lo siguiente:

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

  • --node-taints=KEY=VALUE:EFFECT,... Una lista separada por comas de taints de Kubernetes. Se aplica a cada nodo del grupo. Los taints son pares clave-valor asociados con un efecto. Los taints se usan con tolerancias para la programación de Pods. Especifica una de las siguientes opciones para EFFECT: NoSchedule, PreferNoSchedule o NoExecute.

  • --validate-only: Especifica esta marca si deseas validar la actualización, pero no realizar 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

Quita un grupo de nodos

kubectl

Quita los grupos de nodos con kubectl delete. Por ejemplo, para quitar el grupo de nodos que se agregó 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 cargas son fundamentales para la función de un clúster y, por lo tanto, no se pueden quitar de un clúster.

Console

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

    Ir a los clústeres de GKE

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

  3. En la lista de clústeres, haz clic en el nombre del clúster y, luego, en Más detalles en el panel Detalles.

  4. Haz clic en la pestaña Nodos y, luego, en el grupo de nodos que deseas borrar.

  5. Haz clic en Borrar.

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

gcloud CLI

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

Reemplaza lo siguiente:

  • NODE_POOL_NAME por el nombre del grupo de nodos

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

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

  • LOCATION: Es la ubicación de Google Cloud asociada con el clúster de usuario.

Si quitas un grupo de nodos trabajadores de un clúster puede provocar interrupciones del Pod. Si se aplica un PodDisruptionBudget (PDB), es posible que se te impida quitar un grupo de nodos. Para obtener más información sobre las políticas de interrupción de Pods, consulta Quita los nodos que bloquea el presupuesto de interrupción de Pods.

¿Qué sigue?

Si los requisitos de la carga de trabajo cambian después de crear los grupos de nodos, puedes actualizar un grupo de nodo trabajador para agregar o quitar nodos. Para agregar o quitar nodos de un grupo de nodos trabajadores, consulta Agrega o quita nodos en un clúster.