LIGHTS
OUT

Turn the lights out on your development infrastructure by automatically scaling down Kubernetes workloads during off-hours and restoring them during business hours. Save over 60% on dev and staging costs with zero code changes.

TIME
09:00
BUSINESS HOURS
dev-cluster
LightsOut Operator
downscale 0 18 * * 1-5 · upscale 0 9 * * 1-5
node / managed by cluster-autoscaler
namespace / dev
Deployment
order-svc
3 replicas
StatefulSet
session-svc
2 replicas
CronJob
report-job
active
0% +
cluster cost savings
vs. always-on baseline

Features

Cron Scheduling
Define upscale and downscale times using standard cron expressions with full IANA timezone support.
Multi-Workload Support
Manages Deployments, StatefulSets, CronJobs, and HPAs. Original replica counts are preserved in annotations for accurate restoration.
Namespace-Scoped Schedules
Developers can define a LightsOut Schedule in their own namespace to self-serve their schedule. Global schedules automatically skip namespaces that opt in this way.
ArgoCD Integration
Prevents false "OutOfSync" alerts in ArgoCD when workloads are intentionally scaled down by the operator.
Prometheus Metrics
Exposes schedule state, workload counts, scaling durations, and error counters. Ready for Grafana dashboards and alerting rules.
Admission Webhook
Validates LightsOut Schedule resources at admission time, catching invalid cron expressions and overlapping schedules before they reach the cluster.

Quick Start

1

Install via Helm

helm install lightsout oci://ghcr.io/gjorgji-ts/charts/lightsout
2

Define a schedule

apiVersion: lightsout.techsupport.mk/v1alpha1
kind: LightsOutSchedule
metadata:
  name: dev-weekday-hours
spec:
  upscale:   "0 9 * * 1-5"    # 09:00 Mon–Fri
  downscale: "0 18 * * 1-5"   # 18:00 Mon–Fri
  timezone: "Europe/Amsterdam"
  namespaceSelector:
    matchLabels:
      environment: dev
3

Save on costs

The operator continuously reconciles the schedule, scaling down matching workloads at 18:00 and restoring them at 09:00 while preserving original replica counts in annotations.

Full documentation on GitHub