¿Qué es el Cluster Autoscaler de Kubernetes?
El Cluster Autoscaler de Kubernetes es un componente open-source diseñado para ajustar automáticamente el tamaño de un clúster de Kubernetes según la demanda actual de los workloads. Funciona monitoreando los pods que no logran programarse por falta de recursos y, cuando es necesario, amplía el clúster agregando más nodos. Por el contrario, identifica los nodos subutilizados y reduce el clúster eliminando los que no se necesitan, lo que garantiza un uso óptimo de los recursos y una mayor eficiencia de costos.
Este escalado dinámico ayuda a mantener una alta disponibilidad y un buen rendimiento sin intervención manual. El Cluster Autoscaler es compatible con varios proveedores de nube, incluidos AWS, Azure y Google Cloud, y se integra sin fricciones con sus servicios administrados de Kubernetes. Utiliza las APIs específicas de cada proveedor para aprovisionar y dar de baja nodos según se requiera, lo que permite a las organizaciones responder en tiempo real a los cambios en los patrones de tráfico.
Este artículo forma parte de una serie sobre el autoescalado en Kubernetes
En este artículo:
- ¿Qué son los Helm charts?
- Tutorial: primeros pasos con el Cluster Autoscaler y su Helm Chart
- Buenas prácticas para el Helm Chart del Cluster Autoscaler
¿Qué son los Helm charts?
Los Helm charts son paquetes estandarizados para aplicaciones de Kubernetes que contienen todos los manifiestos YAML y las plantillas necesarias para definir, configurar y desplegar workloads complejos. Simplifican el proceso de despliegue al agrupar los recursos de la aplicación, sus dependencias y los valores de configuración en un único artefacto reutilizable. Los Helm charts se pueden:
- Versionar
- Compartir
- Almacenar en repositorios
Con los Helm charts, los equipos pueden automatizar la instalación, la actualización y el rollback de aplicaciones, lo que reduce el riesgo de errores humanos y garantiza la consistencia entre entornos. El motor de plantillas de Helm permite despliegues personalizables: los usuarios pueden sobrescribir los valores predeterminados mediante un archivo de valores o argumentos de línea de comandos.
Guía rápida: ejecuta el Cluster Autoscaler con Helm Chart
Requisitos previos del Helm Chart del Cluster Autoscaler
Antes de instalar el chart del Cluster Autoscaler, asegúrate de usar Helm 3+ y Kubernetes 1.35.x o posterior. Azure AKS requiere Kubernetes 1.10 o posterior con RBAC habilitado.
El Cluster Autoscaler simula internamente el comportamiento del scheduler de Kubernetes. Aunque otras versiones de Kubernetes podrían funcionar si se sobrescribe la imagen del contenedor, las versiones no coincidentes pueden introducir problemas sutiles de programación de pods. El chart actual usa la versión v2 de la API de Helm charts, por lo que las versiones de Helm anteriores a la 3 no son compatibles.
Si estás migrando desde una versión 1.X de cluster-autoscaler-chart, desinstala esa release antes de instalar cluster-autoscaler versión 9.0.0 o posterior. Las releases 1.X del chart están obsoletas.
Paso 1: Agrega el repositorio Helm del Cluster Autoscaler
El chart del Cluster Autoscaler se instala desde la ruta autoscaler/cluster-autoscaler. Antes de la instalación, asegúrate de que el repositorio que contiene este chart esté configurado en tu entorno de Helm.
El chart no crea un despliegue de autoescalado funcional solo con sus valores predeterminados. Durante la instalación, debes configurar la detección automática de grupos de nodos (auto-discovery) o grupos de nodos estáticos. No se recomienda usar ambos enfoques a la vez.
Con auto-discovery, define autoDiscovery.clusterName y los valores específicos del proveedor que se requieran. Para la configuración estática, define uno o más grupos mediante autoscalingGroups o autoscalingGroupsnamePrefix.
Paso 2: Cómo instalar el Cluster Autoscaler con Helm
Instala el chart con helm install y proporciona la configuración que requiere tu proveedor de nube. Para configuraciones almacenadas en un archivo de valores, usa:
helm install my-release autoscaler/cluster-autoscaler -f myvalues.yaml
Tus valores deben identificar los grupos de nodos que el autoscaler puede administrar. Puedes configurar la detección automática con autoDiscovery.clusterName, o definir explícitamente los grupos con sus tamaños mínimo y máximo.
Después de la instalación, revisa los logs del autoscaler para confirmar que su bucle principal esté en ejecución. Si no lo está, inspecciona el pod generado y verifica los argumentos que se pasan al comando cluster-autoscaler.
Paso 3: Instala el Cluster Autoscaler en AWS con Helm
En AWS, el Cluster Autoscaler puede detectar automáticamente los Auto Scaling Groups (ASG). Etiqueta cada ASG administrado con las claves k8s.io/cluster-autoscaler/enabled y k8s.io/cluster-autoscaler/<CLUSTER NAME>. Solo las claves de las etiquetas son relevantes.
Luego instala el chart con el nombre del clúster y la región de AWS:
helm install my-release autoscaler/cluster-autoscaler \
--set autoDiscovery.clusterName=<CLUSTER NAME> \
--set awsRegion=<YOUR AWS REGION>
También puedes proporcionar awsAccessKeyID y awsSecretAccessKey durante la instalación. En Amazon EKS, una alternativa es asociar la cuenta de servicio del autoscaler con un rol de IAM y pasar su ARN mediante la anotación de la cuenta de servicio.
Si no quieres usar auto-discovery, especifica los ASG manualmente:
helm install my-release autoscaler/cluster-autoscaler \
--set "autoscalingGroups[0].name=your-asg-name" \
--set "autoscalingGroups[0].maxSize=10" \
--set "autoscalingGroups[0].minSize=1"
El worker que ejecuta el autoscaler debe tener los permisos de IAM necesarios para inspeccionar y modificar los recursos de AWS Auto Scaling correspondientes.
Contenido relacionado: Lee nuestra comparativa de Karpenter vs. Cluster Autoscaler
Paso 4: Actualiza el Helm Chart del Cluster Autoscaler
Al actualizar instalaciones antiguas, ten en cuenta los cambios de versión del chart. Las releases a partir de la versión 9.0.0 usan el nombre de chart cluster-autoscaler. Para migrar desde una release obsoleta 1.X de cluster-autoscaler-chart, primero desinstala la instalación 1.X existente y luego instala la versión 9.0.0 o posterior.
La versión 9.1.0 también cambia el significado de envFromConfigMap. Debe contener el nombre de un ConfigMap referenciado por envFrom. Las configuraciones que dependen del comportamiento anterior de envFromConfigMap deben renombrar ese ajuste a extraEnvConfigMaps.
Como referencia, una release se puede eliminar con:
helm uninstall my-release
Esto elimina los componentes de Kubernetes asociados a esa release de Helm. Antes de cambiar de versión, revisa los valores de configuración que puedan haber cambiado entre la versión instalada y la versión de destino del chart.
Buenas prácticas para el Helm Chart del Cluster Autoscaler
A continuación, algunas prácticas importantes que conviene tener en cuenta al trabajar con el Cluster Autoscaler y sus Helm charts.
1. Aplica right-sizing a las requests de CPU y memoria
Aplicar right-sizing a las requests de CPU y memoria de tus workloads es esencial cuando se usa el Cluster Autoscaler. Si las requests son demasiado altas, el scheduler puede sobreaprovisionar nodos, lo que genera pérdida de recursos y mayores costos. Por el contrario, definir requests demasiado bajas implica riesgo de contención de recursos y posible inestabilidad de la aplicación.
Acciones clave:
- Analiza el uso histórico de recursos y define las requests y los límites según las necesidades reales, en lugar de valores predeterminados o suposiciones.
- Revisa y ajusta estos parámetros con regularidad a medida que los workloads evolucionan.
- Usa herramientas de monitoreo de Kubernetes para observar el consumo de recursos en tiempo real e identificar oportunidades de optimización.
Unas requests de recursos precisas mejoran la eficiencia del autoscaler: se agregan nodos nuevos solo cuando es realmente necesario y los recursos existentes se aprovechan de forma efectiva.
2. Trata el rightsizing de workloads y el autoescalado de nodos como un solo sistema
El rightsizing de los workloads y el autoescalado de nodos no deben gestionarse por separado. Los cambios en las requests de recursos de las aplicaciones impactan directamente en cómo el autoscaler escala el clúster. Si los workloads están sobreaprovisionados de forma constante, el autoscaler agregará nodos innecesariamente, mientras que el subaprovisionamiento puede provocar pods imposibles de programar y un rendimiento degradado. Coordinar estos procesos ayuda a mantener el equilibrio entre la disponibilidad de recursos y el costo.
Acciones clave:
- Implementa herramientas o políticas automatizadas que ajusten en conjunto las requests de los workloads y los tamaños de los grupos de nodos.
- Garantiza una comunicación constante entre los equipos de desarrollo y operaciones para que las decisiones de escalado reflejen las necesidades reales de las aplicaciones.
Al tratar el rightsizing y el autoescalado como procesos interconectados, se logra un mejor aprovechamiento de los recursos, mayor estabilidad de las aplicaciones y más eficiencia de costos.
Contenido relacionado: Lee nuestra guía sobre el Kubernetes Vertical Pod Autoscaler
3. Revisa el uso de recursos de forma continua
El monitoreo continuo del uso de recursos es fundamental para mantener una configuración de autoescalado eficiente. Las asignaciones estáticas de recursos quedan obsoletas rápidamente a medida que cambia la demanda de las aplicaciones, lo que genera ineficiencias o problemas de rendimiento. Analizar los datos de uso con regularidad te permite ajustar con criterio las requests de los workloads y la configuración del autoscaler.
Acciones clave:
- Usa dashboards de Kubernetes y plataformas de monitoreo para seguir la utilización de CPU, memoria y nodos a lo largo del tiempo.
- Establece un proceso de revisión periódica, como auditorías mensuales o alertas automáticas ante patrones de uso anómalos.
- Responde con rapidez a los cambios en el consumo de recursos para evitar el sobreaprovisionamiento y garantizar que el clúster escale de forma adecuada.
La revisión continua favorece un enfoque proactivo, reduce los costos operativos y mantiene un entorno con buena capacidad de respuesta.
4. Diseña los grupos de nodos para un bin packing eficiente
Un bin packing eficiente consiste en acomodar los workloads en los nodos de manera que se maximice el aprovechamiento de los recursos y se minimice la pérdida. Al diseñar los grupos de nodos, es importante elegir tipos y tamaños de instancias que se alineen con el perfil de tus workloads.
Acciones clave:
- Evita nodos demasiado grandes o demasiado pequeños que provoquen fragmentación o subutilización de recursos.
- Agrupa workloads similares para favorecer patrones de uso más predecibles y simplificar la configuración del autoscaler.
- Ajusta la configuración de los grupos de nodos a medida que tus aplicaciones evolucionan.
- Monitorea cómo se distribuyen los workloads e identifica oportunidades para consolidar o dividir grupos de nodos y lograr un mejor empaquetado.
Un bin packing eficiente reduce la cantidad total de nodos necesarios, optimiza el rendimiento del autoscaler y disminuye los costos de infraestructura al aprovechar al máximo los recursos disponibles.
5. Asegúrate de que el HPA y el Cluster Autoscaler trabajen en conjunto
El Horizontal Pod Autoscaler (HPA) y el Cluster Autoscaler deben configurarse para trabajar en armonía y garantizar un escalado óptimo. El HPA ajusta la cantidad de pods según las métricas de los workloads, mientras que el Cluster Autoscaler administra los nodos subyacentes. Si el HPA escala los pods más allá de la capacidad de nodos disponible, el Cluster Autoscaler debe poder agregar nodos con la rapidez suficiente para alojarlos. Las configuraciones desalineadas pueden provocar fallas en la programación de pods o asignaciones de recursos innecesarias.
Acciones clave:
- Coordina las políticas y los umbrales de escalado entre el HPA y el Cluster Autoscaler.
- Monitorea la interacción entre ambos, usando métricas y logs para identificar cuellos de botella o demoras en las acciones de escalado.
- Ajusta los objetivos del HPA y los parámetros del Cluster Autoscaler para lograr un escalado equilibrado y con buena capacidad de respuesta.
Garantizar que ambos componentes trabajen en conjunto reduce el tiempo de inactividad, mejora la disponibilidad de las aplicaciones y favorece un uso eficiente de los recursos.
Maximiza la eficiencia del Cluster Autoscaler con PerfectScale
Los autoscalers de nodos como Cluster Autoscaler y Karpenter amplían y reducen la cantidad de nodos según la demanda, lo que mejora la disponibilidad del clúster y reduce los costos por capacidad ociosa. Pero incluso un autoscaler bien configurado se topa con límites cuando los workloads que corren sobre él están mal configurados: los contenedores sobreaprovisionados malgastan capacidad y obligan al autoscaler a agregar más nodos de los necesarios, los contenedores subaprovisionados provocan expulsiones de pods y presión sobre los nodos, y un bin packing ineficiente deja recursos subutilizados mientras dispara eventos de escalado innecesarios. PerfectScale aborda estos problemas a nivel de workload y de nodo, para que tu configuración de autoescalado realmente ofrezca la eficiencia que promete.
Capacidades clave de PerfectScale para el autoescalado en Kubernetes:
- Detección proactiva de errores de configuración: Analiza los workloads de forma continua para identificar y corregir errores de configuración como CPU Request Not Set, Memory Request Not Set y Memory Limit Not Set, lo que evita expulsiones impredecibles, sobrecompromiso de nodos y un autoescalado ineficiente.
- Right-sizing autónomo de workloads: Ajusta al instante los recursos de los workloads según su utilización real y mejora el bin packing de los pods para aumentar la eficiencia del autoescalado, sin intervención manual.
- Visibilidad de grupos de autoescalado y pools de nodos: Brinda visibilidad sobre los costos y la utilización de tus grupos de autoescalado y pools de nodos, para que puedas detectar ineficiencias en todo el clúster.
- Selección óptima del tipo de nodo: Te ayuda a elegir tipos de nodo que mejoran la utilización, logran una distribución precisa de los recursos y maximizan la eficiencia de costos.
- Compatibilidad amplia con autoscalers: Funciona junto a Karpenter, Cluster Autoscaler y Node Auto Provisioning, combinando la optimización a nivel de nodo con el rightsizing a nivel de pod para un mejor bin packing y decisiones de escalado más rápidas.
Descubre cómo maximizar el autoescalado de nodos de Kubernetes con PerfectScale