Skip to main content

GoKubeDownscaler

Reduce Kubernetes Costs By Scaling Workloads Down After Hours

Smart Kubernetes Autoscaling Powered By Schedules

GoKubeDownscaler acts as a horizontal autoscaler that reduces cloud costs by keeping workloads running only when needed. It scales workloads down during low-usage periods (like nights, weekends, and holidays) using user-defined schedules.

Kubernetes non-production environments and internal tools do not need to stay up and running 24/7!

Install In 1 Minute, Save All Year Round

Install GoKubeDownscaler with Helm in under a minute and start saving on your cloud bill from day one. Teams using GoKubeDownscaler achieve 70% savings after adopting it. No code changes required.

✓ Free And Open Source

install.sh
$ helm repo add caas-team https://caas-team.github.io/helm-charts/
Repository added successfully

$ helm install go-kube-downscaler caas-team/go-kube-downscaler
go-kube-downscaler installed

go-kube-downscaler installed
🚀 You are now ready to save 70% of your Kubernetes bill

Monthly Cloud Cost $

Jan
Feb
Mar
Apr
May
Jun
Install
BeforeAfter−70% Of Kubernetes Costs

* This calculation is based on a 40-hour work week (scale-down during evenings, weekends)

How It Works

The most common way to use GoKubeDownscaler is to set a global schedule. The controller continuously reads the desired configuration and scales down workloads when needed. Once the downscaling window ends, the controller brings the workload back to its original state.

configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-downscaler
  namespace: kube-downscaler
data:
  DEFAULT_UPTIME: Mon-Fri 09:00-17:00 America/Los_Angeles|
  EXCLUDE_NAMESPACES: kube-system,cilium,kube-downscaler

Need Further Customization?

GoKubeDownscaler can be tuned far beyond a simple schedule. Use annotations at namespace or workload level to override global scheduling. For example, define per-timezone schedules for teams in other countries, or set up permanent or temporary exclusions. Discover all options in our documentation

$ kubectl annotate namespace spanish-namespace downscaler/uptime="Mon-Fri 09:00-17:00 Europe/Madrid"
$ 
$ kubectl annotate deploy istiod -n istio-system downscaler/exclude="true"
$ 
$ kubectl annotate namespace webapp-hotfixbranch downscaler/exclude-until="2027-07-29T21:30:00Z"

Fine-Grained Scheduling

Configure scheduling globally or via annotations at namespace or workload level. Supports flexible scheduling for multi-tenant clusters and teams across timezones.

Flexible Time Formats

Define scaling windows as recurring schedules (like Mon–Fri), RFC3339 timespans, or always/never rules. Treat time as a scaling dimension that best fits your infrastructure usage

Cloud Agnostic

Built for any Kubernetes distribution across AWS, GCP, Azure, and on-premises environments. Fully supports all Kubernetes resources and popular CRDs like KEDA, Prometheus, and Argo.

Supported Resources

Prometheus

Argo

Kubernetes

Keda

Zalando

GitHub Actions

PrometheusesRolloutsDeploymentStatefulSetDaemonSetCronJobHorizontalPodAutoscalerPodDisruptionBudgetJobScaledObjectsStacksAutoscalingRunnerSet