Autoescalar un clúster


En esta página se explica cómo autoescalar los clústeres Estándar de Google Kubernetes Engine (GKE). Para obtener información sobre cómo funciona la herramienta de adaptación dinámica de clústeres, consulta Adaptación dinámica de clústeres.

Con los clústeres Autopilot, no tienes que preocuparte por aprovisionar nodos ni gestionar grupos de nodos, ya que estos se aprovisionan automáticamente mediante el aprovisionamiento automático de nodos y se escalan automáticamente para satisfacer los requisitos de tus cargas de trabajo.

Usar la herramienta de adaptación dinámica de clústeres

En las siguientes secciones se explica cómo usar la herramienta de adaptación dinámica de clúster.

Crear un clúster con autoescalado

Puedes crear un clúster con el escalado automático habilitado mediante la CLI de Google Cloud o la Google Cloud consola.

gcloud

Para crear un clúster con el autoescalado habilitado, usa la marca --enable-autoscaling y especifica --min-nodes y --max-nodes:

gcloud container clusters create CLUSTER_NAME \
    --enable-autoscaling \
    --num-nodes NUM_NODES \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster que se va a crear.
  • NUM_NODES: el número de nodos que se crearán en cada ubicación.
  • MIN_NODES: el número mínimo de nodos que se escalarán automáticamente para el grupo de nodos especificado por zona. Para especificar el número mínimo de nodos de todo el grupo de nodos en las versiones 1.24 y posteriores de GKE, usa --total-min-nodes. Las marcas --total-min-nodes y --total-max-nodes se excluyen mutuamente con las marcas --min-nodes y --max-nodes.
  • MAX_NODES: el número máximo de nodos que se pueden escalar automáticamente en el grupo de nodos especificado por zona. Para especificar el número máximo de nodos de todo el grupo de nodos en GKE 1.24 y versiones posteriores, usa --total-max-nodes. Las marcas --total-min-nodes y --total-max-nodes se excluyen mutuamente con las marcas --min-nodes y --max-nodes.
  • CONTROL_PLANE_LOCATION: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.

Ejemplo: crear un clúster con el autoescalado de nodos habilitado y un número mínimo y máximo de nodos

El siguiente comando crea un clúster con 90 nodos, es decir, 30 nodos en cada una de las 3 zonas de la región. El autoescalado de nodos está habilitado y cambia el tamaño del número de nodos en función de la carga del clúster. El escalador automático de clústeres puede reducir el tamaño del grupo de nodos predeterminado a 15 nodos o aumentar el grupo de nodos hasta un máximo de 50 nodos por zona.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes=30 \
    --min-nodes=15 --max-nodes=50 \
    --location=us-central

Ejemplo: crear un clúster con el autoescalado de nodos habilitado y el número total de nodos

El siguiente comando crea un clúster con 30 nodos, es decir, 10 nodos en cada una de las 3 zonas de la región. El autoescalado de nodos está habilitado y cambia el tamaño del número de nodos en función de la carga del clúster. En este ejemplo, el tamaño total del clúster puede ser de entre 10 y 60 nodos, independientemente de la distribución entre zonas.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 10 \
    --location us-central1 \
    --total-min-nodes 10  --total-max-nodes 60

Consola

Para crear un clúster en el que el grupo de nodos predeterminado tenga habilitado el escalado automático, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Crear un clúster de Kubernetes.

    Ir a Crear un clúster de Kubernetes

  2. Configura el clúster a tu gusto.

  3. En el panel de navegación, ve a Grupos de nodos y haz clic en default-pool.

  4. Seleccione la casilla Habilitar autoescalado.

  5. Cambie los valores de los campos Número mínimo de nodos y Número máximo de nodos como quiera.

  6. Haz clic en Crear.

Agregar un grupo de nodos con autoescalado

Puedes crear un grupo de nodos con el autoescalado habilitado mediante la CLI de gcloud o la Google Cloud consola.

gcloud

Para añadir un grupo de nodos con autoescalado a un clúster, usa el siguiente comando:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

