mrkeyoor.com_
Mon 28 Sept 23:24 UTC
Automationevaluationupdated 26 Aug 2026

keda review

KEDA adds event-driven autoscaling to Kubernetes, including scaling workloads down to zero and back up when an external signal changes. It exposes those signals through Kubernetes metrics and works with the Horizontal Pod Autoscaler, so operators define scaling behavior with custom resources instead of writing a controller for each queue or service.

+2stars / 7d
Verdict

Our KEDA build took 273 seconds, and the test command finished with 20 of 23 packages passing, so the code built but the pinned checkout did not clear its plain sandbox suite. Use KEDA when event backlogs should control Kubernetes capacity and your platform team can own the credentials, failure modes, and upgrade notes. Stay with HPA for simple resource scaling, and prove every chosen scaler against a staging event source before trusting scale to zero.

We ran it

Lab card: what happened when we ran kedaScreenshot of keda (keda.sh)
Install✓ · 144s902 packages
Build✓ · 273s
Tests✗ · 80s20 passed · 3 failed of 23 (go test)
Repo761 files~176,147 lines of source · 8.8 MB · 22 CI workflows · Dockerfile · tests dir

Answers from our run

Does keda build from source?

Dependencies installed in 144 seconds (902 packages), and the build succeeded in 273 seconds. We cloned commit 8b4f083 into a clean Debian container with 3 CPUs and no project-specific setup.

Do keda's tests pass?

Not all of them: 20 of 23 passed and 3 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use keda?

Teams without Kubernetes: KEDA is an operator, metrics server, admission webhook, and set of custom resources for a cluster.

What are the alternatives to keda?

Kubernetes HPA, Knative Serving, Prometheus Adapter. Our KEDA build took 273 seconds, and the test command finished with 20 of 23 packages passing, so the code built but the pinned checkout did not clear its plain sandbox suite.

Setup2/5Build works, but cluster services and trigger credentials are required
Docs5/5Deployment, build, debugging, tests, and policy are documented
Community5/510,471 stars with daily issue and pull request activity
Maturity5/5CNCF graduated, v2.20.2, and extensive CI infrastructure

Who it’s for

Kubernetes platform teams that need workloads to react to queues, streams, databases, or monitoring metrics.
Operators who want scale-to-zero behavior without replacing the Horizontal Pod Autoscaler.
Organizations prepared to manage trigger credentials and test scaling against their own event source.
Contributors who need a mature operator with unit, integration, and end-to-end testing infrastructure.

Who it’s NOT for

Teams without Kubernetes: KEDA is an operator, metrics server, admission webhook, and set of custom resources for a cluster.
Workloads served only by HTTP requests: Knative Serving may be a narrower fit for request-driven scale to zero.
Operators who cannot grant access to external systems: most useful scalers need broker, cloud, database, or monitoring credentials.
GitHub Actions fleets with runs above 100 jobs unless they verify the pagination fix: pull request 7973 says later jobs were not counted.
Cosmos DB change-feed users on current .NET or Java version-1 EPK leases: issue 8088 says those lease formats can cause missing metrics or failure to scale from zero.

Setup reality

Our sandbox installed 902 Go packages in 144 seconds. The build succeeded in 273 seconds. Tests exited 1 after 80 seconds: 20 passed and 3 failed out of 23. The supplied log tail showed several packages passing or having no tests, then the overall FAIL; it did not identify the three failed packages.

Using KEDA requires a Kubernetes cluster, its custom resources, and credentials for each external event source. Helm, Operator Hub, and YAML deployment paths are documented. Local operator debugging also needs generated TLS certificates, a kubeconfig, deployed CRDs, and Metrics Server.

The 761-file checkout included 22 CI workflow files, a Dockerfile, and a tests directory. Full end-to-end coverage depends on Kubernetes clusters and real cloud resources, so a plain go test run is useful but does not reproduce the project's complete CI environment.

KEDA turns an event backlog into a Kubernetes scaling signal

KEDA watches an external signal, reports a metric to Kubernetes, and lets the Horizontal Pod Autoscaler adjust replicas. Its ScaledObject custom resource links a deployment or other target to a trigger. ScaledJob handles work that should create jobs rather than resize a long-running service. The practical gain is scale to zero: an idle consumer can disappear, then return when a queue or metric crosses the configured threshold.

This belongs in the cluster control plane, not inside application code. KEDA runs an operator, metrics API server, and admission webhooks. Applications can remain ordinary containers while the operator talks to the event source. That separation is attractive when many teams use the same queue or cloud system, but it gives the platform team responsibility for trigger authentication, metric errors, polling, cooldowns, and the behavior of zero replicas.

Scale to zero is useful only when the activation path works

