Habilite el escalado automático horizontal de pods (HPA) para ajustar automáticamente sus pods según la utilización de CPU, el uso de memoria o métricas personalizadas. HPA aumenta el número de réplicas de pods para manejar picos de tráfico y lo reduce durante los periodos de inactividad con el fin de ahorrar recursos de forma automática. Esta función es ideal para aplicaciones con cargas de trabajo fluctuantes que requieren un escalado frecuente, como plataformas de comercio electrónico, servicios de educación en línea y aplicaciones financieras.
Antes de empezar
Para utilizar HPA de manera eficaz, se recomienda leer la documentación oficial de Kubernetes sobre escalado automático horizontal de pods para comprender sus principios fundamentales, algoritmos y comportamientos de escalado configurables.
Además, los clústeres de Alibaba Cloud Container Service for Kubernetes (ACK) ofrecen diversas soluciones de escalado de cargas de trabajo (elasticidad en la capa de programación) y de escalado de nodos (elasticidad en la capa de recursos). Antes de continuar, consulte Auto scaling para conocer los casos de uso y las limitaciones de cada solución.
Requisitos previos
Ha creado un clúster administrado ACK o un clúster dedicado ACK. Para obtener más información, consulte Create a Kubernetes cluster.
Si utiliza comandos kubectl para implementar HPA, debe conectarse al clúster de Kubernetes con kubectl. Para obtener más información, consulte Obtain the KubeConfig of a cluster and use kubectl to connect to the cluster.
Crear una aplicación HPA en la consola
ACK está integrado con HPA, lo que permite crear aplicaciones compatibles con HPA desde la consola. Puede habilitar HPA al crear una nueva aplicación o en una existente. Se recomienda crear solo un HPA por carga de trabajo.
Habilitar HPA al crear una aplicación
El siguiente ejemplo utiliza un Deployment para mostrar cómo habilitar HPA al crear una aplicación. Los pasos para otros tipos de cargas de trabajo son similares.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la página Deployments, haga clic en Create from Image.
-
En la página Create, siga las instrucciones en pantalla para configurar la información básica de la aplicación, los contenedores, los servicios y el escalado con el fin de crear un Deployment compatible con HPA.
Para consultar los pasos detallados y las descripciones de los parámetros, vea Create a stateless workload (Deployment). La siguiente sección describe únicamente los parámetros clave.
Basic Information: Configure los ajustes de la aplicación, como su nombre y el número de réplicas.
-
Container: Configure la imagen y los recursos de CPU y memoria obligatorios.
La función de perfilado de recursos analiza el uso histórico de recursos y proporciona recomendaciones para configurar las solicitudes (Requests) y límites (Limits) del contenedor. Para obtener más información, consulte Resource profiling.
ImportanteDebe establecer las solicitudes (Requests) de recursos para la aplicación con el fin de habilitar HPA.
-
Advanced Settings:
-
En la sección Scaling, seleccione HPA de Enable y configure las condiciones y los parámetros para el escalado.
Metric: Las métricas compatibles son CPU y memoria. La métrica debe coincidir con el tipo de recurso obligatorio que haya establecido. Cuando especifica tanto CPU como memoria, HPA realiza una operación de escalado cuando cualquiera de las métricas alcanza su umbral de escalado.
Trigger Condition: El umbral de utilización de recursos, especificado como porcentaje. Cuando la utilización de recursos supera este umbral, los contenedores se escalan horizontalmente. Para obtener más información sobre el algoritmo de escalado automático horizontal de pods, consulte Detalles del algoritmo.
Max. Replicas: El número máximo de réplicas al que se puede escalar el Deployment. Este valor debe ser mayor que el número mínimo de réplicas.
Min. Replicas: El número mínimo de réplicas para el Deployment. El valor debe ser un número entero mayor o igual a 1.
-
Una vez completada la creación, puede ver el Deployment creado en la página Deployments. Haga clic en el nombre del Deployment y, a continuación, en la página de detalles del Deployment, haga clic en la pestaña Pod Scaling. En esta sección, puede consultar métricas relacionadas con la actividad de HPA, como la utilización de CPU o memoria y el número máximo o mínimo de réplicas, así como gestionar el HPA actualizando su configuración o deshabilitándolo.
Habilitar HPA para una aplicación existente
Este ejemplo muestra cómo habilitar HPA para un Deployment existente. Los pasos para otros tipos de cargas de trabajo son similares.
Página de cargas de trabajo
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la página Deployments, haga clic en el nombre de la aplicación objetivo, haga clic en la pestaña Pod Scaling y, a continuación, haga clic en Create en el área de HPA.
-
En el cuadro de diálogo Create, configure los ajustes de escalado según las indicaciones de la página.
Name: El nombre de la directiva de HPA.
-
Metric: Haga clic en Add.
Metric Name: Admite CPU y memoria. La métrica debe coincidir con el tipo de recurso que ha configurado. Cuando especifica tanto CPU como memoria, HPA realiza una operación de escalado tan pronto como cualquiera de las métricas alcanza su umbral de escalado.
Threshold: El porcentaje de utilización de recursos por encima del cual los contenedores comienzan a escalarse horizontalmente. Para obtener más información sobre el algoritmo de escalado automático horizontal de pods, consulte Detalles del algoritmo.
Max. Containers: El número máximo de réplicas al que puede escalarse el Deployment. Este valor debe ser mayor que el número mínimo de réplicas.
Min. Containers: El número mínimo de contenedores al que puede reducirse el Deployment. El valor debe ser un número entero mayor o igual a 1.
Una vez completada la configuración, puede hacer clic en el nombre del Deployment en la página Stateless Application y, a continuación, hacer clic en la pestaña Pod Scaling en la página de detalles del Deployment. En esta área, puede consultar métricas relacionadas con la actividad de HPA, como la utilización de CPU o memoria y el número máximo o mínimo de réplicas, así como gestionar el HPA actualizando su configuración o deshabilitándolo.
Página de escalado de cargas de trabajo
Esta página solo está disponible para usuarios incluidos en la lista de permitidos. Para solicitar acceso, envíe un ticket.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workload Scaling.
-
En la esquina superior derecha de la página, haga clic en Create Auto Scaling y, a continuación, haga clic en la pestaña HPA and CronHPA. Seleccione la carga de trabajo objetivo y, en la sección Configure Auto Scaling Policy, seleccione HPA y configure la directiva de HPA según las indicaciones.
Scaling Policy Name: El nombre de la directiva de HPA.
Min. Containers: El número mínimo de réplicas para la carga de trabajo. Este valor debe ser un número entero mayor o igual a 1.
Max. Containers: El número máximo de contenedores al que puede escalarse la carga de trabajo. Este valor debe ser mayor que el número mínimo de réplicas.
Metric Name: Las métricas compatibles incluyen CPU, GPU, memoria, solicitudes de Nginx Ingress y métricas personalizadas. El tipo de métrica debe coincidir con el tipo de recurso especificado. Si especifica varias métricas, el escalado automático horizontal de pods (HPA) realiza una operación de escalado cuando cualquiera de las métricas alcanza su umbral.
Threshold: El porcentaje de utilización de recursos. Si la utilización supera este valor, los contenedores comienzan a escalarse horizontalmente. Para obtener más información sobre el algoritmo de escalado automático horizontal de pods, consulte Detalles del algoritmo.
Una vez completada la creación, puede ver la lista de HPA en la página Workload Scaling. En la columna Actions, puede consultar métricas relacionadas con la actividad de HPA, como la utilización de recursos y el número máximo o mínimo de réplicas, así como gestionar el HPA actualizando su configuración o deshabilitándolo.
Comprobar los resultados
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workload Scaling.
Haga clic en la pestaña Horizontal Scaling y luego seleccione HPA para ver el estado del escalado y la lista de tareas.
En un entorno de producción, la aplicación se escala según la carga de los pods. También puede ejecutar una prueba de estrés en los pods dentro de un entorno de pruebas para comprobar el comportamiento de escalado horizontal.
Crear una aplicación HPA mediante kubectl
También puede utilizar una plantilla de orquestación para crear manualmente un HPA y vincularlo al Deployment objetivo. Se recomienda crear solo un HPA por carga de trabajo. Este ejemplo muestra cómo desplegar una aplicación Nginx compatible con HPA.
-
Cree un archivo llamado nginx.yml y copie en él el siguiente contenido.
ImportantePara implementar HPA, debe establecer recursos
requestpara el Pod. De lo contrario, HPA no puede ejecutarse. Puede utilizar la función de perfilado de recursos para analizar datos históricos de uso de recursos y obtener recomendaciones para configurar las solicitudes (Requests) y límites (Limits) del contenedor. Para obtener más información, consulte Resource profiling. -
Ejecute el siguiente comando para crear la aplicación Nginx.
kubectl apply -f nginx.yml -
Cree un archivo llamado hpa.yml y copie en él el siguiente contenido para crear el HPA.
Utilice
scaleTargetRefpara especificar el objeto objetivo del HPA. En este ejemplo, el HPA se vincula a un Deployment llamadonginxy desencadena una operación de escalado cuando la utilización promedio de CPU de los contenedores en todos los Pods alcanza el 50 %.Kubernetes 1.24 y versiones posteriores
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # The minimum number of replicas for the Deployment. Must be an integer greater than or equal to 1. maxReplicas: 10 # The maximum number of replicas for the Deployment. Must be greater than minReplicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 # The target average resource utilization, which is the ratio of average resource usage to the requested resource amount.Versiones de Kubernetes anteriores a la 1.24
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # Must be an integer greater than or equal to 1. maxReplicas: 10 # Must be greater than the minimum number of replicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50Si necesita especificar métricas tanto de CPU como de memoria, puede definir los tipos de recursos
cpuymemoryen el campometricsen lugar de crear dos HPA. Cuando el HPA detecta que alguna de las métricas alcanza el umbral de escalado, realiza una operación de escalado.metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 50 -
Ejecute el siguiente comando para crear el HPA.
kubectl apply -f hpa.ymlEn este punto, ejecute el comando
kubectl describe hpa <HPA name>. En este ejemplo, el nombre del HPA es nginx-hpa. El resultado esperado es el siguiente mensaje de advertencia, que indica que el HPA aún se está desplegando. Puede ejecutar el comandokubectl get hpapara comprobar el estado del HPA.Warning FailedGetResourceMetric 2m (x6 over 4m) horizontal-pod-autoscaler missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7 Warning FailedComputeMetricsReplicas 2m (x6 over 4m) horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5 -
Una vez creado el HPA y cuando el Pod cumpla las condiciones de escalado (en este ejemplo, la utilización de CPU del Pod de Nginx supera el 50 %), ejecute nuevamente el comando
kubectl describe hpa <HPA-name>para ver el estado del escalado horizontal.El siguiente resultado indica que el HPA se está ejecutando correctamente.
Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 5m6s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
Operaciones relacionadas
Si el comportamiento de escalado predeterminado no satisface sus requisitos empresariales, puede utilizar el campo behavior para configurar los comportamientos de reducción (scaleDown) y aumento (scaleUp) con una granularidad más fina. Para obtener más información, consulte Comportamiento de escalado configurable.
Los escenarios típicos para behavior incluyen, entre otros:
Escalado horizontal rápido durante picos repentinos de tráfico.
Escalado horizontal rápido pero reducción lenta para cargas de trabajo con fluctuaciones frecuentes.
Deshabilitar la reducción horizontal para aplicaciones sensibles al estado.
En escenarios con recursos limitados o sensibles a costos, la ventana de estabilización
stabilizationWindowSecondslimita la tasa de escalado horizontal para reducir los ajustes frecuentes causados por fluctuaciones temporales.
Para obtener una descripción y ejemplos de la configuración de behavior, consulte Tune HPA scaling sensitivity.
Preguntas frecuentes
Documentación relacionada
Otras operaciones relacionadas
Para implementar el escalado automático horizontal de pods basado en métricas de componentes de Alibaba Cloud mediante Kubernetes External Metrics, consulte Horizontal Pod Autoscaling based on Nginx Ingress metrics.
Para convertir métricas de Managed Service for Prometheus en métricas compatibles con HPA, consulte Horizontal Pod autoscaling based on metrics from Managed Service for Prometheus.
Para la solución de problemas de HPA, consulte Node auto scaling FAQ.
Si necesita coordinar CronHPA y HPA, consulte Use CronHPA with HPA.
Otras soluciones de escalado de cargas de trabajo
Si su aplicación tiene patrones periódicos de uso de recursos y necesita escalar pods según una programación, consulte Use CronHPA for scheduled horizontal scaling.
Si el uso de recursos de su aplicación presenta cambios cíclicos difíciles de definir mediante reglas, puede utilizar AHPA para identificar automáticamente patrones de carga de trabajo basados en métricas históricas y realizar el escalado automático de Pods. Para obtener más información, consulte Auto Scaling Prediction (AHPA).
Para establecer automáticamente límites de recursos para los pods según su uso de recursos, consulte Use Vertical Pod Autoscaler (VPA).
Para crear directivas de escalado flexibles basadas en eventos de colas de mensajes, programaciones o métricas personalizadas, consulte Event-driven autoscaling.
Soluciones combinadas
Puede utilizar HPA junto con la función de escalado automático de nodos para escalar automáticamente los nodos del clúster cuando los recursos sean insuficientes. Para obtener más información, consulte Enable node auto scaling.