Haz los cambios siguientes:

  • POOL_NAME: el nombre del grupo de nodos que quieras.
  • CLUSTER_NAME: el nombre del clúster en el que se crea el grupo de nodos.
  • MIN_NODES: el número mínimo de nodos que se escalarán automáticamente para el grupo de nodos especificado por zona. Para especificar el número mínimo de nodos de todo el grupo de nodos en las versiones 1.24 y posteriores de GKE, usa --total-min-nodes. Las marcas --total-min-nodes y --total-max-nodes se excluyen mutuamente con las marcas --min-nodes y --max-nodes.
  • MAX_NODES: el número máximo de nodos que se pueden escalar automáticamente en el grupo de nodos especificado por zona. Para especificar el número máximo de nodos de todo el grupo de nodos en GKE 1.24 y versiones posteriores, usa --total-max-nodes. Las marcas --total-min-nodes y --total-max-nodes se excluyen mutuamente con las marcas --min-nodes y --max-nodes.
  • CONTROL_PLANE_LOCATION: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.

Ejemplo: Añadir un grupo de nodos con el autoescalado de nodos habilitado

El siguiente comando crea un grupo de nodos con autoescalado de nodos que escala el grupo de nodos a un máximo de 5 nodos y un mínimo de 1 nodo:

gcloud container node-pools create my-node-pool \
    --cluster my-cluster \
    --enable-autoscaling \
    --min-nodes 1 --max-nodes 5 \
    --location us-central1-c

Consola

Para añadir un grupo de nodos con autoescalado a un clúster, sigue estos pasos:

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

    Ir a Google Kubernetes Engine

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

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

  4. Configura el grupo de nodos a tu gusto.

  5. En Tamaño, marque la casilla Habilitar escalado automático.

  6. Cambia los valores de los campos Número mínimo de nodos y Número máximo de nodos como quieras.

  7. Haz clic en Crear.

Habilitar el autoescalado de un grupo de nodos existente

Puedes habilitar el autoescalado en un grupo de nodos que ya tengas con la CLI de gcloud o la Google Cloud consola.

gcloud

Para habilitar el autoescalado en un grupo de nodos, usa el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool=POOL_NAME \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster que se va a actualizar.
  • POOL_NAME: el nombre del grupo de nodos que quieras. Si solo tiene un grupo de nodos, indique default-pool como valor.
  • MIN_NODES: el número mínimo de nodos que se escalarán automáticamente para el grupo de nodos especificado por zona. Para especificar el número mínimo de nodos de todo el grupo de nodos en las versiones 1.24 y posteriores de GKE, usa --total-min-nodes. Las marcas --total-min-nodes y --total-max-nodes se excluyen mutuamente con las marcas --min-nodes y --max-nodes.
  • MAX_NODES: el número máximo de nodos que se pueden escalar automáticamente en el grupo de nodos especificado por zona. Para especificar el número máximo de nodos de todo el grupo de nodos en GKE 1.24 y versiones posteriores, usa --total-max-nodes. Las marcas --total-min-nodes y --total-max-nodes se excluyen mutuamente con las marcas --min-nodes y --max-nodes.
  • CONTROL_PLANE_LOCATION: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.

Consola

Para habilitar el autoescalado en un grupo de nodos:

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

    Ir a Google Kubernetes Engine

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

  3. Haz clic en la pestaña Nodos.

  4. En Grupos de nodos, haga clic en el nombre del grupo de nodos que quiera modificar y, a continuación, en Editar.

  5. En Tamaño, marque la casilla Habilitar escalado automático.

  6. Cambia los valores de los campos Número mínimo de nodos y Número máximo de nodos como quieras.

  7. Haz clic en Guardar.

Verificar que el escalado automático del grupo de nodos esté habilitado

Para verificar que tu clúster usa el autoescalado, puedes usar la CLI de Google Cloud o la Google Cloud consola.

gcloud

Describe los grupos de nodos del clúster:

gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1

Haz los cambios siguientes:

  • POOL_NAME: el nombre del nuevo grupo de nodos que elijas.
  • CLUSTER_NAME: el nombre del clúster.

Si el escalado automático está habilitado, el resultado será similar al siguiente:

autoscaling:
  enabled: true

Consola

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

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que quieras verificar.

  3. Haz clic en la pestaña Nodos.

  4. En Grupos de nodos, comprueba el estado del grupo de nodos Autoscalling.

