En esta página, se proporciona una descripción general del ajuste de escala automático horizontal de Pods y se explica cómo funciona en Google Kubernetes Engine (GKE). También puedes leer acerca de cómo configurar y usar el escalador automático horizontal de Pods en tus clústeres.
El escalador automático de Pods horizontal cambia la forma de tu carga de trabajo de Kubernetes aumentando o disminuyendo automáticamente la cantidad de Pods en respuesta al consumo de CPU o memoria de la carga de trabajo, o en respuesta a métricas personalizadas informadas desde Kubernetes o métricas externas de fuentes fuera de tu clúster.
El escalado automático horizontal de Pods no cambia la cantidad de nodos en un clúster de GKE. Para escalar automáticamente la cantidad de nodos en el clúster según los cambios en la cantidad de Pods, puedes usar el escalador automático de clústeres.
Cuando implementas tu carga de trabajo por primera vez en un clúster de Kubernetes, puede que no estés seguro de los requisitos de sus recursos. Estos requisitos también pueden cambiar con el tiempo según los patrones de uso, las dependencias externas o cualquier otro factor. El escalado automático horizontal de Pods ayuda a garantizar que tu carga de trabajo funcione de manera coherente en diferentes situaciones y te permite controlar los costos, ya que solo pagas por la capacidad adicional cuando la necesitas.
No siempre es fácil predecir los indicadores que muestran si tu carga de trabajo tiene recursos insuficientes o está infrautilizada. El escalador automático de Pods horizontal puede escalar automáticamente la cantidad de Pods en tu carga de trabajo en función de una o más métricas de los siguientes tipos:
Uso real de recursos: Cuando el uso de CPU o memoria de un Pod determinado supera un umbral. Puede expresarse como un valor bruto o como un porcentaje de la cantidad que el Pod solicita para ese recurso.
Métricas personalizadas: Se basan en cualquier métrica que un objeto de Kubernetes informe en un clúster, como la tasa de solicitudes de cliente por segundo o las escrituras de E/S por segundo.
Puede ser útil si tu aplicación es más propensa a los cuellos de botella en la red que a la CPU o la memoria.
Métricas externas: Se basan en una métrica de una aplicación o un servicio externos al clúster.
Por ejemplo, es posible que la carga de trabajo requiera más CPU durante la transferencia de una gran cantidad de solicitudes desde una canalización, como Pub/Sub. Puedes crear una métrica externa para el tamaño de la cola y configurar el Horizontal Pod Autoscaler para que aumente automáticamente la cantidad de Pods cuando el tamaño de la cola alcance un umbral determinado y para que reduzca la cantidad de Pods cuando el tamaño de la cola disminuya.
Puedes combinar un escalador automático horizontal de Pods con un escalador automático vertical de Pods, con algunas limitaciones.
Cómo funciona el ajuste de escala automático horizontal de pods
Cada escalador automático horizontal de Pods configurado funciona con un bucle de control. Existe un escalador automático horizontal de Pods independiente para cada carga de trabajo. Cada Horizontal Pod Autoscaler verifica de forma periódica las métricas de una cierta carga de trabajo en función de los umbrales objetivo que configures y cambia la forma de la carga de trabajo automáticamente.
Recursos por pod
Para los recursos que se asignan por pod, como la CPU, el controlador consulta la API de las métricas de los recursos de cada contenedor que se ejecuta en el pod.
- Si especificas un valor sin procesar para la CPU o la memoria, se usa el valor.
- Si especificas un valor porcentual para la CPU o la memoria, el escalador automático horizontal de Pods calcula el valor de uso promedio como un porcentaje de las solicitudes de CPU o memoria de ese Pod.
- Las métricas personalizadas y externas se expresan como valores sin procesar o valores promedio.
El controlador usa el valor promedio o sin procesar de una métrica informada para producir una proporción y la usa a fin de ajustar la escala de la carga de trabajo de manera automática. Puedes leer una descripción del algoritmo del escalador automático horizontal de Pods en la documentación del proyecto de Kubernetes.
Responde a varias métricas
Si configuras una carga de trabajo para que se ajuste de forma automática según varias métricas, el Horizontal Pod Autoscaler evalúa cada métrica por separado y usa el algoritmo de escalamiento para determinar la nueva escala de la carga de trabajo en función de cada una. Se selecciona la escala más grande para la acción de ajuste de escala automático.
Si una o más de las métricas no están disponibles por algún motivo, el escalador automático horizontal de Pods aún escala verticalmente según el tamaño más grande calculado, pero no reduce la escala verticalmente.
Prevén la hiperpaginación
La sobrecarga se refiere a una situación en la que el escalador automático horizontal de Pods
intenta realizar acciones de escalado automático posteriores antes de que la carga de trabajo termine
de responder a las acciones de escalado automático anteriores. Para evitar el thrashing, el escalador automático de Pods horizontal elige la recomendación más grande de un período de estabilización especificado.
Este comportamiento se controla con el campo scaleDown.stabilizationWindowSeconds en la especificación behavior del HPA, que tiene un valor predeterminado de 300 segundos (cinco minutos) en GKE.
Para evitar que las fluctuaciones menores provoquen eventos de ajuste de escala innecesarios, el escalador automático de Pods horizontal usa un valor de tolerancia del 10%. Para un objetivo determinado, no se realiza ninguna acción de ajuste si la proporción entre el valor de la métrica actual y el valor de la métrica objetivo se encuentra dentro del 10% de 1.0.
Escalamiento desde y hacia cero
En la versión 1.37 de GKE o posterior, puedes configurar el escalador automático horizontal de Pods para reducir la escala de una carga de trabajo a 0 réplicas cuando no haya demanda y volver a aumentar automáticamente la escala de la carga de trabajo cuando se reanude la demanda. El escalamiento desde y hacia cero incluye los siguientes comportamientos:
- Omisión de tolerancia: Cuando una carga de trabajo tiene
0réplicas, GKE omite la verificación de tolerancia de métricas estándar (proporción de 0.9 a 1.1). Cualquier valor de métrica superior a cero, como un solo mensaje en una cola, activa de inmediato un aumento a, al menos,1réplicas sin esperar a cruzar un umbral de tolerancia. - Ventanas de estabilización: El escalamiento vertical se establece de forma predeterminada en
0segundos (scaleUp.stabilizationWindowSeconds: 0) para la activación inmediata, mientras que la reducción de escala vertical se establece de forma predeterminada en300segundos (scaleDown.stabilizationWindowSeconds: 300) para garantizar cinco minutos continuos de demanda cero antes de escalar a0réplicas. - Condiciones de estado: Cuando el HPA ajusta la escala a
0réplicas, el controlador informa la condiciónScaledToZero: Truemientras permanece activo (ScalingActive: True). Si una carga de trabajo se ajusta manualmente a0réplicas fuera del HPA (por ejemplo, con el comandokubectl scale), el ajuste de escala automático se pausa (ScalingActive: False) hasta que la carga de trabajo se ajuste a1o más réplicas.
Para obtener instrucciones paso a paso, consulta Cómo escalar cargas de trabajo de GKE a cero y desde cero con HPA.
Limitaciones
- A menos que uses el ajuste de tamaño adecuado del HPA con el VPA (versión preliminar), no uses el escalador automático horizontal de Pods junto con el escalador automático vertical de Pods estándar en la CPU o la memoria. Puedes usar el escalador automático horizontal de Pods con el escalador automático vertical de Pods para otras métricas, o bien configurar el escalado automático multidimensional de Pods para realizar el escalado horizontal en la CPU y el escalado vertical en la memoria al mismo tiempo.
- Si tienes un Deployment, no configures el ajuste de escala automático horizontal de pods en ReplicaSet o en el controlador de replicación que la respalda. Cuando realizas una actualización progresiva en el controlador de replicación o en el Deployment, se reemplaza por un nuevo controlador de replicación. En su lugar, configura el ajuste de escala automático horizontal de Pods en el mismo objeto Deployment.
- No puedes usar el escalado automático horizontal de Pods para cargas de trabajo que no se pueden escalar, como DaemonSets.
- El ajuste de escala automático horizontal de Pods expone métricas como recursos de Kubernetes, lo que impone limitaciones a los nombres de las métricas, como sin caracteres en mayúscula o “/”.
Es posible que tu adaptador de métrica permita el cambio de nombre. Por ejemplo, consulta el operador
prometheus-adapteras. - El Horizontal Pod Autoscaler no reduce la escala verticalmente si alguna de las métricas que está configurado para supervisar no está disponible. Para verificar si tienes métricas no disponibles, consulta Cómo ver detalles sobre un escalador automático horizontal de Pods.
Escalabilidad
Si bien el escalador automático de Pods horizontal no tiene un límite estricto en la cantidad de objetos HPA admitidos, su rendimiento puede verse afectado a medida que aumenta esta cantidad. Específicamente, el período entre los recálculos de HPA podría ser más largo que los 15 segundos estándar.
- En las versiones secundarias 1.31 o 1.32 de GKE, si se configura el perfil de HPA de rendimiento, el período de recálculo debe permanecer dentro de los 15 segundos con hasta 1,000 objetos HPA. Obtén más información para configurar el perfil de HPA de rendimiento.
- En la versión secundaria de GKE 1.33 o posterior, si se configura el perfil de HPA de rendimiento, el período de recálculo debe permanecer dentro de los 15 segundos con hasta 5,000 objetos HPA. El perfil de HPA de rendimiento está habilitado de forma predeterminada en todos los clústeres que cumplen con los requisitos.
- Si no se configura el perfil de HPA de rendimiento, el período de recálculo debe permanecer dentro de los 15 segundos con hasta 300 objetos HPA.
Los siguientes factores también pueden afectar el rendimiento:
- Escalamiento en varias métricas: cada métrica agrega una llamada de recuperación para los cálculos de recomendaciones, lo que afecta el período de recálculo.
- La latencia de la pila de métricas personalizadas: los tiempos de respuesta superiores a los 50 milisegundos son más altos que los observados de forma normal con las métricas estándar de Kubernetes, lo que afecta el período de recálculo.
Interactúa con objetos HorizontalPodAutoscaler
Para configurar un escalador automático horizontal de Pods en una carga de trabajo y obtener información sobre los eventos de ajuste de escala automático y sus causas, visita la página Cargas de trabajo en la consola de Google Cloud .
Cada escalador automático horizontal de Pods existe en el clúster como un objeto HorizontalPodAutoscaler. Puedes usar comandos como kubectl get hpa o kubectl describe hpa HPA_NAME para interactuar con estos objetos.
También puedes crear objetos HorizontalPodAutoscaler con el comando kubectl autoscale.
¿Qué sigue?
- Obtén más información para configurar el escalado automático horizontal de Pods.
- Obtén información para ajustar el tamaño de las cargas de trabajo de HPA con VPA.
- Obtén más información para escalar a cero y desde cero con el HPA.
- Obtén información para escalar una aplicación de forma manual.
- Obtén más información sobre el escalador automático vertical de Pods.
- Obtén más información sobre el escalador automático de clústeres.