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:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
Haz clic en add_box Crear.
Configura tu clúster como desees.
En el panel de navegación, en Grupos de nodos, haz clic en default-pool.
Selecciona la casilla de verificación Habilitar ajuste de escala automático.
Cambia los valores de los campos Cantidad mínima de nodos y Cantidad máxima de nodos.
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:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
Haz clic en add_box Agregar grupo de nodos.
Configura el grupo de nodos como desees.
En Tamaño, selecciona la casilla de verificación Habilitar ajuste de escala automático.
Cambia los valores de los campos Cantidad mínima de nodos y Cantidad máxima de nodos.
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, proporcionadefault-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:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
Haz clic en la pestaña Nodos.
En Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas modificar y, luego, en edit Editar.
En Tamaño, selecciona la casilla de verificación Habilitar ajuste de escala automático.
Cambia los valores de los campos Cantidad mínima de nodos y Cantidad máxima de nodos.
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
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas verificar.
Haz clic en la pestaña Nodos.
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:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
Haz clic en la pestaña Nodos.
En Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas modificar y, luego, en edit Editar.
En Tamaño, desmarca la casilla de verificación Habilitar ajuste de escala automático.
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:
- Inhabilita el ajuste de escala automático en el grupo de nodos.
- Cambia el tamaño del clúster de forma manual.
- 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:Ve al Explorador de registros en la consola de Google Cloud.
Haz clic en Compilador de consultas.
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:
- Agrega un
PodDisruptionBudget
para los Pods dekube-system
. A fin de obtener más información sobre cómo agregar unPodDisruptionBudget
de forma manual para los Pods dekube-system
, consulta las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes. - Usa una combinación de taints y tolerancias de grupos de nodos para separar los Pods de
kube-system
de los de tu aplicación. Para obtener más información, consulta el aprovisionamiento automático de nodos en GKE.
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:
- ¿Cómo funciona la reducción de escala?
- ¿El escalador automático de clústeres funciona con PodDisruptionBudget para la reducción de la escala?
- ¿Qué tipos de Pods pueden impedir que el escalador automático de clústeres quite un nodo?
¿Qué sigue?
- Obtén más información sobre el escalador automático de clústeres.
- Consulta eventos del escalador automático de clústeres