Kubernetes/Jobs,CronJob

From Ever changing code
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Experiments with jobs.

CLI

# Delete completed jobs
kubectl.exe -n dev delete job $(kubectl.exe -n dev get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')


Self terminating jobs-selfTerminate.yml one time off Jobs. Includes a CronJob task, that's manage a pod with RBAC permissions to remove old jobs.

---
apiVersion: batch/v1
kind: Job
metadata:
  name: job-ttl-zero
  namespace: dev
spec:
#  ttlSecondsAfterFinished: 100 # requires enabling TTLAfterFinished on min v1.12
  ttlSecondsAfterFinished: 0    # delete straight after completion
  template:
    spec:
      containers:
      - name: perl
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
---
apiVersion: batch/v1
kind: Job
metadata:
  name: job-activedeadlinedeconds
  namespace: dev
spec:
  backoffLimit: 2
  activeDeadlineSeconds: 120
  template:
    spec:
      containers:
      - name: perl
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cron-delete-jobs
  namespace: dev
spec:
  schedule: "*/2 * * * *"
  successfulJobsHistoryLimit: 2
  failedJobsHistoryLimit: 2
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: kubectl-runner
            image: wernight/kubectl
            command: ["sh", "-c", "kubectl -n dev get jobs | awk '$4 ~ /[2-9]d$/ || $3 ~ 1' | awk '{print $1}' | xargs kubectl -n dev delete job"]
          restartPolicy: Never
          serviceAccountName: delete-jobs
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: delete-jobs
  namespace: dev
  labels:
    k8s-app: delete-jobs
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: delete-jobs
subjects:
- kind: ServiceAccount
  name: delete-jobs
  namespace: dev
roleRef:
  kind: ClusterRole
  name: delete-jobs
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: delete-jobs
  labels:
    k8s-app: delete-jobs
rules:
- apiGroups: [""]
  resources:
#  - namespaces
  - pods
  verbs: ["list","delete"]
- apiGroups: ["batch"]
  resources:
  - jobs
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]


When applied to minikube 1.15.2

kubectl.exe apply -f jobs-selfTerminate.yml
job.batch/job-ttl-zero created
job.batch/job-activedeadlinedeconds created
cronjob.batch/cron-delete-jobs created
serviceaccount/delete-jobs created
clusterrolebinding.rbac.authorization.k8s.io/delete-jobs created
clusterrole.rbac.authorization.k8s.io/delete-jobs created

NAME                                    COMPLETIONS   DURATION   AGE
job.batch/cron-delete-jobs-1568245320   1/1           8s         2m1s
job.batch/cron-delete-jobs-1568245440   0/1           1s         1s

NAME                             SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob.batch/cron-delete-jobs   */2 * * * *   False     1        2s              8m5s

Resources