Añadir y gestionar grupos de nodos


En esta página se explica cómo añadir, gestionar, escalar, actualizar y eliminar grupos de nodos que se ejecutan en tus clústeres estándar de Google Kubernetes Engine (GKE). También aprenderás a desplegar pods en grupos de nodos específicos y a conocer las implicaciones de las actualizaciones de grupos de nodos en las cargas de trabajo en ejecución.

La información de esta página te ayuda a optimizar tus clústeres Estándar de GKE para mejorar el rendimiento y la escalabilidad.

Esta página está dirigida a operadores, arquitectos de Cloud y desarrolladores que necesiten crear y configurar clústeres, así como desplegar cargas de trabajo en GKE. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el Google Cloud contenido, consulta Roles y tareas habituales de los usuarios de GKE.

Antes de leer esta página, asegúrate de que conoces los grupos de nodos.

Antes de empezar

Antes de empezar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.
.

Configurar cuentas de servicio de IAM para GKE

GKE usa cuentas de servicio de gestión de identidades y accesos que están asociadas a tus nodos para ejecutar tareas del sistema, como el registro y la monitorización. Como mínimo, estas cuentas de servicio de nodo deben tener el rol Cuenta de servicio de nodo predeterminada de Kubernetes Engine (roles/container.defaultNodeServiceAccount) en tu proyecto. De forma predeterminada, GKE usa la cuenta de servicio predeterminada de Compute Engine, que se crea automáticamente en tu proyecto, como cuenta de servicio del nodo.

Para asignar el rol roles/container.defaultNodeServiceAccount a la cuenta de servicio predeterminada de Compute Engine, sigue estos pasos:

consola

  1. Ve a la página Bienvenida:

    Ir a Bienvenida

  2. En el campo Número de proyecto, haz clic en Copiar en el portapapeles.
  3. Ve a la página Gestión de identidades y accesos:

    Ir a IAM

  4. Haz clic en Conceder acceso.
  5. En el campo Nuevos principales, especifique el siguiente valor:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Sustituye PROJECT_NUMBER por el número de proyecto que has copiado.
  6. En el menú Seleccionar un rol, elige el rol Cuenta de servicio de nodo predeterminada de Kubernetes Engine.
  7. Haz clic en Guardar.

gcloud

  1. Busca tu Google Cloud número de proyecto:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

    Sustituye PROJECT_ID por el ID del proyecto.

    El resultado debería ser similar al siguiente:

    12345678901
    
  2. Asigna el rol roles/container.defaultNodeServiceAccount a la cuenta de servicio predeterminada de Compute Engine:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    Sustituye PROJECT_NUMBER por el número de proyecto del paso anterior.

Añadir un grupo de nodos a un clúster estándar

Puedes añadir un nuevo grupo de nodos a un clúster Estándar de GKE mediante la CLI de gcloud, la Google Cloud consola o Terraform. GKE también admite el aprovisionamiento automático de nodos, que gestiona automáticamente los grupos de nodos de tu clúster en función de los requisitos de escalado.

Práctica recomendada:

Crea y usa una cuenta de servicio de gestión de identidades y accesos (IAM) con los privilegios mínimos para que la usen tus grupos de nodos en lugar de la cuenta de servicio predeterminada de Compute Engine. Para obtener instrucciones sobre cómo crear una cuenta de servicio con el número mínimo de privilegios necesarios, consulta el artículo Reforzar la seguridad del clúster.

gcloud

Para crear un grupo de nodos, ejecuta el comando gcloud container node-pools create:

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --service-account SERVICE_ACCOUNT

Haz los cambios siguientes:

  • POOL_NAME: el nombre del nuevo grupo de nodos.
  • CLUSTER_NAME: el nombre del clúster.
  • SERVICE_ACCOUNT: nombre de la cuenta de servicio de gestión de identidades y accesos que usarán tus nodos.

    Te recomendamos que especifiques una cuenta de servicio de IAM con los privilegios mínimos que puedan usar tus nodos en lugar de la cuenta de servicio predeterminada de Compute Engine. Para obtener información sobre cómo crear una cuenta de servicio con el número mínimo de privilegios necesarios, consulta Usar una cuenta de servicio con el número mínimo de privilegios necesarios.

    Para especificar una cuenta de servicio personalizada en la CLI de gcloud, añade la siguiente marca al comando:

    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    Sustituye SERVICE_ACCOUNT_NAME por el nombre de tu cuenta de servicio con el número mínimo de privilegios necesarios.

