Ajuste de escala automático de un clúster


En esta página, se muestra cómo realizar el ajuste de escala automático en los clústeres de Google Kubernetes Engine (GKE) estándar. Para obtener más información sobre cómo funciona el escalador automático de clústeres, consulta Escalador automático de clústeres.

Con los clústeres de Autopilot, no tienes que preocuparte por aprovisionar nodos o administrar los grupos de nodos, ya que los grupos de nodos se aprovisionan automáticamente mediante el aprovisionamiento automático de nodos, y se escalan de forma automática para cumplir con los requisitos de tus cargas de trabajo.

Usa el escalador automático de clústeres

En las siguientes secciones, se explica cómo usar el escalador automático de clústeres.

Crea un clúster con ajuste de escala automático

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

gcloud

Para crear un clúster con ajuste de escala automático 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 \
    --region=COMPUTE_REGION

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster que se creará.
  • NUM_NODES: es la cantidad de nodos que se crearán en cada ubicación.
  • MIN_NODES: es la cantidad mínima de nodos que se deben escalar de forma automática para el grupo de nodos especificado por zona. A fin de especificar la cantidad mínima de nodos para 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 son mutuamente excluyentes con las marcas --min-nodes y --max-nodes.
  • MAX_NODES: la cantidad máxima de nodos que se escalarán de forma automática para el grupo de nodos especificado por zona. A fin de especificar la cantidad máxima de nodos para todo el grupo de nodos en las versiones 1.24 de GKE y posteriores, usa --total-max-nodes. Las marcas --total-min-nodes y --total-max-nodes son mutuamente excluyentes con las marcas --min-nodes y --max-nodes.
  • COMPUTE_REGION: es la región de Compute Engine del clúster. Para los clústeres zonales, usa --zone=COMPUTE_ZONE.

Ejemplo: Crea un clúster con ajuste de escala automático de nodos habilitado, y nodos mínimos y máximos

El siguiente comando crea un clúster con 90 nodos o 30 nodos en cada una de las 3 zonas presentes en la región. El ajuste de escala automático de nodos está habilitado y cambia la cantidad de nodos según 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 a 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 \
    --region=us-central

Ejemplo: Crea un clúster con el ajuste de escala automático de nodos habilitado y el total de nodos

El siguiente comando crea un clúster con 30 nodos o 10 nodos en cada una de las 3 zonas presentes en la región. El ajuste de escala automático de nodos está habilitado y cambia la cantidad de nodos según la carga del clúster. En este ejemplo, el tamaño total del clúster puede ser de entre 10 y 60 nodos, sin importar si se distribuye entre zonas.

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

Console

Para crear un clúster nuevo en el que el grupo de nodos predeterminado tenga habilitado el ajuste de escala automático, haz lo siguiente:

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

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Configura tu clúster como desees.

  4. En el panel de navegación, en Grupos de nodos, haz clic en default-pool.

  5. Selecciona la casilla de verificación Habilitar ajuste de escala automático.

  6. Cambia los valores de los campos Cantidad mínima de nodos y Cantidad máxima de nodos.

  7. Haz clic en Crear.

Agrega un grupo de nodos con ajuste de escala automático

Puedes crear un grupo de nodos con el ajuste de escala automático habilitado mediante la CLI de gcloud o la consola de Google Cloud.

gcloud

Para agregar un grupo de nodos con ajuste de escala automático a un clúster existente, usa el siguiente comando:

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

Reemplaza lo siguiente:

  • POOL_NAME: es el nombre del grupo de nodos deseado.
  • CLUSTER_NAME: es el nombre del clúster en el que se creó el grupo de nodos.
  • MIN_NODES: es la cantidad mínima de nodos que se deben escalar de forma automática para el grupo de nodos especificado por zona. A fin de especificar la cantidad mínima de nodos para 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 son mutuamente excluyentes con las marcas --min-nodes y --max-nodes.
  • MAX_NODES: la cantidad máxima de nodos que se escalarán de forma automática para el grupo de nodos especificado por zona. A fin de especificar la cantidad máxima de nodos para todo el grupo de nodos en las versiones 1.24 de GKE y posteriores, usa --total-max-nodes. Las marcas --total-min-nodes y --total-max-nodes son mutuamente excluyentes con las marcas --min-nodes y --max-nodes.
  • COMPUTE_REGION: es la región de Compute Engine del clúster. Para los clústeres zonales, usa --zone=COMPUTE_ZONE.

Ejemplo: Agrega un grupo de nodos con el ajuste de escala automático de nodos habilitado

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

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

Console

Para agregar un grupo de nodos con ajuste de escala automático a un clúster existente, haz lo siguiente:

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

    Ir a Google Kubernetes Engine

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

  3. Haz clic en Agregar grupo de nodos.

  4. Configura el grupo de nodos como desees.

  5. En Tamaño, selecciona la casilla de verificación Habilitar ajuste de escala automático.

  6. Cambia los valores de los campos Cantidad mínima de nodos y Cantidad máxima de nodos.

  7. Haz clic en Crear.

