Opportunities
Every workload ranked by estimated monthly savings, with the current, recommended and used values for CPU and memory, the confidence, and bulk actions.
Open-source Kubernetes rightsizing
Kerf sets CPU and memory requests and limits from real usage, prices the difference in dollars, and applies it with guardrails and automatic rollback. You run all of it in your own clusters.
Many clusters reserve far more CPU and memory than their pods use, and every reserved core is node capacity you pay for. Kerf reads each container's usage from your Prometheus or VictoriaMetrics, recommends requests and limits, and prices the difference per node type. When you allow it, Kerf applies the change and rolls it back if the workload gets unhealthy.
One Helm chart installs the hub, the web UI, the agents and the webhook. Usage data stays in your Prometheus and your PostgreSQL. Agents pull from the hub, so the hub never holds write credentials to a workload cluster.
Choose off, audit or auto-patch per workload and per resource. Guardrails cap each decrease (50% per step by default), freeze windows block changes, and a change followed by OOM kills, restarts or CPU throttling is rolled back.
Savings per workload, namespace and cluster, priced per node type from the AWS price list (on-demand and spot) or your own price table.
HPA-coupled workloads get their requests and HPA target changed together. JVM containers get heap-aware memory. Single-replica workloads and OnDelete StatefulSets change without downtime.
In-place resizes leave the pod template alone, so Argo CD sees no drift. Policies live in the UI or as RightsizingPolicy resources in Git.
Every recommendation explains itself. With the production profile, the CPU request is the 95th percentile of 14 days of usage plus 15% headroom, with a confidence score next to it.
A hub in one cluster computes recommendations. An agent in each workload cluster decides what to apply under your policies.
Each workload cluster
global.mode: spoke
Your metrics store
Prometheus, VictoriaMetrics, Thanos, Mimir, AMP
Hub cluster
global.mode: hub
Each agent pulls recommendations and policies from the hub over HTTPS and reports status back. The hub never connects to a workload cluster.
global.mode: all installs everything in one cluster.A web UI for the whole fleet. These screenshots use the UI's built-in sample data.
Every workload ranked by estimated monthly savings, with the current, recommended and used values for CPU and memory, the confidence, and bulk actions.
Usage history against requests and the recommendation, the effective policy and where it came from, and a timeline of every change and rollback.
An add-cluster wizard that renders the install command, then readiness checks: Registered → Agent connected → Metrics OK → Ready for audit → Automation ready. A failed check shows the fix.
A policy editor with a preview of what changes, defaults, maintenance windows, metrics sources, prices, users and API tokens, an audit log, and a switch that pauses automation for a cluster or the whole fleet.
Also included: Grafana dashboards and Prometheus alerts, a recommendation simulator, high availability for the hub (leader election on PostgreSQL), External Secrets support, NetworkPolicies, and multi-arch images signed with cosign.
Kerf takes ideas from the tools below. They are good tools; pick the one that fits.
| Tool | License | Your data stays in your infrastructure | Applies changes | In-place resize | Rollback on bad health | Savings in $ | HPA and JVM aware |
|---|---|---|---|---|---|---|---|
| Kerf | Apache-2.0 | Yes | Yes: policies, maintenance windows | Yes | Yes | Yes | Yes: both |
| Vertical Pod Autoscaler | Apache-2.0 | Yes | Yes: evict and webhook | Yes: InPlaceOrRecreate |
Not found | Not found | not with an HPA on the same metric |
| Goldilocks | Apache-2.0 | Yes | through VPA, opt-in | through VPA | Not found | Not found | Not found |
| Robusta KRR | MIT | Yes: CLI; the UI is SaaS | optional webhook, with a Robusta account | Not found | Not found | Not found | --allow-hpa |
| IBM Kubecost | commercial, free tier | Yes: self-hosted option | Kubescaler (alpha) | Not found | Not found | Yes | Not found |
| StormForge | commercial | metrics go to SaaS | Yes | Yes | Yes | Yes | Yes: both |
| PerfectScale | commercial, free tier | Yes: self-hosted option | Yes: maintenance windows | Yes | Not found | Yes | JVM; HPA advice |
| CAST AI | commercial | SaaS console | Yes | Yes | Not found | Yes | Yes: both |
✓ means documented. – means we did not find it in their public docs on 2026-11-05, which is not proof that it's missing. Every cell, with sources. Corrections are welcome: open an issue.
You run several clusters, want rightsizing applied automatically under policies you control, and want it open source and entirely inside your own infrastructure.
Every cluster starts in audit: Kerf recommends and changes nothing until you turn on auto-patch.
No cluster needed. Requires Node.js 22 and make.
git clone https://github.com/kerf-dev/kerf
cd kerf
make web-dev # open http://localhost:5173
One chart. global.mode picks the role of each cluster.
# the central cluster: hub, web UI, pricing
helm install kerf oci://ghcr.io/kerf-dev/kerf/charts/kerf \
--version <version> -n kerf --create-namespace \
-f values-hub.yaml # global.mode: hub
# each workload cluster: agent, webhook, CRDs
helm install kerf oci://ghcr.io/kerf-dev/kerf/charts/kerf \
--version <version> -n kerf --create-namespace \
-f values-spoke.yaml # global.mode: spoke
The EKS install guide walks through every step, with example values in deploy/examples/eks. The add-cluster wizard prints the full command for each workload cluster.
Requirements: Kubernetes 1.35 (tested; in-place resize is GA there), Prometheus or VictoriaMetrics with cAdvisor and kube-state-metrics (Thanos, Mimir and Amazon Managed Service for Prometheus also work), cert-manager in each workload cluster, and PostgreSQL 12 or later for the hub.
Setting each container's CPU and memory requests and limits to what it actually uses, plus headroom. Requests decide how many pods fit on a node, so over-requested pods waste nodes you pay for, and under-requested pods get throttled or OOM-killed.
VPA recommends and can apply requests in one cluster. Kerf adds dollars, a fleet UI, per-resource modes, maintenance windows, rollback on bad health and HPA coordination. VPA is a fine choice for one cluster you watch closely.
Start in audit: nothing changes. Turn on auto-patch per namespace or workload, for CPU first if you like. Every change is in the activity log and can be rolled back from the UI.
Yes. When an HPA scales a workload on CPU or memory utilization, Kerf changes the requests and the HPA's utilization target in one change, so the HPA keeps scaling at the same usage as before.
No. Kerf reads metrics from your Prometheus-compatible store and keeps its state in your PostgreSQL. The only calls outside your clusters go to the AWS Pricing and EC2 APIs, and only when you choose AWS prices.
The recommender, agent and webhook use standard Kubernetes APIs. EKS 1.35 is the tested platform. On other clusters, prices come from a static table instead of the AWS price list; please report what you find.
One chart. The hub needs PostgreSQL and a Prometheus-compatible endpoint you probably have already.
Kerf is new (0.x). Run it in audit first, then turn on auto-patch for one namespace and watch the activity log. The roadmap lists what comes next.
Nothing. Kerf is open source under the Apache License 2.0, with no paid tier and no hosted service. You pay for the compute it runs on.
Install Kerf in audit mode. It recommends and prices every workload and changes nothing until you say so.