Kubernetes Autoscaling for Cost Optimization: HPA, VPA, KEDA, and Node Autoscaling Explained The average production Kubernetes cluster runs at just 8% CPU utilization, according to the Cast AI 2026 State of Kubernetes Optimization Report, even as 88% of organizations report year-over-year increases in Kubernetes total cost of ownership (Spectro Cloud/Adience 2025) and 42% cite cost as their top Kubernetes challenge. The guide states that combining HPA, VPA, Cluster Autoscaler, Karpenter, and KEDA with proper rightsizing can deliver 40-70% compute cost reduction, while default configurations amplify waste. It notes the average production cluster over-provisions CPU by 69% and memory by 79%, and that Karpenter provisions nodes in 45-60 seconds versus 3-4 minutes for Cluster Autoscaler. Kubernetes autoscaling cost optimization is not a single dial you turn. It operates at three distinct levels, and each one either saves money or leaks it depending on how well it is configured. According to the Cast AI 2026 State of Kubernetes Optimization Report https://cast.ai/reports/state-of-kubernetes-optimization/ , the average production cluster runs at 8% CPU utilization. That number reveals the problem clearly: autoscaling is running, but it is not cutting idle capacity fast enough to matter. 88% of organizations report a year-over-year rise in Kubernetes total cost of ownership Spectro Cloud/Adience 2025 , and 42% cite cost as their top Kubernetes challenge. The tooling exists to fix this. HPA, VPA, Cluster Autoscaler, Karpenter, and KEDA each solve a distinct part of the scaling problem. Used together and configured correctly, they can deliver 40-70% compute cost reduction. Used at defaults, they amplify waste instead of eliminating it. This guide explains how each autoscaler works, when to use it, and how to configure it for cost efficiency without compromising reliability. Key takeaways - Kubernetes autoscaling operates at three levels: pod HPA, VPA , node Cluster Autoscaler, Karpenter https://cast.ai/blog/what-is-karpenter/ , and event-driven KEDA . Each layer is necessary; none is sufficient alone. - The average production cluster over-provisions CPU by 69% and memory by 79%. Fixing resource requests before tuning autoscalers is the highest-leverage action available. - HPA with Karpenter is the most common production baseline for stateless workloads. Karpenter provisions nodes in 45-60 seconds versus 3-4 minutes for Cluster Autoscaler. - VPA is safest in Off mode for recommendations only. Recreate mode evicts pods and can disrupt production traffic without careful PodDisruptionBudget configuration. - KEDA enables true scale-to-zero for event-driven workloads using 70+ built-in scalers. It graduated from CNCF in August 2023. - Wrong resource requests make every autoscaler less effective. HPA targets a percentage of requested resources, not actual cluster capacity. - With proper autoscaling and rightsizing combined, 40-70% compute cost reduction is achievable in production clusters. The three levels of Kubernetes autoscaling Kubernetes autoscaling operates on three distinct planes. Understanding the boundary of each prevents configuration mistakes that waste money. Pod scaling adjusts what runs inside a node. HPA adds or removes pod replicas based on observed metrics. VPA adjusts the CPU and memory requests for individual pods without changing replica count. Both act on existing node capacity first. Node scaling adjusts the infrastructure underneath your pods. Cluster Autoscaler and Karpenter add or remove nodes based on pending pods and utilization. Node autoscaling without pod autoscaling produces over-provisioned nodes. Pod autoscaling without node autoscaling produces pending pods and delayed scale-up. Event-driven scaling bridges workloads to external signals. KEDA watches queues, streams, and custom metrics to scale workloads that do not map well to CPU or memory targets. This level enables scale-to-zero, which neither HPA nor VPA can achieve on their own. The practical takeaway: run all three layers for most production clusters. Pod autoscaling ensures efficient bin packing. Node autoscaling ensures infrastructure matches actual demand. Event-driven scaling handles workloads that fall outside the CPU-centric model. HPA: Horizontal Pod Autoscaler How HPA works Kubernetes HPA https://cast.ai/blog/what-is-kubernetes-hpa-and-how-can-it-help-you-save-on-the-cloud/ watches metrics and adjusts replica count to keep those metrics near a configured target. The control loop runs every 15 seconds by default. The core algorithm is straightforward: desiredReplicas = ceil currentMetricValue / desiredMetricValue × currentReplicas . For example, if 3 replicas run at 80% CPU and the target is 60%, HPA scales to ceil 80/60 × 3 = 4 replicas. HPA supports three metric types. Resource metrics CPU and memory as a percentage of requests are the default. Custom metrics expose application-level signals like request latency or queue depth. External metrics bring in data from outside the cluster, such as cloud provider load balancer metrics. The critical detail: HPA targets a percentage of requested resources, not actual cluster capacity. Therefore, if a pod requests 100m CPU but consistently uses 2 CPUs, HPA reacts to the 100m baseline. Over-provisioned requests make HPA blind to real load changes. HPA YAML: autoscaling/v2 with behavior policies Prerequisites: metrics-server must be installed and healthy kubectl top pods should return data . Many distributions omit it — install via: helm upgrade --install metrics-server metrics-server/metrics-server -n kube-system apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: api-server-hpa namespace: production spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: api-service minReplicas: 2 maxReplicas: 20 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 25 periodSeconds: 60 scaleUp: stabilizationWindowSeconds: 0 policies: - type: Percent value: 100 periodSeconds: 15 The behavior block is the most important part for cost control. The 300-second stabilization window prevents premature scale-down during transient load drops. The 25% per-minute scale-down rate limits how aggressively replicas drain. Scale-up keeps a zero stabilization window so the response to real load spikes stays immediate. Verify Verify HPA is scaling look for TARGETS showing current/target, not