Configurando el autoescalado (HPA) en Kubernetes
|El autoescalado en Kubernetes te permite ajustar automáticamente el número de réplicas de un pod en función del uso de recursos y de la carga de trabajo de la aplicación. Esto puede ayudar a asegurar que la aplicación tenga suficiente capacidad para manejar la carga de trabajo, evitar el sobreprovisionamiento innecesario y reducir los costos. En otras palabras, con el autoescaling podemos hacer que el cluster crezca a demanda, es decir que aumente sus recursos cuando haya mucha carga de trabajo, esto es util para aquellas aplicaciones que tienen ciertos picos de trafico y que necesitan escalar para mantener operativo el servicio siempre. Una vez los picos de carga de trabajo vuelvan a la normalidad, con el autoscaling tambien los recursos volveran a su estado normal. esto tambien es util para ahorrar mucho dinero en recursos.
En Kubernetes, hay dos tipos principales de autoescalado: autoescalado horizontal y autoescalado vertical.
Autoescalado hortizontal
El autoescalado horizontal es el tipo más común y se refiere a ajustar el número de réplicas de un pod en función de la carga de trabajo y el uso de recursos. Esto se puede hacer utilizando un objeto de configuración de tipo HorizontalPodAutoscaler
(HPA), que se encarga de monitorear continuamente la carga de trabajo y el uso de recursos y de ajustar el número de réplicas según sea necesario.
Autoescalado vertical
El autoescalado vertical, por otro lado, se refiere a ajustar la cantidad de recursos (como CPU y memoria) que se asignan a un pod en función de la carga de trabajo y el uso de recursos. Esto se puede hacer utilizando un objeto de configuración de tipo VerticalPodAutoscaler
(VPA), que se encarga de monitorear continuamente la carga de trabajo y el uso de recursos y de ajustar la asignación de recursos según sea necesario.
Es importante tener en cuenta que el autoescalado horizontal y vertical son complementarios y se pueden utilizar juntos para ajustar tanto el número de réplicas como la cantidad de recursos asignados a un pod. Además, Kubernetes también proporciona características avanzadas de autoescalado, como el autoescalado de nodos y el autoescalado de clústeres, que permiten ajustar el tamaño del clúster en función de la carga de trabajo y el uso de recursos.
Configurar Horizontal Autoscaling
Para configurar el autoescalado en Kubernetes, necesitarás crear un objeto de configuración de tipo HorizontalPodAutoscaler
(HPA). El HPA utiliza una especificación de plantilla para definir cómo se deben ajustar las réplicas de pod en función del uso de recursos.
Aquí tienes un ejemplo de una especificación de plantilla para un HPA que ajusta el número de réplicas de un pod en función del uso de CPU:
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: my-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-deployment minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50
En este ejemplo, el HPA está configurado para ajustar el número de réplicas del deployment my-deployment
en función del uso promedio de CPU. Si el uso de CPU supera el 50%
Ademas del uso de CPU, se pueden usar otras metricas como consumo de memoria, horario, o incluso requests, aqui un ejemplo para un HPA que ajusta el número de réplicas de un pod en función de la carga de trabajo de un servicio de Kubernetes:
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: my-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-deployment minReplicas: 2 maxReplicas: 10 metrics: - type: Pods pods: metricName: requests targetAverageValue: 100 selector: matchLabels: app: my-app
En este ejemplo, el HPA está configurado para ajustar el número de réplicas del deployment my-deployment
en función de la carga de trabajo del servicio my-app
. Si la carga de trabajo supera el valor objetivo de 100 solicitudes por segundo, el HPA aumentará el número de réplicas de pod para aumentar la capacidad.
Para utilizar este HPA, necesitarás tener un servicio my-app
configurado en el clúster de Kubernetes y asegurarte de que los pods del deployment my-deployment
estén etiquetados con la etiqueta `app: my-app `
De esta manera se pueden hacer reglas, combinar métricas, y ajustar el escalado dependiendo de cada escenario y cada aplicación.