GoKubeDownscaler: Reduce Kubernetes Costs Off-Hours
Skip to main content
⭐️ If you like GoKubeDownscaler, give it a star on GitHub! ⭐️⭐️ Give it a star on GitHub! ⭐️
Smart Kubernetes Autoscaling Powered By Schedules<br>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<br>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<br>install.sh<br>$ helm repo add caas-team https://caas-team.github.io/helm-charts/<br>✓ Repository added successfully
$ helm install go-kube-downscaler caas-team/go-kube-downscaler<br>✓ go-kube-downscaler installed
✓ go-kube-downscaler installed<br>🚀 You are now ready to save 70% of your Kubernetes bill
Monthly Cloud Cost $
Jan
Feb
Mar
Apr
May
Jun
Install<br>BeforeAfter−70% Of Kubernetes Costs<br>* This calculation is based on a 40-hour work week (scale-down during evenings, weekends)
How It Works<br>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.<br>configmap.yaml<br>apiVersion: v1<br>kind: ConfigMap<br>metadata:<br>name: kube-downscaler<br>namespace: kube-downscaler<br>data:<br>DEFAULT_UPTIME: Mon-Fri 09:00-17:00 America/Los_Angeles|<br>EXCLUDE_NAMESPACES: kube-system,cilium,kube-downscaler
Need Further Customization?<br>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<br>$ kubectl annotate namespace spanish-namespace downscaler/uptime="Mon-Fri 09:00-17:00 Europe/Madrid"<br>$ kubectl annotate deploy istiod -n istio-system downscaler/exclude="true"<br>$ kubectl annotate namespace webapp-hotfixbranch downscaler/exclude-until="2027-07-29T21:30:00Z"
Fine-Grained Scheduling<br>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<br>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<br>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.
Fine-Grained Scheduling<br>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<br>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<br>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.
Get Started<br>Star on GitHub
Supported Resources
Prometheus<br>Prometheuses
Argo<br>Rollouts
Kubernetes<br>Deployment, StatefulSet, DaemonSet, CronJob, HorizontalPodAutoscaler, PodDisruptionBudget, Job
Keda<br>ScaledObjects
Zalando<br>Stacks
GitHub Actions<br>AutoscalingRunnerSet
PrometheusesRolloutsDeploymentStatefulSetDaemonSetCronJobHorizontalPodAutoscalerPodDisruptionBudgetJobScaledObjectsStacksAutoscalingRunnerSet