Con KEDA Kubernetes añades autoscaling basado en eventos externos (colas, métricas personalizadas, cron) sin reemplazar el HPA clásico: complementas el cluster con controladores que escalan Deployments o Jobs según carga real fuera del CPU. Es la pieza habitual cuando RabbitMQ, Kafka o métricas de Prometheus deben disparar réplicas antes de que suba el uso de CPU.
- Qué obtienes: instalación con Helm,
ScaledObjectde ejemplo y triggers frecuentes. - Qué necesitas: cluster compatible, métricas server si usas Prometheus y permisos para CRDs.
- Salida práctica: escalado reactivo al backlog sin sobreaprovisionar pods ociosos.
Contenido
KEDA Kubernetes: concepto y cuándo encaja en tu plataforma
KEDA Kubernetes (Kubernetes Event-driven Autoscaling) actúa como capa sobre el Horizontal Pod Autoscaler cuando la señal de escala no es solo CPU/memoria. Integra decenas de scalers oficiales para colas, bases de datos, cloud providers y Prometheus. El operador crea objetos como ScaledObject o ScaledJob y gestiona la referencia al Deployment o StatefulSet objetivo.
Si ya automatizas entregas con ArgoCD Kubernetes, añadir manifiestos de KEDA en el mismo repositorio mantiene el mismo flujo GitOps. Cuando empaquetas aplicaciones con Helm Kubernetes, puedes exponer valores para mínimos, máximos y tipo de trigger sin duplicar YAML en cada servicio.
El proyecto es CNCF y se instala típicamente vía Helm en el namespace keda. No sustituye al scheduler ni al VPA: combina con HPA generado internamente para respetar límites de réplicas declarados. La documentación oficial de KEDA lista scalers y parámetros; úsala como fuente de verdad de versión. Para comparar con otros patrones de elasticidad del ecosistema, revisa también las guías generales de la documentación de cargas de trabajo en kubernetes.io.
Requisitos: cluster, métricas y permisos
Necesitas Kubernetes ≥1.26 en la práctica para combinaciones recientes de KEDA y APIs estables. Habilita el API server accesible y RBAC coherente: KEDA crea CRDs y controladores que observan namespaces completos o seleccionados con watch. Si consumes métricas de Prometheus, un stack como el descrito en Prometheus Kubernetes debe exponer el endpoint consultable por el scaler.
Para secretos de cloud (SQS, Azure Queue, GCP Pub/Sub) usa Secret referenciados en el ScaledObject; evita variables en claro en Git. Si tu organización exige certificados gestionados, alinea la rotación TLS con Cert-Manager Kubernetes antes de exponer webhooks que validen cargas de trabajo escaladas.
En equipos que combinan despliegues declarativos y revisión de políticas, resulta útil validar en CI que cada nuevo servicio expone al menos un dashboard mínimo de cola o métrica antes de activar KEDA Kubernetes en producción: evita escalar “a ciegas” sobre queries mal construidas.
Revisa límites de cuota de réplicas y de nodos: KEDA Kubernetes puede llevar rápidamente un despliegue de 2 a 50 pods si la cola crece; sin límites en el maxReplicaCount o sin ResourceQuota, un error de configuración dispara coste o presión en el plano de datos.
Antes de producción, valida también el impacto en sistemas externos: cada nueva réplica puede abrir más conexiones a bases de datos o brokers. Coordina con los propietarios de esos servicios para pools de conexión y límites de consumidores; el autoscaler solo conoce la métrica que le configuras, no el techo operativo del backend compartido.
Instalar KEDA Kubernetes con Helm
Añade el repositorio y instala en un namespace dedicado. Ejemplo mínimo acorde a la guía de Helm del blog:
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda --namespace keda --create-namespace
Verifica pods del operador y CRDs con kubectl get crd | grep keda. Si usas políticas de admisión, permite crear ScaledObject y TriggerAuthentication en namespaces de aplicación; Kyverno Kubernetes puede exigir etiquetas estándar en esos recursos para auditoría.
Actualiza con valores explícitos de imagen y recursos del operador en entornos prod; el repositorio kedacore/keda en GitHub publica notas de release y CVE. Mantén alineada la versión del chart con la tabla de compatibilidad del sitio oficial.
Puedes fijar recursos del controlador y afinar el número de réplicas del despliegue del operador si gestionas muchos ScaledObject en un solo cluster. En clusters con cientos de namespaces, habilita selectores o instala varias instancias con alcance limitado solo si la documentación de tu versión lo soporta; la configuración por defecto suele bastar hasta escalas medianas.
El proyecto forma parte del ecosistema CNCF; la ficha KEDA en CNCF resume estado de incubación y enlaces comunitarios. Úsala para justificar adopción ante comités de arquitectura que pidan trazabilidad de proyectos respaldados.
KEDA Kubernetes: ScaledObject, triggers y autenticación
El recurso central es ScaledObject. Define el workload, límites de réplicas y uno o varios triggers. Puedes fijar idleReplicaCount para bajar a cero en entornos de bajo tráfico si el arranque en frío es aceptable; en servicios interactivos suele preferirse un mínimo >0 para evitar latencias de cold start. El campo fallback ayuda cuando la métrica desaparece temporalmente: define comportamiento seguro en vez de dejar réplicas indefinidas.
Ejemplo con métrica Prometheus (sustituye la query por la tuya):
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: worker-so
namespace: app
spec:
scaleTargetRef:
name: worker
minReplicaCount: 1
maxReplicaCount: 20
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus-kube-prometheus-prometheus.monitoring:9090
metricName: queue_depth
query: sum(my_queue_depth)
threshold: "10"
Para colas gestionadas por el cloud, el scaler correspondiente pide credenciales vía TriggerAuthentication o pod identity. Centraliza secretos y rota claves con el mismo proceso que el resto del cluster. Cuando el trigger depende de una métrica interna, valida latencia de scrape: si Prometheus va retrasado, KEDA Kubernetes puede escalar tarde; ajusta intervalos o usa métricas de baja cardinalidad.
Si combinas varios triggers en un solo objeto, recuerda que la decisión de escala debe seguir siendo comprensible para quien esté de guardia: demasiadas señales simultáneas dificultan el diagnóstico. Prioriza una métrica de negocio clara y usa triggers adicionales solo cuando aporten información no redundante.
El patrón ScaledJob es útil para cargas batch que deben crear Jobs por mensaje; revisa límites de concurrencia para no saturar APIs externas. La referencia de escalado horizontal genérica de Kubernetes sigue siendo valiosa en Horizontal Pod Autoscaling en kubernetes.io para contrastar comportamiento con métricas de recursos.
GitOps, namespaces y política de mínimos
Versiona cada ScaledObject junto al chart de la aplicación. En pipelines que ya usan Argo CD, separa valores por entorno: umbrales más agresivos en preproducción, máximos más bajos en desarrollo compartido. Documenta en el README del servicio qué métrica o cola dispara el escalado para que soporte no tenga que leer el chart entero.
Evita duplicar escalado: si defines HPA manual y KEDA sobre el mismo scaleTargetRef, compiten. La práctica recomendada es dejar que KEDA Kubernetes genere el HPA asociado o usar un solo mecanismo. Para revisiones de seguridad, alinea etiquetas obligatorias con políticas Kyverno y revisa que los ServiceAccounts usados por los scalers tengan permisos mínimos en colas externas.
En revisiones de cambio, incluye captura del ScaledObject y del query o parámetros del scaler: facilita rollback y entendimiento para quien no escribió el manifiesto. Si compartes cluster con equipos de datos, coordina nombres de métricas en Prometheus para evitar colisiones que hagan que dos servicios lean accidentalmente la misma serie temporal.
KEDA Kubernetes: triggers Cron, Kafka y patrones híbridos
El scaler cron permite subir réplicas en ventanas predecibles (picos diarios) aunque la cola aún no haya crecido: combina con triggers basados en profundidad para no depender solo del reloj. Define zonas horarias explícitas para alinear con el negocio en Europe/Madrid u otras IANA, y documenta solapamientos si varios servicios escalan a la misma hora: el plano de nodos puede saturarse antes de que el autoscaler de cluster reaccione.
Para Kafka, los scalers oficiales leen lag de consumidor o longitud de partición según configuración; valida permisos ACL del ServiceAccount y latencia de red hacia brokers. En entornos multi-tenant, aísla topics y credenciales por namespace para que un ScaledObject defectuoso no lea métricas ajenas. Cuando mezclas señales (cron + cola), prueba en staging el orden de evaluación y el comportamiento en festivos: KEDA Kubernetes ejecuta la lógica del operador, pero la interpretación de “máximo necesario” sigue siendo responsabilidad del equipo.
Si migras desde un HPA basado únicamente en CPU, registra línea base de réplicas y percentiles de latencia antes del cambio; compara durante una semana para demostrar mejora o detectar regresiones. No elimines de golpe los dashboards antiguos: mantén paneles de réplicas y de profundidad de cola en el mismo tablero para correlación rápida.
Métricas, alertas y resolución de incidentes
Expone métricas del operador KEDA y correlaciónalas con réplicas efectivas y profundidad de cola. Configura alertas cuando maxReplicaCount se alcanza de forma sostenida o cuando el scaler falla al leer la métrica. El stack de Prometheus Kubernetes puede registrar reglas que detecten desincronía entre mensajes pendientes y pods listos.
Incluye runbooks: si la cola está vacía pero los pods no bajan, revisa cooldownPeriod y estados de error en el ScaledObject. Si escala demasiado rápido, aumenta estabilización o afiná umbrales. KEDA Kubernetes no reemplaza el dimensionamiento de nodos: si el cluster no tiene capacidad, las réplicas quedarán pendientes y deberás escalar el node pool por otros medios.
Los eventos del operador y los estados de cada scaler aparecen en logs estructurados: centralízalos junto al resto de la plataforma. Si usas tracing, correlaciónalo con IDs de despliegue para saber qué cambio de configuración precedió a un pico anómalo de réplicas. En incidentes de coste, la primera palanca suele ser bajar maxReplicaCount temporalmente mientras investigas la métrica errónea.
KEDA Kubernetes: diagnóstico de fallos habituales
Si el ScaledObject muestra estado degradado, inspecciona kubectl describe scaledobject -n app y los eventos del namespace: errores de autenticación hacia Prometheus o la cola suelen aparecer ahí antes que en los pods de aplicación. Valida conectividad desde el cluster hacia el endpoint de métricas y que el certificado no haya caducado fuera del ciclo de Cert-Manager Kubernetes.
Cuando las réplicas oscilan, revisa cardinalidad de la query y el intervalo de scrape: una métrica ruidosa provoca scaling continuo. Aumenta stabilizationWindowSeconds en el HPA generado o ajusta el trigger según la guía del scaler. Si nada escala pese a cola creciente, confirma que el nombre del scaleTargetRef coincide exactamente con el Deployment y que no hay otro recurso con prioridad que limite réplicas.
Tras actualizar el chart de KEDA Kubernetes, ejecuta pruebas de humo en un namespace no productivo: los CRD pueden cambiar entre versiones menores y conviene validar conversiones antes del despliegue global. Documenta la versión fijada en el lockfile de Helm para reproducibilidad.
FAQ sobre KEDA Kubernetes
¿KEDA sustituye al HPA?
No por completo: KEDA gestiona el HPA o métricas externas según el scaler; muchas instalaciones usan KEDA para la señal de negocio y siguen respetando límites de recursos del pod.
¿Funciona sin Prometheus?
Sí; depende del scaler. Hay integraciones para colas cloud, bases de datos y otros sistemas sin métricas internas del cluster.
¿Cómo pruebo en desarrollo?
Genera carga sintética en la cola o métrica de prueba y observa kubectl get hpa -n app y los eventos del ScaledObject.
¿Qué versión elegir?
Alinea chart KEDA con la tabla de compatibilidad del sitio oficial y con la versión de Kubernetes del proveedor.
¿Convive con VPA?
Son ortogonales: VPA ajusta requests; KEDA réplicas. Coordina para no provocar thrash si ambos reaccionan al mismo síntoma.
¿Qué hacer tras un incidente de sobreesclado?
Congela el cambio, conserva export de métricas y del ScaledObject, y abre acción correctiva: suele bastar con revisar umbral, ventana de estabilización o permisos del scaler antes de volver a subir el máximo de réplicas.
Implementar KEDA Kubernetes bien modelado reduce coste y latencia en cargas impulsadas por colas o métricas de negocio. Mantén umbrales revisados con datos reales, versiona manifiestos junto al código de aplicación y observa el comportamiento antes de subir maxReplicaCount en producción. Integra la revisión de escalado en las retrospectivas de incidentes: la mayoría de mejoras llegan afinando la métrica de negocio, no subiendo límites a ciegas. Con gobierno de métricas y revisiones periódicas, el operador se mantiene como una palanca estable de eficiencia.
