diff --git a/sweeper-chart/templates/cronjob-scale-to-one.yaml b/sweeper-chart/templates/cronjob-scale-to-one.yaml new file mode 100644 index 0000000..dee3e9f --- /dev/null +++ b/sweeper-chart/templates/cronjob-scale-to-one.yaml @@ -0,0 +1,24 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: {{ include "sweeper.fullname" . }}-scale-to-one +spec: + schedule: {{ default "0 22 * * *" .Values.scaler.scaleToOne.schedule | quote }} + timeZone: {{ default "Europe/Rome" .Values.scaler.timeZone | quote }} + jobTemplate: + spec: + template: + spec: + serviceAccountName: {{ include "sweeper.serviceAccountName" . }} + containers: + - name: scaler + image: alpine/kubectl:latest + command: + - /bin/sh + - -c + - | + echo "Scaling {{ include "sweeper.fullname" . }} to 1 replica" + kubectl scale deployment {{ include "sweeper.fullname" . }} \ + --replicas=1 \ + -n {{ .Release.Namespace }} + restartPolicy: OnFailure diff --git a/sweeper-chart/templates/cronjob-scale-to-zero.yaml b/sweeper-chart/templates/cronjob-scale-to-zero.yaml new file mode 100644 index 0000000..16c586f --- /dev/null +++ b/sweeper-chart/templates/cronjob-scale-to-zero.yaml @@ -0,0 +1,24 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: {{ include "sweeper.fullname" . }}-scale-to-zero +spec: + schedule: {{ default "0 6 * * *" .Values.scaler.scaleToZero.schedule | quote }} + timeZone: {{ default "Europe/Rome" .Values.scaler.timeZone | quote }} + jobTemplate: + spec: + template: + spec: + serviceAccountName: {{ include "sweeper.serviceAccountName" . }} + containers: + - name: scaler + image: alpine/kubectl:latest + command: + - /bin/sh + - -c + - | + echo "Scaling {{ include "sweeper.fullname" . }} to 0 replicas" + kubectl scale deployment {{ include "sweeper.fullname" . }} \ + --replicas=0 \ + -n {{ .Release.Namespace }} + restartPolicy: OnFailure diff --git a/sweeper-chart/templates/role.yaml b/sweeper-chart/templates/role.yaml new file mode 100644 index 0000000..03d0d5f --- /dev/null +++ b/sweeper-chart/templates/role.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ include "sweeper.fullname" . }}-scaler + namespace: {{ .Release.Namespace }} +rules: + - apiGroups: ["apps"] + resources: ["deployments"] + verbs: ["get"] + - apiGroups: ["apps"] + resources: ["deployments/scale"] + verbs: ["get", "update", "patch"] \ No newline at end of file diff --git a/sweeper-chart/templates/rolebinding.yaml b/sweeper-chart/templates/rolebinding.yaml new file mode 100644 index 0000000..ea3f9c8 --- /dev/null +++ b/sweeper-chart/templates/rolebinding.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ include "sweeper.fullname" . }}-scaler-binding + namespace: {{ .Release.Namespace }} +subjects: + - kind: ServiceAccount + name: {{ include "sweeper.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: Role + name: {{ include "sweeper.fullname" . }}-scaler + apiGroup: rbac.authorization.k8s.io diff --git a/sweeper-chart/values.yaml b/sweeper-chart/values.yaml index 1a1782d..ad27594 100644 --- a/sweeper-chart/values.yaml +++ b/sweeper-chart/values.yaml @@ -168,4 +168,11 @@ env: etcd: service: name: eventsse-etcd - port: 2379 \ No newline at end of file + port: 2379 + +scaler: + timeZone: "Europe/Rome" + scaleToZero: + schedule: "0 6 * * *" # default: 06:00 + scaleToOne: + schedule: "0 22 * * *" # default: 22:00 \ No newline at end of file