En esta página se ofrece una descripción general del autoescalado horizontal de pods y se explica cómo funciona en Google Kubernetes Engine (GKE). También puedes consultar cómo configurar y usar el escalado automático horizontal de pods en tus clústeres.
El escalador automático horizontal de pods cambia la forma de tu carga de trabajo de Kubernetes aumentando o disminuyendo automáticamente el número de pods en respuesta al consumo de CPU o memoria de la carga de trabajo, o en respuesta a métricas personalizadas notificadas desde Kubernetes o a métricas externas de fuentes ajenas a tu clúster.
Los clústeres de GKE con aprovisionamiento automático de nodos escalan automáticamente el número de nodos del clúster en función de los cambios en el número de pods. Por este motivo, te recomendamos que uses la herramienta de escalado automático horizontal de pods en todos los clústeres.
Por qué usar el autoescalado horizontal de pods
Cuando despliegas por primera vez tu carga de trabajo en un clúster de Kubernetes, es posible que no sepas con certeza cuáles son sus requisitos de recursos y cómo pueden cambiar en función de los patrones de uso, las dependencias externas u otros factores. El autoescalado horizontal de pods te ayuda a asegurarte de que tu carga de trabajo funcione de forma coherente en diferentes situaciones y te permite controlar los costes, 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 pocos recursos o no se utiliza lo suficiente. La herramienta de autoescalado de pods horizontal puede escalar automáticamente el número de pods de tu carga de trabajo en función de una o varias métricas de los siguientes tipos:
Uso real de los recursos: cuando el uso de CPU o memoria de un Pod determinado supera un umbral. Puede expresarse como un valor sin procesar o como un porcentaje de la cantidad que solicita el pod para ese recurso.
Métricas personalizadas: se basan en cualquier métrica registrada por un objeto de Kubernetes en un clúster, como la tasa de solicitudes de cliente por segundo o las escrituras de E/S por segundo.
Esto puede ser útil si tu aplicación es propensa a los cuellos de botella de la red en lugar de a los de la CPU o la memoria.
Métricas externas: se basan en una métrica de una aplicación o un servicio externos a tu clúster.
Por ejemplo, tu carga de trabajo puede necesitar más CPU al ingerir un gran número de solicitudes de una canalización como Pub/Sub. Puedes crear una métrica externa para el tamaño de la cola y configurar el autoescalador horizontal de pods para que aumente automáticamente el número de pods cuando el tamaño de la cola alcance un umbral determinado y para que reduzca el número de pods cuando el tamaño de la cola se reduzca.
Puedes combinar un autoescalador horizontal de pods con un autoescalador vertical de pods, pero con algunas limitaciones.
Cómo funciona el autoescalado horizontal de pods
Cada herramienta de autoescalado de pods horizontal configurada funciona mediante un bucle de control. Hay una herramienta de escalado automático horizontal de pods independiente para cada carga de trabajo. Cada Horizontal Pod Autoscaler comprueba periódicamente las métricas de una carga de trabajo determinada con los umbrales objetivo que configures y cambia la forma de la carga de trabajo automáticamente.
Recursos por pod
En el caso de los recursos que se asignan por Pod, como la CPU, el controlador consulta la API de métricas de recursos de cada contenedor que se ejecuta en el Pod.
- Si especifica un valor sin formato para la CPU o la memoria, se usará ese valor.
- Si especificas un valor porcentual para la CPU o la memoria, el autoescalador horizontal de pods calcula el valor de uso medio como un porcentaje de las solicitudes de CPU o memoria de ese pod.
- Las métricas personalizadas y externas se expresan como valores brutos o como valores medios.
El controlador usa el valor medio o sin procesar de una métrica registrada para generar una proporción y usa esa proporción para escalar automáticamente la carga de trabajo. Puedes leer una descripción del algoritmo de Horizontal Pod Autoscaler en la documentación del proyecto de Kubernetes.
Responder a varias métricas
Si configuras una carga de trabajo para que se ajuste automáticamente en función de varias métricas, el autoescalador horizontal de pods evaluará cada métrica por separado y usará el algoritmo de escalado para determinar la nueva escala de la carga de trabajo en función de cada una de ellas. Se selecciona la escala más grande para la acción de escalado automático.
Si una o varias de las métricas no están disponibles por algún motivo, el autoescalador horizontal de pods seguirá escalando hacia arriba en función del tamaño más grande calculado, pero no escalará hacia abajo.
Evitar el thrashing
El thrashing se refiere a una situación en la que el autoescalado horizontal de pods intenta realizar acciones de autoescalado posteriores antes de que la carga de trabajo termine de responder a las acciones de autoescalado anteriores. Para evitar el thrashing, el escalador automático horizontal de pods elige la recomendación más grande de los últimos cinco minutos.
Limitaciones
- No uses la herramienta de adaptación dinámica horizontal de pods junto con la herramienta de adaptación dinámica vertical de pods en la CPU o la memoria. Puedes usar la herramienta de adaptación dinámica horizontal de pods con la herramienta de adaptación dinámica vertical de pods para otras métricas. Puedes configurar el autoescalado de pods multidimensional (en versión beta) para escalar horizontalmente en la CPU y verticalmente en la memoria al mismo tiempo.
- Si tienes un Deployment, no configures el autoescalado de pods horizontal en el ReplicaSet o Replication Controller que lo respalda. Cuando realizas una actualización gradual en el Deployment o el Replication Controller, se sustituye por un nuevo Replication Controller. En su lugar, configura el autoescalado horizontal de pods en el propio Deployment.
- No puedes usar el autoescalado horizontal de pods en cargas de trabajo que no se pueden escalar, como los DaemonSets.
- El autoescalado horizontal de pods expone las métricas como recursos de Kubernetes, lo que impone limitaciones en los nombres de las métricas, como no usar mayúsculas ni el carácter "/".
Es posible que tu adaptador de métricas permita cambiar el nombre. Por ejemplo, consulta el operador
prometheus-adapter
as
. - El autoescalador horizontal de pods no reducirá la escala si alguna de las métricas que está configurado para monitorizar no está disponible. Para comprobar si tienes métricas no disponibles, consulta Ver detalles sobre un autoescalador horizontal de pods.
Escalabilidad
Aunque el escalado automático horizontal de pods no tiene un límite estricto en el número de objetos HPA admitidos, su rendimiento puede verse afectado a medida que aumenta este número. En concreto, el periodo entre los recálculos de HPA puede ser superior a los 15 segundos estándar.
- En la versión secundaria 1.22 de GKE o una posterior, el periodo de recálculo debe ser de 15 segundos como máximo con un máximo de 300 objetos HPA.
- En la versión secundaria 1.31 o posterior de GKE, si se configura el perfil de HPA de rendimiento, el periodo de recálculo debe ser de 15 segundos como máximo con hasta 1000 objetos HPA. Consulta cómo configurar el perfil de HPA de rendimiento.
- En la versión secundaria 1.33 de GKE o posterior, si se configura el perfil de HPA de rendimiento, el periodo de recálculo debe ser de 15 segundos como máximo con hasta 5000 objetos HPA. El perfil de HPA de rendimiento está habilitado de forma predeterminada en todos los clústeres que cumplen los requisitos.
Los siguientes factores también pueden afectar al rendimiento:
- Escalar en varias métricas: cada métrica añade una llamada de obtención para los cálculos de recomendaciones, lo que afecta al periodo de recálculo.
- La latencia de la pila de métricas personalizadas: los tiempos de respuesta superiores a 50 milisegundos serían más altos de lo que se observa normalmente con las métricas estándar de Kubernetes, lo que afectaría al periodo de recálculo.
Interactuar con objetos HorizontalPodAutoscaler
Puede configurar un autoescalador de pods horizontal para una carga de trabajo y obtener información sobre los eventos de autoescalado y sus causas en la página Cargas de trabajo de la consola de Trusted Cloud .
Cada herramienta de autoescalado 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
.
Siguientes pasos
- Consulta cómo configurar el autoescalado de pods horizontal.
- Consulta cómo escalar manualmente una aplicación.
- Consulta cómo escalar a cero con KEDA.
- Consulta más información sobre la herramienta de adaptación dinámica vertical de pods.
- Consulta más información sobre Cluster Autoscaler.