Ajuste automático de escala horizontal de Pods


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. También puedes leer acerca de cómo configurar y usar el escalador automático horizontal de Pods en tus clústeres.

Horizontal Pod Autoscaler cambia la forma de tu carga de trabajo de Kubernetes mediante el aumento o la disminución automáticos de la cantidad de Pods en función del consumo de memoria o CPU de la carga de trabajo, o en función de las métricas personalizadas que se establecen desde Kubernetes o las métricas externas de fuentes fuera del clúster.

Los clústeres de GKE con aprovisionamiento automático de nodos escalan de forma automática la cantidad de nodos en el clúster según los cambios en la cantidad de pods. Por ese motivo, te recomendamos que uses el ajuste automático de escala horizontal de Pods para todos los clústeres.

Por qué usar el ajuste automático de escala horizontal de Pods

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 y de cómo estos pueden cambiar según los patrones de uso, las dependencias externas o cualquier otro factor. El ajuste de escala automático horizontal de pods ayuda a garantizar que tu carga de trabajo funcione de forma coherente en distintas situaciones y te permite controlar los costos, ya que solo pagas la capacidad adicional cuando la necesitas.

No siempre es fácil predecir los indicadores que muestran si tu carga de trabajo no cuenta con los recursos suficientes o si se usó muy poco. El escalador automático horizontal de pods 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 los recursos: Cuando el uso de CPU o memoria de un pod excede un límite. 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 escalador automático horizontal de pods a fin de que aumente la cantidad de pods de forma automática cuando el tamaño de la cola alcance un cierto límite y que se reduzca la cantidad de pods cuando se reduce el tamaño de la cola.

Puedes combinar un Horizontal Pod Autoscaler con un Escalador automático vertical de Pods, con algunas limitaciones.

Cómo funciona el ajuste de escala automático horizontal de pods

Cada Horizontal Pod Autoscaler configurado funciona mediante un bucle de control. Existe un Horizontal Pod Autoscaler independiente para cada flujo 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 Horizontal Pod Autoscaler 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 tasa 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 realice el ajuste de escala automático en función de varias métricas, el escalador automático horizontal de pods evalúa cada métrica por separado y usa el algoritmo de escalamiento a fin de determinar la nueva escala de la carga de trabajo en función de cada una. Se selecciona el escalamiento más grande para realizar el ajuste de escala automático.

Si, por algún motivo, una o más métricas no se encuentran disponibles, el escalador automático horizontal de pods se sigue escalando verticalmente según el tamaño más grande calculado, pero no disminuye el escalamiento.

Cómo prevenir la hiperpaginación

La hiperpaginación hace referencia a una situación en la que el escalador automático horizontal de pod intenta realizar acciones de ajuste de escala automático posteriores antes de que la carga de trabajo termine de responder a las acciones de ajuste de escala automático anteriores. Para evitar la hiperpaginación, el escalador automático horizontal de pods elige la recomendación más grande basada en los últimos cinco minutos.

Limitaciones

  • No uses el escalador automático horizontal de pods junto con el escalador automático vertical de pods 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.
  • 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 ajuste automático de escala horizontal de Pods para cargas de trabajo que no se pueden escalar, como DaemonSets.
  • No puedes usar métricas personalizadas o externas con el ajuste automático de escala horizontal de Pods para reducir la escala verticalmente a cero Pods y, luego, aumentar la escala.
  • 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 “/”. Tu adaptador de métrica puede permitir el cambio de nombre. Por ejemplo, consulta Operador prometheus-adapter as.

Escalabilidad

Horizontal Pod Autoscaler no tiene un límite estricto en cuanto a la cantidad de objetos HPA compatibles. Sin embargo, por encima de una cantidad determinada de objetos HPA, el período entre los recálculos de HPA puede ser más largo que los 15 segundos estándar.

  • Versión secundaria de GKE 1.21 o anterior: El período de recálculo debe permanecer dentro de los 15 segundos con hasta 100 objetos HPA.
  • Versión secundaria de GKE 1.22 o posterior: 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:

  • La cantidad de métricas que se escalan: 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 Horizontal Pod Autoscaler existe en el clúster como un objeto de HorizontalPodAutoscaler. Puedes usar comandos como kubectl get hpa o kubectl describe hpa HPA_NAME para interactuar con estos objetos.

También puedes crear objetos de HorizontalPodAutoscaler con el comando kubectl autoscale.

¿Qué sigue?