Para ver una lista completa de las marcas opcionales que puedes especificar, consulta la documentación de gcloud container node-pools create.

El resultado debería ser similar al siguiente:

Creating node pool POOL_NAME...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-central1/clusters/CLUSTER_NAME/nodePools/POOL_NAME].
NAME: POOL_NAME
MACHINE_TYPE: e2-medium
DISK_SIZE_GB: 100
NODE_VERSION: 1.21.5-gke.1302

En este resultado, se muestran detalles sobre el grupo de nodos, como el tipo de máquina y la versión de GKE que se ejecuta en los nodos.

En ocasiones, el grupo de nodos se crea correctamente, pero el comando gcloud se agota en lugar de informar del estado del servidor. Para comprobar el estado de todos los grupos de nodos, incluidos los que aún no se han aprovisionado por completo, usa el siguiente comando:

gcloud container node-pools list --cluster CLUSTER_NAME

Consola

Para añadir un grupo de nodos a un clúster estándar, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola de Google Cloud .

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haga clic en el nombre del clúster estándar que quiera modificar.

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

  4. Configura el grupo de nodos.

  5. En el menú de navegación, haz clic en Seguridad.

  6. También puedes especificar una cuenta de servicio de gestión de identidades y accesos personalizada para tus nodos:
    1. En la página Configuración avanzada, despliega la sección Seguridad.
    2. En el menú Cuenta de servicio, selecciona la que prefieras.

    Te recomendamos que especifiques una cuenta de servicio de IAM con los privilegios mínimos que puedan usar tus nodos en lugar de la cuenta de servicio predeterminada de Compute Engine. Para obtener información sobre cómo crear una cuenta de servicio con el número mínimo de privilegios necesarios, consulta Usar una cuenta de servicio con el número mínimo de privilegios necesarios.

  7. Haz clic en Crear para añadir el grupo de nodos.

Terraform

Usa uno de los siguientes ejemplos:

  • Añade un grupo de nodos que use la cuenta de servicio predeterminada de gestión de identidades y accesos de Compute Engine:
resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    service_account = google_service_account.default.email
  }
}
  • Añade un grupo de nodos que use una cuenta de servicio de gestión de identidades y accesos personalizada:
  1. Crea una cuenta de servicio de IAM y concédele el rol roles/container.defaultNodeServiceAccount en el proyecto:

    resource "google_service_account" "default" {
      account_id   = "service-account-id"
      display_name = "Service Account"
    }
    
    data "google_project" "project" {
    }
    
    resource "google_project_iam_member" "default" {
      project = data.google_project.project.project_id
      role    = "roles/container.defaultNodeServiceAccount"
      member  = "serviceAccount:${google_service_account.default.email}"
    }
  2. Crea un grupo de nodos que use la nueva cuenta de servicio:

    resource "google_container_node_pool" "default" {
      name    = "gke-standard-regional-node-pool"
      cluster = google_container_cluster.default.name
    
      node_config {
        service_account = google_service_account.default.email
      }
    }

Para obtener más información sobre el uso de Terraform, consulta Compatibilidad de Terraform con GKE.

Ver grupos de nodos en un clúster estándar

gcloud

Para enumerar todos los grupos de nodos de un clúster estándar, ejecuta el comando gcloud container node-pools list:

gcloud container node-pools list --cluster CLUSTER_NAME

Para ver los detalles de un grupo de nodos específico, ejecuta el comando gcloud container node-pools describe:

gcloud container node-pools describe POOL_NAME \
    --cluster CLUSTER_NAME

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster.
  • POOL_NAME: el nombre del grupo de nodos que quieres ver.

Consola

Para ver los grupos de nodos de un clúster estándar, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola de Google Cloud .

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haga clic en el nombre del clúster estándar.

  3. Haz clic en la pestaña Nodos.

  4. En Grupos de nodos, haz clic en el nombre del grupo de nodos que quieras ver.

Escalar un grupo de nodos

Puedes aumentar o reducir la escala de tus grupos de nodos para optimizar el rendimiento y los costes. Con los grupos de nodos Estándar de GKE, puedes escalar un grupo de nodos horizontalmente cambiando el número de nodos del grupo o escalar un grupo de nodos verticalmente cambiando la configuración de los atributos de las máquinas de los nodos.

Escalar horizontalmente cambiando el número de nodos

gcloud

Para cambiar el tamaño de los grupos de nodos de un clúster, ejecuta el comando gcloud container clusters resize:

