Another Autoscaler is a Kubernetes controller that automatically starts, stops, or restarts pods from a deployment at a specified time using a cron syntax.
Another Autoscaler read the annotation of each deployment and performs an increase or decrease in the number of replicas.
The date and time must be in UTC.
The restart feature execute a rollout restart deployment.
- Cost savings by reducing the number of replicas after working hours or weekends.
- Stop GPU deployments during non-working hours.
Another Autoscaler is a perfect combination with Cluster Autoscaler.
# Deploy Another Autoscaler into Kubernetes on "another" namespace
kubectl apply -f https://raw.githubusercontent.com/dignajar/another-autoscaler/master/kubernetes/full.yaml
# Check if Another Autoscaler is working
kubectl get pods -n another
The following annotations for the deployments are valid (metadata.annotations
).
another-autoscaler/stop-time
: Define the date and time when the replica of the deployment will be set to 0.another-autoscaler/start-time
Define the date and time when the replica of the deployment will be set to 1.another-autoscaler/restart-time:
: Define the date and time when the rollout restart will be peformerd to a deployment.another-autoscaler/stop-replicas
: This is the number of replicas to set when Another Autoscaler scale down the deployment, by default is 0.another-autoscaler/start-replicas
: This is the number of replicas to set when Another Autoscaler scale up the deployment, by default is 1.
another-autoscaler/stop-time: "00 18 * * *"
another-autoscaler/start-time: "00 13 * * *"
another-autoscaler/start-time: "30 14 * * *"
another-autoscaler/start-replicas: "3"
another-autoscaler/restart-time: "15 09 * * *"
another-autoscaler/restart-time: "00 02 * * 0,6"
The following example start 5
replicas in total at 2pm
and stop 4
of them at 3pm
every day, the deployment start with 0
replicas.
The start-replicas
is not incremental, the value is the number of replicas will be setup by Another Autoscaler at the defined time by start-time
.
The date and time must be in UTC.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
annotations:
another-autoscaler/start-time: "00 14 * * *"
another-autoscaler/start-replicas: "5"
another-autoscaler/stop-time: "00 15 * * *"
another-autoscaler/stop-replicas: "1"
spec:
replicas: 0
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
To avoid conflicts with Flux and Another Autoscaler, you can remove the field spec.replicas
from your deployment manifest and leave Another Autoscaler to manage the number of replicas.