Habilita el ajuste de escala automático para un grupo de nodos existente

Puedes habilitar el ajuste de escala automático para un grupo de nodos existente con la CLI de gcloud o la consola de Google Cloud.

gcloud

A fin de habilitar el ajuste de escala automático para un grupo de nodos existente, usa el siguiente comando:

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

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster que se actualizará.
  • POOL_NAME: es el nombre del grupo de nodos deseado. Si solo tienes un grupo de nodos, proporciona default-pool como valor.
  • MIN_NODES: es la cantidad mínima de nodos que se deben escalar de forma automática para el grupo de nodos especificado por zona. A fin de especificar la cantidad mínima de nodos para 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 son mutuamente excluyentes con las marcas --min-nodes y --max-nodes.
  • MAX_NODES: la cantidad máxima de nodos que se escalarán de forma automática para el grupo de nodos especificado por zona. A fin de especificar la cantidad máxima de nodos para todo el grupo de nodos en las versiones 1.24 de GKE y posteriores, usa --total-max-nodes. Las marcas --total-min-nodes y --total-max-nodes son mutuamente excluyentes con las marcas --min-nodes y --max-nodes.
  • COMPUTE_REGION: es la región de Compute Engine del clúster. Para los clústeres zonales, usa --zone=COMPUTE_ZONE.

Console

Para habilitar el ajuste de escala automático en un grupo de nodos existente, sigue estos pasos:

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

    Ir a Google Kubernetes Engine

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

  3. Haz clic en la pestaña Nodos.

  4. En Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas modificar y, luego, en Editar.

  5. En Tamaño, selecciona la casilla de verificación Habilitar ajuste de escala automático.

  6. Cambia los valores de los campos Cantidad mínima de nodos y Cantidad máxima de nodos.

  7. Haz clic en Guardar.

Verifica que el ajuste de escala automático para el grupo de nodos existente esté habilitado

Debes verificar que tu clúster use el ajuste de escala automático con la CLI de Google Cloud o la consola de Google Cloud.

gcloud

Describe los grupos de nodos del clúster:

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

Reemplaza lo siguiente:

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

Si el ajuste de escala automático está habilitado, el resultado es similar al siguiente:

autoscaling:
  enabled: true

Console

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

    Ir a Google Kubernetes Engine

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

  3. Haz clic en la pestaña Nodos.

  4. En Grupos de nodos, verifica que el estado del grupo de nodos sea Autoscalling.

Crea un grupo de nodos que priorice la optimización de las reservas sin usar

Puedes usar la marca --location_policy=ANY cuando crees un grupo de nodos para indicarle al escalador automático del clúster que priorice el uso de las reservas sin usar:

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

Reemplaza lo siguiente:

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

Inhabilita el ajuste de escala automático para un grupo de nodos existente

Puedes inhabilitar el ajuste de escala automático para un grupo de nodos existente con la CLI de gcloud o la consola de Google Cloud.

gcloud

A fin de inhabilitar el ajuste de escala automático para 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 \
    --region=COMPUTE_REGION

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster que se actualizará.
  • POOL_NAME: es el nombre del grupo de nodos deseado.
  • COMPUTE_REGION: es la región de Compute Engine del clúster. Para los clústeres zonales, usa --zone=COMPUTE_ZONE.

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

Console

Para inhabilitar el ajuste de escala automático en un grupo de nodos específico, sigue estos pasos:

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

    Ir a Google Kubernetes Engine

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

  3. Haz clic en la pestaña Nodos.

  4. En Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas modificar y, luego, en Editar.

  5. En Tamaño, desmarca la casilla de verificación Habilitar ajuste de escala automático.

  6. Haz clic en Guardar.

Cambia el tamaño de un grupo de nodos

Para los clústeres con el ajuste de escala automático habilitado, el escalador automático del clúster cambia el tamaño de los grupos de nodos de forma automática dentro de los límites especificados por el tamaño mínimo (--min-nodes) y el tamaño máximo (--max-nodes) o el tamaño total mínimo (--total-min-nodes) y el tamaño total máximo (--total-max-nodes). Estas marcas son mutuamente excluyentes. No puedes cambiar el tamaño de un grupo de nodos de forma manual modificando estos valores.

Si deseas cambiar de forma manual el tamaño de un grupo de nodos en un clúster que tiene habilitado el ajuste de escala automático, haz lo siguiente:

  1. Inhabilita el ajuste de escala automático en el grupo de nodos.
  2. Cambia el tamaño del clúster de forma manual.
  3. Vuelve a habilitar el ajuste de escala automático y especifica el tamaño mínimo y máximo del grupo de nodos.

Evita que los Pods se programen en nodos seleccionados

Puedes usar taints startup o status para evitar que se programen Pods en nodos seleccionados, según el caso de uso.

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

Taints de inicio

Usa taints startup cuando haya una operación que se deba completar antes de que cualquier Pod pueda ejecutarse en el nodo. Por ejemplo, los Pods no deben ejecutarse hasta que finalice la instalación de los controladores en el nodo.

