In order to use the ScheduledScaler you will need to install the CRD and deploy the Scaling Controller into your Kubernetes cluster.
Clone this repo
mkdir -p $GOPATH/src/k8s.restdev.com && \
git clone https://github.com/k8s-restdev/scheduled-scaler.git $GOPATH/src/k8s.restdev.com/operators && \
cd $GOPATH/src/k8s.restdev.com/operators
Install using Helm Chart
helm install scheduled-scaler artifacts/kubes/scaling/chart
Note: This uses the image stored at https://hub.docker.com/r/k8srestdev/scaling by default.
See chart README for detailed configuration options
Installation without Helm (and compiling binary yourself):
kubectl create -f ./artifacts/kubes/scaling/crd.yml
make
Note: If you are just looking for a prebuilt image you can find the latest build here. Just add that image tag to the deployment yml in the artificats dir and apply to your
kube-system
namespace to get up and running without doing a fresh build :D
The Makefile
provides the following steps:
Each of these steps can be run in a single pass or can be used individually.
Examples
# This example will test, build, push and deploy using kubectl's currently configured cluster
make OPERATOR=scaling PROJECT_ID=my_project_id
# This example will test, build, push and deploy using kubernodes
make OPERATOR=scaling PROJECT_ID=my_project_id DEPLOYBIN=kn KN_PROJECT_ID=my_kubernodes_project_id
Note: You only need to add
KN_PROJECT_ID
if it differs fromPROJECT_ID
make build OPERATOR=scaling PROJECT_ID=my_project_id
make push IMAGE=myrepo/myimage:mytag
make deploy OPERATOR=scaling IMAGE=myrepo/myimage:mytag
make deploy OPERATOR=scaling IMAGE=myrepo/myimage:mytag DEPLOYBIN=kn KN_PROJECT_ID=my_kubernodes_project_id
Now that you have all the resources required in your cluster you can begin creating ScheduledScalers.
Note: This controller uses the following Cron Expression Format
apiVersion: "scaling.k8s.restdev.com/v1alpha1"
kind: ScheduledScaler
metadata:
name: my-scheduled-scaler-1
spec:
timeZone: America/Los_Angeles
target:
kind: HorizontalPodAutoscaler
name: my-hpa
apiVersion: autoscaling/v1
steps:
#run at 5:30am PST
- runat: '0 30 5 * * *'
mode: range
minReplicas: 1
maxReplicas: 5
apiVersion: "scaling.k8s.restdev.com/v1alpha1"
kind: ScheduledScaler
metadata:
name: my-scheduled-scaler-2
spec:
timeZone: America/Los_Angeles
target:
kind: InstanceGroup
name: my-instance-group-name
apiVersion: compute/v1
steps:
#run at 5:30am PST
- runat: '0 30 5 * * *'
mode: fixed
replicas: 3
As you'll see above, you can target either instance groups (if you are on GKE) or hpa, but all the other options are the same.
Option | Description | Required |
---|---|---|
spec.timeZone | Timezone to run crons in | False |
spec.target.kind | Type of target (InstanceGroup/HorizontalPodAutoscaler) | True |
spec.target.name | Name of the target resource | True |
spec.target.apiVersion | API Version of the target | True |
spec.steps | List of steps | True |
spec.steps[].runat | Cronjob time string (gocron) | True |
spec.steps[].mode | Type of scaling to run (fixed/range) | True |
spec.steps[].replicas | Defined if mode is 'fixed' | False |
spec.steps[].minReplicas | Defined if mode is 'range' | False |
spec.steps[].maxReplicas | Defined if mode is 'range' | False |
For more details on how this add-on can be used please follow the link below: Learn More...
Thanks goes to these wonderful people (emoji key):
Sheridan C Rawlins 🚧 ⚠️ 💻 |
vnandha 🐛 🚧 |
so0k 🚇 📖 |
Andreas Wunderlich 📖 |
This project follows the all-contributors specification. Contributions of any kind welcome!