Skip to content

Keda HPA

๐Ÿš€ How KEDA Scales Workloads in Kubernetesยถ

KEDA (Kubernetes Event-driven Autoscaling) extends Kubernetes' native Horizontal Pod Autoscaler (HPA) to enable event-driven scaling based on external metrics and event sources, not just CPU or memory.

โš™๏ธ How KEDA Worksยถ

  1. Scalers
    KEDA uses scalers to monitor external sources (e.g., Kafka, RabbitMQ, Prometheus, AWS SQS, custom metrics).
  2. Metrics Adapter
    KEDA exposes these external metrics to Kubernetes via a metrics adapter.
  3. ScaledObject
    You define a ScaledObject resource that links your deployment to a scaler and specifies scaling rules.
  4. Autoscaling
    When the scaler detects activity (e.g., queue length, message count), KEDA updates the HPA for your deployment, triggering scale-out or scale-in as needed.
  5. Zero to N Scaling
    KEDA can scale deployments down to zero when there is no activity, and back up when events arrive.

KEDA vs. Native HPA

Native HPA only supports scaling based on CPU/memory or custom metrics available inside the cluster.
KEDA enables scaling based on external events, making it ideal for workloads like queue consumers or scheduled jobs.

๐Ÿ“Š Example: Scaling on Queue Lengthยถ

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: my-kafka-consumer
spec:
  scaleTargetRef:
    name: my-consumer-deployment
  minReplicaCount: 0
  maxReplicaCount: 10
  triggers:
    - type: kafka
      metadata:
        bootstrapServers: my-kafka:9092
        topic: my-topic
        consumerGroup: my-group
        lagThreshold: "100"
  • When lag > 100: KEDA increases pod replicas.
  • When lag is low: KEDA scales pods down to zero.

KEDA vs. Native HPA

Native HPA only supports scaling based on CPU/memory or custom metrics available inside the cluster. KEDA enables scaling based on external events and metrics, making it ideal for event-driven workloads.

๐Ÿ› ๏ธ Troubleshooting KEDA Scalingยถ

  • Ensure the KEDA operator is running in your cluster.
  • Check that your ScaledObject is correctly configured and references the right deployment.
  • Use kubectl get scaledobject and kubectl describe scaledobject <name> to inspect status and errors.
  • Review KEDA operator logs for detailed diagnostics.

Namespace Best Practices

Deploy KEDA in a dedicated namespace (e.g., keda) and ensure your workloads have the correct RBAC permissions for event sources.