Operator for CronJob resources
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
Vladimir Smagin 8b74051da2 Изменить 'README.md' 1 månad sedan
build bootstrap operator 2 månader sedan
cmd/manager bootstrap operator 2 månader sedan
deploy security context, node selections and resources limiting 1 månad sedan
pkg security context, node selections and resources limiting 1 månad sedan
version security context, node selections and resources limiting 1 månad sedan
.gitignore create cronjobs 2 månader sedan
Dockerfile bootstrap operator 2 månader sedan
Makefile create cronjobs 2 månader sedan
README.md Изменить 'README.md' 1 månad sedan
VERSION security context, node selections and resources limiting 1 månad sedan
go.mod security context, node selections and resources limiting 1 månad sedan
go.sum envConfigmap, restartPolicy, backoffLimit, concurrencyPolicy, history limits 1 månad sedan
logo.png add logo 2 månader sedan
tools.go bootstrap operator 2 månader sedan

README.md

Cron operator for Kubernetes

Manages multiple CronJobs with same image, but different commands and workdirs. Supports mounting of persistent volume to save results somewhere, ENV variables configmaps, concurrency and restart policy.

Build sources

Prebuilt images

You can find images here https://hub.docker.com/r/iam21h/cron-operator. Pin version number in operator.yaml if you do not want automaticaly get new features and bugs.

Deploy operator

Cluster scoped installation:

kubectl -f deploy/crds/blindage_v1alpha1_cronop_crd.yaml
kubectl -f deploy/clusterrole.yaml
kubectl -f deploy/clusterrole_binding.yaml # service account namespace here
kubectl -n default -f deploy/service_account.yaml
kubectl -n default -f deploy/operator.yaml

Change operator.yaml if you want operator watch only specified namespace. Check deploy directory, may be you want to use Role instead of ClusterRole.

Settings

In your CronOp resource you can set image, parameters and tasks. CronJobs is a result of reconciling tasks section, some parameters can be global and overrided in each task. Remember, CronJob, Pod and Job is a different things.

This parameters can be set in global section or each task:

  • Set Configmap with ENV variables
    envConfigmap: default empty

  • How to restart Pod
    restartPolicy: OnFailure | Never | Always

  • Limit Job restarts
    backoffLimit: 0 | integer

  • Allow Cronjob to run concurrent Jobs
    concurrencyPolicy: Allow | Forbid | Replace

  • Set standard kubernetes Pod security context podSecurityContext: default empty

Global history limits:

  • successfulJobsHistoryLimit: 3 | integer
  • failedJobsHistoryLimit: 3 | integer

Also you can save intermediate results in mounted persistent volume. You can set PVC name with PersistentVolumeName, mount point with PersistentVolumePath and PersistentVolumeSubPath. It’s easy.

Global affinity, node selection and tolerations, have standard kubernetes specs:

  • nodeSelector: default empty
  • affinity: default empty
  • tolerations: default empty

Global resource limiting also kubernetes standard, but separated:

  • podRequests: default empty
  • podLimits: default empty

Look into pkg/apis/blindage/v1alpha1/cronop_types.go for your CustomResource syntax.

Your first CronOp deployment

Good sample you can find in deploy/test-cron.yaml, see it in case of questions.

This resource can help you run your first tasks:

---
apiVersion: blindage.org/v1alpha1
kind: CronOp
metadata:
  name: mycron
spec:
  image: "python:3"
  tasks:
  - name: print-test
    commands: ['python','-c', 'print("doing nothing")']
    schedule: "* * * * *"

If you delete this resource operator will delete CronJobs and Jobs.


Copyright by Vladimir Smagin (21h) 2019
http://blindage.org email: 21h@blindage.org
Project page: https://git.blindage.org/21h/cron-operator