gcloud container clusters resize CLUSTER_NAME \
    --node-pool POOL_NAME \
    --num-nodes NUM_NODES

Haz los cambios siguientes:

  • CLUSTER_NAME: nombre del clúster cuyo tamaño se va a cambiar.
  • POOL_NAME: el nombre del grupo de nodos cuyo tamaño se va a modificar.
  • NUM_NODES: el número de nodos del grupo en un clúster zonal. Si usas clústeres multizona o regionales, NUM_NODES es el número de nodos de cada zona en la que se encuentra el grupo de nodos.

Vuelve a usar el comando para cada grupo de nodos. Si tu clúster solo tiene un pool de nodos, omite la marca --node-pool.

Consola

Para cambiar el tamaño de los grupos de nodos de un clúster, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola de Google Cloud .

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haga clic en el nombre del clúster estándar que quiera modificar.

  3. Haz clic en la pestaña Nodos.

  4. En la sección Grupos de nodos, haz clic en el nombre del grupo de nodos cuyo tamaño quieras cambiar.

  5. Haz clic en Cambiar tamaño.

  6. En el campo Número de nodos, indica cuántos nodos quieres que haya en el pool de nodos y, a continuación, haz clic en Cambiar tamaño.

  7. Repite la acción para cada grupo de nodos si resulta necesario.

Escalar verticalmente cambiando los atributos de la máquina de nodos

Puedes modificar el tipo de máquina, el tipo de disco y el tamaño del disco configurados del grupo de nodos.

Cuando editas uno o varios de estos atributos de la máquina, GKE actualiza los nodos a la nueva configuración mediante la estrategia de actualización configurada para el grupo de nodos. Si configuras la estrategia de actualización azul-verde, puedes migrar las cargas de trabajo de los nodos originales a los nuevos y, al mismo tiempo, revertir los nodos originales si la migración falla. Inspecciona los ajustes de actualización del grupo de nodos para asegurarte de que la estrategia configurada es la que quieres que sigan tus nodos para actualizarse.

Actualice al menos uno de los atributos de máquina destacados en el siguiente comando:

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --machine-type MACHINE_TYPE \
    --disk-type DISK_TYPE \
    --disk-size DISK_SIZE

Omita las marcas de los atributos de máquina que no quiera cambiar. Sin embargo, debes usar al menos una marca de atributo de máquina, ya que, de lo contrario, el comando fallará.

Haz los cambios siguientes:

  • POOL_NAME: el nombre del grupo de nodos cuyo tamaño se va a modificar.
  • CLUSTER_NAME: nombre del clúster cuyo tamaño se va a cambiar.
  • MACHINE_TYPE: el tipo de máquina que se va a usar en los nodos. Para obtener más información, consulta gcloud container node-pools update.
  • DISK_TYPE: el tipo del disco de arranque de la VM del nodo. Debe ser uno de los siguientes: pd-standard, pd-ssd o pd-balanced.
  • DISK_SIZE: el tamaño de los discos de arranque de las VMs de los nodos en GB. El valor predeterminado es de 100 GB.

Para aplicar este cambio, es necesario volver a crear los nodos, lo que puede provocar interrupciones en las cargas de trabajo en ejecución. Para obtener información sobre este cambio concreto, busca la fila correspondiente en la tabla Cambios manuales que recrean los nodos mediante una estrategia de actualización de nodos sin respetar las políticas de mantenimiento. Para obtener más información sobre las actualizaciones de nodos, consulta Planificar interrupciones de actualizaciones de nodos.

Actualizar un grupo de nodos

De forma predeterminada, los nodos de un clúster tienen habilitada la actualización automática. Las actualizaciones automáticas de nodos aseguran que la versión del plano de control y de los nodos de tu clúster estén sincronizadas y cumplan la política de diferencia de versiones de Kubernetes, que garantiza que los planos de control sean compatibles con los nodos que tengan hasta dos versiones secundarias anteriores a la del plano de control. Por ejemplo, los planos de control de Kubernetes 1.29 son compatibles con los nodos de Kubernetes 1.27.

Práctica recomendada:

No inhabilite las actualizaciones automáticas de nodos para que su clúster se beneficie de las actualizaciones que se indican en el párrafo anterior.

Con las actualizaciones de grupos de nodos de GKE, puedes elegir entre dos estrategias de actualización configurables: actualizaciones de aumento y actualizaciones azul-verde.

Elige una estrategia y usa los parámetros para ajustarla de forma que se adapte mejor a las necesidades de tu entorno de clúster.

