Kubernetes/Jobs,CronJob
Jump to navigation
Jump to search
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