Jobs and CronJobs¶
Jobs¶
Working with Jobs is a bit different than working with Deployments. Create a Job using the following template:
kubectl apply -f - <<EOF
apiVersion: batch/v1
kind: Job
metadata:
name: sleepy
spec:
template:
spec:
containers:
- name: resting
image: busybox
command: ["/bin/sleep"]
args: ["3"]
restartPolicy: Never
EOF
job.batch/sleepy created
Check the Job
kubectl get job
NAME COMPLETIONS DURATION AGE
sleepy 0/1 3s 3s
kubectl describe jobs.batch sleepy
Name: sleepy
Namespace: default
Selector: batch.kubernetes.io/controller-uid=97bb2f4b-b7de-4a8a-bc9a-180ad55d4a84
Labels: batch.kubernetes.io/controller-uid=97bb2f4b-b7de-4a8a-bc9a-180ad55d4a84
batch.kubernetes.io/job-name=sleepy
controller-uid=97bb2f4b-b7de-4a8a-bc9a-180ad55d4a84
job-name=sleepy
Annotations: <none>
Parallelism: 1
Completions: 1
Completion Mode: NonIndexed
Suspend: false
Backoff Limit: 6
Start Time: Thu, 24 Oct 2024 00:41:56 +0200
Completed At: Thu, 24 Oct 2024 00:42:06 +0200
Duration: 10s
Pods Statuses: 0 Active (0 Ready) / 1 Succeeded / 0 Failed
Play around with parallelism
, activeDeadlineSeconds
(change the sleep parameter too) and completions
number (delete the job in between retries), how does that affect the number of concurrent pods running?
CronJobs¶
Create the CronJob:
kubectl apply -f - <<EOF
apiVersion: batch/v1
kind: CronJob
metadata:
name: sleepy
spec:
schedule: "*/2 * * * *" #<-- Add Linux style cronjob syntax
jobTemplate: #<-- New jobTemplate and spec move
spec:
template: #<-- This and following lines move
spec: #<-- four spaces to the right
containers:
- name: resting
image: busybox
command: ["/bin/sleep"]
args: ["5"]
restartPolicy: Never
EOF
Check the execution:
$ kubectl get cronjobs
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
sleepy */2 * * * * <none> False 0 <none> 11s
$ kubectl get jobs
NAME STATUS COMPLETIONS DURATION AGE
sleepy Complete 1/1 10s 9m44s