Cómo funcionan las actualizaciones de nodos

Mientras se actualiza un nodo, GKE deja de programar nuevos pods en él e intenta programar sus pods en ejecución en otros nodos. Es similar a otros eventos que vuelven a crear el nodo, como habilitar o inhabilitar una función en el pool de nodos.

Durante las actualizaciones de nodos automáticas o manuales, se respetan los presupuestos de interrupción de pods (PDBs) y el periodo de gracia de finalización de pods durante un máximo de 1 hora. Si los pods que se ejecutan en el nodo no se pueden programar en nodos nuevos después de una hora, GKE inicia la actualización de todos modos. Este comportamiento se aplica incluso si configuras tus PDBs para que siempre tengan todas tus réplicas disponibles asignando al campo maxUnavailable el valor 0 o 0%, o bien asignando al campo minAvailable el valor 100% o el número de réplicas. En todos estos casos, GKE elimina los pods al cabo de una hora para que se pueda eliminar el nodo.

Práctica recomendada:

Si una carga de trabajo requiere más flexibilidad con la finalización correcta, utiliza las actualizaciones azul-verde, que proporcionan ajustes para añadir tiempo de rodaje y ampliar las comprobaciones de PDB más allá de la hora predeterminada.

Para obtener más información sobre lo que ocurre durante la finalización de un nodo en general, consulta el tema sobre pods.

La actualización solo se completa cuando se han vuelto a crear todos los nodos y el clúster está en el estado deseado. Cuando un nodo recién actualizado se registra en el plano de control, GKE lo marca como programable.

Las nuevas instancias de nodo ejecutan la versión de Kubernetes deseada, así como:

Para que se considere que la actualización de un grupo de nodos se ha completado, todos los nodos del grupo deben volver a crearse. Si se ha iniciado una actualización, pero no se ha completado y el grupo de nodos está parcialmente actualizado, es posible que la versión del grupo de nodos no refleje la versión de todos los nodos. Para obtener más información, consulta Algunas versiones de nodos no coinciden con la versión del grupo de nodos después de una actualización incompleta del grupo de nodos. Para determinar si se ha completado la actualización del grupo de nodos, consulta el estado de la actualización del grupo de nodos. Si la operación de actualización supera el periodo de conservación, comprueba que la versión de cada nodo coincida con la del grupo de nodos.

Actualizar manualmente un grupo de nodos

Puedes actualizar manualmente la versión de un grupo de nodos para que coincida con la versión del plano de control o con una versión anterior que siga estando disponible y sea compatible con el plano de control. Puedes actualizar manualmente varios grupos de nodos en paralelo, mientras que GKE solo actualiza automáticamente un grupo de nodos a la vez.

Cuando actualizas manualmente un grupo de nodos, GKE elimina las etiquetas que hayas añadido a nodos concretos mediante kubectl. Para evitarlo, aplica etiquetas a los grupos de nodos.

Antes de actualizar manualmente tu grupo de nodos, ten en cuenta las siguientes condiciones:

  • Si actualizas un grupo de nodos, es posible que se interrumpan las cargas de trabajo que se estén ejecutando en ese grupo. Para evitarlo, puedes crear un nuevo grupo de nodos con la versión que quieras y migrar la carga de trabajo. Una vez completada la migración, puedes eliminar el grupo de nodos antiguo.
  • Si actualizas un grupo de nodos con un Ingress en estado de error, el grupo de instancias no se sincroniza. Para solucionar este problema, primero comprueba el estado con el comando kubectl get ing. Si el grupo de instancias no está sincronizado, puedes solucionar el problema volviendo a aplicar el manifiesto que se usó para crear el recurso de entrada.

Puedes actualizar manualmente tus grupos de nodos a una versión compatible con el plano de control mediante la Google Cloud consola o la CLI de Google Cloud.

gcloud

En los comandos de esta sección se usan las siguientes variables:

  • CLUSTER_NAME: el nombre del clúster del grupo de nodos que se va a actualizar.
  • NODE_POOL_NAME: el nombre del grupo de nodos que se va a actualizar.
  • CONTROL_PLANE_LOCATION: la ubicación (región o zona) del plano de control, como us-central1 o us-central1-a.
  • VERSION: la versión de Kubernetes a la que se actualizan los nodos. Por ejemplo, --cluster-version=1.7.2 o cluster-version=latest.

Actualiza un grupo de nodos:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION

Para especificar una versión diferente de GKE en los nodos, usa la marca opcional --cluster-version:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION \
  --cluster-version VERSION

