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 de clústeres de Anthos alojados en Bare Metal deben pertenecer a un grupo de nodos. Existen tres tipos de grupos de nodos en los clústeres de Anthos alojados en Bare Metal: el plano de control, el balanceador de cargas y los 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 de administrar los grupos de nodos depende del tipo de clúster y de los clústeres de usuario, si la API de Anthos On-Prem administra el clúster. La API de Anthos On-Prem administra un clúster de usuario si se cumple una de las siguientes condiciones:

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

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

  1. Accede con 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 su estado 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.

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

También puedes verificar el estado de los nodos en el clúster si ejecutas el siguiente comando:

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

Consola

  1. En la consola, ve a la página de clústeres de Anthos.

    Ir a la página Clústeres de Anthos

  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 mostrará una lista de grupos de nodos.

Lista de nodos de captura de pantalla

CLI de gcloud

  1. Enumera los grupos de nodos en el clúster:

    gcloud beta 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 beta 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 para diagnosticar 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: si intentas agregar un grupo de nodo trabajador a un clúster de administrador, se produce un error.

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

Para agregar grupos de nodos nuevos a un clúster, debes crear un recurso nodepools.baremetal.cluster.gke.io nuevo en el clúster. En el siguiente ejemplo, se agrega un manifiesto al grupo de nodos nuevo “machine-learning-pool”. El grupo de nodos nuevo 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

Debes tener en cuenta lo siguiente cuando agregues 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 etiquetas que se agregaron directamente a los nodos. El plano de control no quita los taints y 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.

Consola

  1. En la consola de Google Cloud, ve a la página Clústeres de Anthos.

    Ir a la página Clústeres de Anthos

  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 Nodos dirección 1, ingresa la dirección IP de la máquina de nodo trabajador.

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

  7. De manera 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 un estado actualizado.

CLI de gcloud

gcloud beta 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 el 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,...: Una lista separada por comas de las etiquetas de Kubernetes (pares clave-valor) aplicadas a cada nodo en el grupo.

  • --node-taints=KEY=VALUE:EFFECT,... Es una lista separada por comas de taints de Kubernetes aplicados a cada nodo en el 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, NoExecute.

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

Actualizar un grupo de nodos

kubectl

Para actualizar un grupo de nodos, modifica 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.

Consola

  1. En la consola, ve a la página de clústeres de Anthos.

    Ir a la página Clústeres de Anthos

  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. Cambie la configuración según sea necesario y haga clic en Guardar.

CLI de gcloud

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

    gcloud beta 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 beta 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,...: Una lista separada por comas de las etiquetas de Kubernetes (pares clave-valor) aplicadas a cada nodo en el grupo.

  • --node-taints=KEY=VALUE:EFFECT,... Es una lista separada por comas de taints de Kubernetes aplicados a cada nodo en el 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, NoExecute.

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

Por ejemplo:

gcloud beta 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 del clúster y, por lo tanto, no se pueden quitar de un clúster.

Consola

  1. En la consola de Google Cloud, ve a la página Clústeres de Anthos.

    Ir a la página Clústeres de Anthos

  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 quieres 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.

CLI de gcloud

gcloud beta 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 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 de un clúster.