Crear un grupo de nodos que priorice la optimización de las reservas no utilizadas

Puedes usar la marca --location_policy=ANY al crear un grupo de nodos para indicar a la herramienta de adaptación dinámica de clústeres que priorice el uso de las reservas sin utilizar:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location_policy=ANY

Haz los cambios siguientes:

  • POOL_NAME: el nombre del nuevo grupo de nodos que elijas.
  • CLUSTER_NAME: el nombre del clúster.

Inhabilitar el autoescalado de un grupo de nodos existente

Puedes inhabilitar el autoescalado de un grupo de nodos con la CLI de gcloud o la Google Cloud consola.

gcloud

Para inhabilitar el autoescalado de un grupo de nodos específico, usa la marca --no-enable-autoscaling:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --location=CONTROL_PLANE_LOCATION

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster que se va a actualizar.
  • POOL_NAME: el nombre del grupo de nodos que quieras.
  • CONTROL_PLANE_LOCATION: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.

El tamaño del clúster se fija en el tamaño predeterminado actual del grupo de nodos del clúster, que se puede actualizar manualmente.

Consola

Para inhabilitar el autoescalado en un grupo de nodos específico, sigue estos pasos:

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

    Ir a Google Kubernetes Engine

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

  3. Haz clic en la pestaña Nodos.

  4. En Grupos de nodos, haga clic en el nombre del grupo de nodos que quiera modificar y, a continuación, en Editar.

  5. En Tamaño, desmarque la casilla Habilitar escalado automático.

  6. Haz clic en Guardar.

Cambiar el tamaño de un grupo de nodos

En los clústeres con el autoescalado habilitado, el autoescalador de clústeres cambia automáticamente el tamaño de los grupos de nodos dentro de los límites especificados por los valores de tamaño mínimo (--min-nodes) y tamaño máximo (--max-nodes) o por los valores de tamaño total mínimo (--total-min-nodes) y tamaño total máximo (--total-max-nodes). Estas marcas son mutuamente excluyentes. No puedes cambiar manualmente el tamaño de un grupo de nodos modificando estos valores.

Si quieres cambiar manualmente el tamaño de un grupo de nodos de tu clúster que tenga habilitado el autoescalado, haz lo siguiente:

  1. Inhabilita el autoescalado en el grupo de nodos.
  2. Cambia el tamaño del clúster manualmente.
  3. Vuelve a habilitar el autoescalado y especifica el tamaño mínimo y máximo del grupo de nodos.

Impedir que se programen pods en nodos seleccionados

Puedes usar los taints startup o status para evitar que los pods se programen en nodos concretos, en función del caso práctico.

Esta función está disponible en GKE en la versión 1.28 y posteriores.

Intolerancias de inicio

Usa startup taints cuando haya una operación que deba completarse antes de que se puedan ejecutar Pods en el nodo. Por ejemplo, los pods no deben ejecutarse hasta que finalice la instalación de los controladores en el nodo.

La herramienta de ajuste automático de escala del clúster trata los nodos que tienen startup taints como no preparados, pero los tiene en cuenta durante la lógica de ampliación, ya que se supone que estarán listos en breve.

Los taints de inicio se definen como todos los taints con el prefijo startup-taint.cluster-autoscaler.kubernetes.io/.

Estados sucios

Usa status taints cuando GKE no deba usar un nodo determinado para ejecutar pods.

La herramienta de adaptación dinámica de clústeres trata los nodos contaminados con status como listos, pero los ignora durante la lógica de escalado vertical. Aunque el nodo contaminado esté listo, no se debe ejecutar ningún pod. Si los pods necesitan más recursos, GKE aumenta la escala del clúster e ignora los nodos contaminados.

Las contaminaciones de estado se definen como todas las contaminaciones con el prefijo status-taint.cluster-autoscaler.kubernetes.io/.

Ignorar intolerancias

Los taints de ignorar se definen como todos los taints con el prefijo ignore-taint.cluster-autoscaler.kubernetes.io/.

Solución de problemas

Para obtener consejos sobre cómo solucionar problemas, consulta las siguientes páginas:

Siguientes pasos