Para obtener más información sobre cómo especificar versiones, consulta Control de versiones.

Para obtener más información, consulta la documentación de gcloud container clusters upgrade.

Consola

Para actualizar un grupo de nodos mediante la Google Cloud consola, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola de Google Cloud .

    Ir a Google Kubernetes Engine

  2. Haz clic en el nombre del clúster.

  3. En la página Detalles del clúster, haga clic en la pestaña Nodos.

  4. En la sección Grupos de nodos, haz clic en el nombre del grupo de nodos que quieras actualizar.

  5. Haz clic en Editar.

  6. Haz clic en Cambiar en Versión de Node.

  7. Selecciona la versión que quieras en la lista desplegable Versión de Node y, a continuación, haz clic en Cambiar.

La versión del nodo puede tardar varios minutos en cambiar.

Desplegar un pod en un grupo de nodos específico

Puedes desplegar explícitamente un pod en un grupo de nodos específico mediante un nodeSelector en el manifiesto del pod. nodeSelector programa pods en nodos con una etiqueta coincidente.

Todos los grupos de nodos de GKE tienen etiquetas con el siguiente formato: cloud.google.com/gke-nodepool: POOL_NAME. Añade esta etiqueta al campo nodeSelector de tu Pod, como se muestra en el siguiente ejemplo:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    cloud.google.com/gke-nodepool: POOL_NAME

Para obtener más información, consulta Asignar pods a nodos.

Como alternativa al selector de nodos, puedes usar la afinidad de nodos. Usa la afinidad de nodos si quieres una regla "flexible" en la que el pod intente cumplir la restricción, pero se siga programando aunque no se pueda cumplir. Para obtener más información, consulta Afinidad de nodo. También puedes especificar solicitudes de recursos para los contenedores.

Cambiar a una versión anterior de un grupo de nodos

Puedes cambiar a una versión anterior de un grupo de nodos, por ejemplo, para mitigar una actualización fallida. Consulta las limitaciones antes de cambiar a una versión anterior de un grupo de nodos.

Práctica recomendada:

Usa la estrategia de actualización de nodos azul-verde si necesitas optimizar la mitigación de riesgos en las actualizaciones de grupos de nodos que afecten a tus cargas de trabajo. Con esta estrategia, puedes restaurar una actualización en curso a los nodos originales si no se completa correctamente.

  1. Define una exclusión de mantenimiento para el clúster para evitar que GKE actualice automáticamente el grupo de nodos después de cambiar a una versión anterior.
  2. Para cambiar a una versión anterior de un grupo de nodos, especifica una versión anterior siguiendo las instrucciones para actualizar manualmente un grupo de nodos.

Eliminar un grupo de nodos

Al eliminar un grupo de nodos, se eliminan los nodos y todas las cargas de trabajo en ejecución, sin respetar los ajustes de PodDisruptionBudget. Para obtener más información sobre cómo afecta esto a tus cargas de trabajo, incluidas las interacciones con los selectores de nodos, consulta Eliminar grupos de nodos.

gcloud

Para eliminar un grupo de nodos, ejecuta el comando gcloud container node-pools delete:

gcloud container node-pools delete POOL_NAME \
    --cluster CLUSTER_NAME

Consola

Si quieres eliminar un grupo de nodos, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola de Google Cloud .

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haga clic en el nombre del clúster estándar que quiera modificar.

  3. Haz clic en la pestaña Nodos.

  4. En la sección Grupos de nodos, haga clic en junto al grupo de nodos que quiera eliminar.

  5. Cuando se te pida que confirmes la acción, haz clic en Eliminar.

Migrar nodos a otro tipo de máquina

Para obtener información sobre los diferentes métodos para mover cargas de trabajo entre tipos de máquinas (por ejemplo, para migrar a un tipo de máquina más reciente), consulta Migrar nodos a otro tipo de máquina.

Migrar cargas de trabajo entre grupos de nodos

Para migrar cargas de trabajo de un grupo de nodos a otro, consulta Migrar cargas de trabajo entre grupos de nodos. Por ejemplo, puedes seguir estas instrucciones si vas a sustituir un grupo de nodos por otro y quieres asegurarte de que las cargas de trabajo se muevan de los nodos antiguos a los nuevos.

Solucionar problemas

Para obtener información sobre cómo solucionar problemas, consulta los artículos Solucionar problemas de grupos de nodos estándar y Solucionar problemas de registro de nodos.

Siguientes pasos