The dangerous moment is the first replica. A normal HPA can read pod metrics once pods exist, while an idle KEDA workload may have none. KEDA has to obtain the external signal, expose it correctly, and create capacity without help from the application. Test that path with the real broker, credentials, network policy, and an empty deployment. A configuration that scales 3 replicas to 10 can still fail at 0 to 1.

Current issue 8088 gives a concrete example. Version-1 Effective Partition Key leases written by modern .NET and Java Cosmos DB change-feed processors are not handled by the existing scaler path described there. The report says the wrong partition identifier can lead to missing metrics or scale-from-zero failures. If that exact lease format is in use, the scaler is not ready merely because a legacy lease test passes.

What happened when we ran it

Our sandbox installed 902 Go packages in 144 seconds and built KEDA in 273 seconds. The test command ran for 80 seconds, then exited with code 1. Its summary recorded 20 passing and 3 failing packages out of 23. These measurements came from commit 8b4f083 in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and Go 1.24.

The provided end of the log lists successful scaling packages, utility tests passing in 1.632 seconds, and several directories with no test files. It then prints only the overall FAIL. That tail does not name the three failed packages or show their assertions, so assigning a cause would be guesswork. The useful finding is limited: installation and compilation completed, while the plain test command did not pass on our box.

KEDA's own testing guide describes a wider system than our 80-second run. Pull requests run unit checks, build AMD64 and ARM64 images, and receive security and license checks. Maintainers trigger end-to-end tests, with nightly runs against Kubernetes and cloud resources in Azure, AWS, and Google Cloud. The repository included 22 CI workflow files, a Dockerfile, and a tests directory.

Local development needs certificates and a real cluster

The README points most users toward Helm, Operator Hub, or published YAML. Source contributors can use a VS Code development container or run make build with the Operator SDK version pinned by the project tooling. Running the operator outside a cluster works on Linux and macOS, but the build guide still asks for CRDs and KEDA components inside Kubernetes. It also requires local TLS certificates because the components encrypt their HTTP communication.

A full local session deploys Metrics Server, installs the CRDs, scales the in-cluster operator to 0 replicas, and starts the developer's operator against a kubeconfig. The guide separately documents the metrics server and admission webhooks. That is appropriate for control-plane software, though it means the 273-second successful build is a compile check rather than a usable demonstration. Credentials and reachable event sources still determine whether a scaler produces sensible data.

A large scaler catalog creates specific failure modes

KEDA's appeal is breadth across queues, streams, cloud services, databases, and monitoring systems. Each integration also carries its source system's authentication and semantics. Null values, partition formats, pagination, rate limits, and delayed metrics can change scaling. Open pull request 7973 describes the GitHub Runner scaler stopping after the first 100 jobs because it did not request later pages. The proposed regression case uses a 150-job run with 50 jobs still queued.

This is why choosing KEDA should start with one workload, not an organization-wide install mandate. Define what metric means work, what happens when the source is unreachable, how long zero-to-one may take, and which secret identity can read the signal. Observe both KEDA conditions and the HPA. A green operator pod does not prove that a particular trigger counts work correctly.

v2.20.2 fixes panics, reconnect loops, and wrong metrics

GitHub showed 10,471 stars, 245 combined issues and pull requests, and a last push on August 26, 2026. Release v2.20.2 was published July 31. Its fixes include several nil-pointer and cache-race panics, a concurrent map-write panic, a gRPC reconnect loop with no backoff, lost events RBAC, leaked MongoDB connections, and negative external metric handling. That list reads like production operator maintenance rather than cosmetic churn.

The same release warns users upgrading from before v2.20.0 to read the earlier upgrade notes. Treat that as part of deployment, especially because KEDA manages custom resources and participates in scaling decisions. Apache-2.0 licensing, CNCF graduated status, active issue work, and end-to-end infrastructure support a high maturity score. The failed 20-of-23 sandbox result still deserves investigation before changing or embedding the source build.

Alternatives

ProjectWhat it isPick it when
Kubernetes HPA gh↗The built-in Horizontal Pod Autoscaler scales workloads from resource or custom metrics.pick this instead when CPU, memory, or an existing custom-metrics pipeline covers the workload and scale to zero is unnecessary.
Knative ServingA Kubernetes serving layer built around request-driven workloads and scale to zero.pick this instead when inbound HTTP traffic is the main signal and you also want a serverless request layer.
Prometheus AdapterAn adapter that exposes Prometheus data through Kubernetes custom metrics APIs.pick this instead when all scaling signals already live in Prometheus and native HPA behavior is enough.

What people are saying

  1. [github-trending] kedacore/keda

Sources

  1. KEDA README
  2. KEDA build and deployment guide
  3. KEDA testing strategy
  4. KEDA v2.20.2 release
  5. GitHub Runner pagination pull request
  6. Cosmos DB EPK lease issue

More automation reviews

fable-orchestrator · DLSS5-Swapper · runner-images · agent-fleet-manager · kargo · Rose · the whole board →