El escalador automático del clúster trata a los nodos con taints startup como no listos, pero lo tiene en cuenta durante la lógica de escalamiento vertical, en el caso de que estén listos en breve.

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

Taints de estado

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

El escalador automático de clústeres considera que los nodos contaminados con taints status están listos, pero los ignora durante la lógica de escalamiento vertical. Aunque el nodo con taint está listo, no se debe ejecutar ningún Pod. Si los Pods necesitan más recursos, GKE escala verticalmente el clúster y, además, ignora los nodos con taints.

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

Taints de omisión

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

Soluciona problemas

Verifica si el problema que tienes se debe a una de las limitaciones del escalador automático de clústeres. De lo contrario, consulta la siguiente información de solución de problemas para el escalador automático de clústeres:

El clúster no escala de manera descendente

Después de que el clúster escala verticalmente y, luego, intenta reducir la escala, los nodos con poco uso permanecen habilitados y evitan que el clúster reduzca la escala verticalmente. Este error ocurre por uno de los siguientes motivos:

  • Las restricciones pueden impedir que el escalador automático borre un nodo. GKE podría evitar la eliminación de un nodo si este contiene un Pod con alguna de las siguientes condiciones:

    • Pods con reglas de afinidad o antiafinidad que impiden las reprogramaciones
    • En la versión 1.21 de GKE y versiones anteriores, el Pod tiene almacenamiento local.
    • Pods que no están bajo la administración de un Controlador, tal como una Implementación, un StatefulSet, un trabajo o un ReplicaSet.

    Para resolver este problema, configura las reglas de programación y expulsión del escalador automático del clúster en tus Pods. Para obtener más información, consulta Programación e interrupción de Pods.

  • Los Pods del sistema se ejecutan en un nodo. Para verificar que tus nodos ejecuten Pods kube-system, realiza los siguientes pasos:

    1. Ve al Explorador de registros en la consola de Google Cloud.

      Ir al Explorador de registros

    2. Haz clic en Compilador de consultas.

    3. Usa la siguiente consulta para encontrar todos los registros de las políticas de red:

        - resource.labels.location="CLUSTER_LOCATION"
        resource.labels.cluster_name="CLUSTER_NAME"
        logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fcluster-autoscaler-visibility"
        jsonPayload.noDecisionStatus.noScaleDown.nodes.node.mig.nodepool="NODE_POOL_NAME"
      

      Reemplaza lo siguiente:

      • CLUSTER_LOCATION: es la región en la que se encuentra el clúster.
      • CLUSTER_NAME: Es el nombre del clúster.
      • PROJECT_ID es el ID del proyecto en el que se crea el clúster.
      • NODE_POOL_NAME: es el nombre de tu grupo de nodos.

        Si hay Pods kube-system en ejecución en tu grupo de nodos, el resultado incluye lo siguiente:

        "no.scale.down.node.pod.kube.system.unmovable"
        

    Para resolver este problema, debes realizar una de las siguientes acciones:

El tamaño del grupo de nodos no coincide

El siguiente problema se genera cuando configuras el tamaño del grupo de nodos:

  • Un tamaño de grupo de nodos existente es menor que la cantidad mínima de nodos que especificaste para el clúster.

En la siguiente lista, se describen las posibles causas comunes de este comportamiento:

  • Especificaste una nueva cantidad mínima de nodos cuando la cantidad existente de nodos es más alta.
  • Redujiste verticalmente la escala del grupo de nodos o el grupo de instancias administrado subyacente de forma manual. Esta operación manual especificó una cantidad de nodos menor que la cantidad mínima.
  • Implementaste VM Spot interrumpidas dentro del grupo de nodos.
  • El pod tiene almacenamiento local y la versión del plano de control de GKE es anterior a 1.22. En los clústeres de GKE con la versión 1.22 o posterior del plano de control, los Pods con almacenamiento local ya no bloquean la reducción de la escala verticalmente.
  • El Pod tiene la anotación "cluster-autoscaler.kubernetes.io/safe-to-evict": "false".

    Para obtener más pasos para solucionar problemas durante los eventos de reducción de escala verticalmente, consulta El clúster no reduce la escala verticalmente.

  • Cuando reduce la escala, el escalador automático el clúster respeta el período de gracia de finalización de Pods hasta un máximo de 10 minutos. Después de 10 minutos, los Pods se finalizan de manera forzada.

  • Es posible que observes que el tamaño del grupo de nodos es menor que la cantidad mínima de nodos que especificaste para el clúster. Este comportamiento sucede porque el escalador automático usa el parámetro de la cantidad mínima de nodos solo cuando necesita determinar una reducción de escala verticalmente. Estas son las listas de las posibles causas comunes de este comportamiento.

Para resolver este problema, aumenta manualmente el tamaño del grupo de nodos a la cantidad mínima de nodos. Para obtener más información, consulta cómo cambiar el tamaño de un clúster de forma manual.

Para obtener más información sobre el escalador automático de clústeres y la prevención de interrupciones, consulta las siguientes dudas en las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes:

¿Qué sigue?