El ajuste automático horizontal de pods (HPA) es una función de Kubernetes que ajusta automáticamente el número de pods en ejecución en una carga de trabajo, como una implementación o un StatefulSet, en función de la utilización de recursos. Esto garantiza que las aplicaciones se escalen dinámicamente para satisfacer la demanda, al tiempo que se optimiza el uso de los recursos.
¿Cómo funciona HPA?
HPA supervisa continuamente las métricas de recursos especificadas, como la utilización de CPU y memoria, o las métricas definidas por el usuario. En función de estas métricas, HPA aumenta o disminuye el número de réplicas de pods para mantener un rendimiento óptimo.
Pasos en el funcionamiento de HPA:
- Supervisar la utilización de recursos: HPA consulta al servidor de métricas para obtener datos sobre el uso de recursos.
- Comparar con las métricas objetivo: compara el uso real con los umbrales predefinidos.
- Calcular las réplicas deseadas: mediante un algoritmo de ajuste automático, HPA determina el número necesario de réplicas.
- Ajustar el recuento de pods: el número de réplicas de pods se incrementa o disminuye en consecuencia.
- Repetir el proceso: HPA evalúa continuamente las métricas y actualiza el recuento de pods según sea necesario.
Componentes de HPA
Componente | Descripción |
Servidor de métricas | Recopila métricas de uso de recursos de los pods. |
Referencia de destino de escalado | Define la carga de trabajo que se va a escalar (por ejemplo, implementación, StatefulSet). |
Algoritmo de ajuste automático | Calcula el número de réplicas necesario en función de las métricas observadas. |
Valores umbral | Valores objetivo configurados para la utilización de recursos. |
Ventajas de HPA
1. Asignación dinámica de recursos
HPA ayuda a optimizar el uso de los recursos ajustando automáticamente el número de pods en respuesta a las cargas de trabajo cambiantes. En lugar de mantener un número fijo de pods en ejecución en todo momento, HPA aumenta el número de pods cuando la demanda es alta y los reduce cuando la demanda es baja.
Esto garantiza que las aplicaciones siempre tengan los recursos adecuados, evitando la infrautilización y el sobreaprovisionamiento.
2. Rendimiento mejorado de la aplicación
Cuando una aplicación recibe un aumento repentino en el tráfico o la carga de trabajo, puede sobrecargarse, lo que provoca tiempos de respuesta lentos o fallos. HPA evita esto añadiendo automáticamente más pods para gestionar el aumento de la carga.
Este escalado garantiza que los usuarios experimenten un rendimiento fluido sin interrupciones. Del mismo modo, cuando la carga disminuye, HPA reduce el número de pods para liberar recursos informáticos.
3. Optimización de costes
Los recursos en la nube pueden ser caros, especialmente si están sobreasignados. Sin HPA, las organizaciones podrían asignar más recursos de los necesarios para gestionar las cargas máximas, lo que generaría costes innecesarios.
HPA evita este despilfarro asegurándose de que solo se ejecuten los pods necesarios en un momento dado. Las empresas pueden reducir sus gastos de computación en la nube reduciendo el consumo excesivo de recursos sin sacrificar el rendimiento.
4. Escalado automatizado
Ajustar manualmente el número de pods en ejecución puede llevar mucho tiempo y ser ineficiente, especialmente en entornos dinámicos donde las cargas de trabajo fluctúan con frecuencia. HPA automatiza este proceso, eliminando la necesidad de intervención humana.
Esto ahorra tiempo y reduce las posibilidades de errores en las decisiones de escalado, garantizando que las aplicaciones puedan gestionar las fluctuaciones de la demanda sin problemas.
Limitaciones de HPA
1. No es eficaz para DaemonSets
Los DaemonSets son un tipo de carga de trabajo de Kubernetes que garantiza que un pod se ejecute en cada nodo del clúster. Dado que DaemonSets siempre mantiene un pod por nodo, HPA no puede aumentar ni disminuir su número. Esto hace que HPA sea ineficaz para escalar DaemonSets, ya que solo funciona con implementaciones regulares donde se puede ajustar el número de pods.
2. Depende del servidor de métricas
HPA se basa en las métricas de uso de CPU y memoria para tomar decisiones de escalado. Obtiene estos datos del servidor de métricas de Kubernetes, que recopila información sobre el uso de recursos en tiempo real. Si las métricas
El servidor no se está ejecutando o está mal configurado, y HPA no podrá funcionar correctamente. En tales casos, las organizaciones pueden necesitar configurar un proveedor de métricas personalizado para garantizar un escalado preciso.
3. Limitado al escalado a nivel de pod
HPA solo aumenta o disminuye el número de pods, pero no gestiona el escalado a nivel de nodo. Si todos los nodos de un clúster están totalmente utilizados y no hay espacio adicional disponible para nuevos pods, HPA no podrá escalar más. Cluster Autoscaler debe utilizarse junto con HPA para gestionar tales escenarios para añadir más nodos cuando sea necesario.
Prácticas recomendadas para usar HPA
1. Definir solicitudes y límites de recursos adecuados
Para que HPA funcione eficazmente, cada pod debe tener solicitudes y límites de CPU y memoria bien definidos. Estos valores le dicen a Kubernetes cuántos recursos necesita cada pod en condiciones normales y máximas. Si las solicitudes de recursos son demasiado bajas, es posible que HPA no active el escalado correctamente. Si son demasiado altos, el clúster puede quedarse sin capacidad rápidamente. Establecer correctamente estos valores garantiza que HPA pueda tomar decisiones de escalado precisas.
2. Utilizar métricas personalizadas cuando sea necesario
De forma predeterminada, HPA utiliza el uso de CPU y memoria como activadores de escalado. Sin embargo, algunas aplicaciones podrían tener otros indicadores de rendimiento, como:
- Solicitudes por segundo (RPS) para aplicaciones web
- Longitud de la cola de mensajes para sistemas de procesamiento en segundo plano
- Tiempo de respuesta de la base de datos para aplicaciones basadas en bases de datos
En tales casos, Kubernetes permite que las métricas personalizadas activen el escalado en función de las necesidades específicas de la aplicación. Esto garantiza que HPA escale los pods de la manera que mejor respalde el rendimiento de la aplicación.
3. Supervisar el comportamiento de escalado
HPA funciona dinámicamente, pero supervisar sus decisiones de escalado es esencial para garantizar que se comporta correctamente. Kubernetes proporciona varias herramientas como:
- kubectl describe hpa: muestra el estado y las decisiones de escalado actuales.
- Prometheus & Grafana: proporciona una visualización detallada de las tendencias de escalado.
- Panel de control de Kubernetes: ofrece supervisión en tiempo real de las actividades de escalado de pods.
La revisión periódica de estas métricas ayuda a identificar cualquier configuración incorrecta, como el escalado excesivo o los retrasos en el escalado, lo que permite a los administradores ajustar la configuración de HPA.
4. Combinar con el escalador automático de clústeres
HPA solo gestiona el número de pods, pero el escalado se detendrá si el clúster se queda sin nodos disponibles. Para evitar esto, Cluster Autoscaler se puede utilizar junto con HPA. Cuando HPA solicita más pods y no hay espacio disponible, Cluster Autoscaler añade automáticamente nuevos nodos al clúster. Esto garantiza que el escalado no esté limitado por la capacidad del nodo y ayuda a mantener el rendimiento de la aplicación durante los picos de tráfico.
Conclusión
HPA es una función clave de Kubernetes para escalar dinámicamente las cargas de trabajo. Ajusta el número de réplicas de pods en función de la utilización de recursos o las métricas personalizadas. Optimiza el uso de recursos, mejora el rendimiento y reduce los costes. Se utiliza mejor junto con Cluster Autoscaler para una eficiencia de ajuste automático total. Al implementar HPA de forma eficaz, los usuarios de Kubernetes pueden garantizar que sus aplicaciones mantengan una alta disponibilidad y rendimiento al tiempo que minimizan los costes de infraestructura.