Jobs
A job in Kubernetes is a supervisor for pods that run for a certain time to completion, for example a calculation or a backup operation.
Let’s create a job named countdown
that supervises a pod counting from 9 down to 1:
$ kubectl apply -f https://github.com/openshift-evangelists/kbe/raw/main/specs/jobs/job.yaml
The job definition is listed under the resource type job
:
$ kubectl get jobs
A job is executed as a pod.
Unlike most pods, however, the pod spawned by a job does not continue to run, but will instead reach a Completed
state.
Below is an example output of the kubectl get pods
command after a job has run.
NAME READY STATUS RESTARTS AGE
countdown-dzrz8 0/1 Completed 0 55s
Further details of the job can be seen in the describe
subcommand:
Name: countdown
Namespace: default
Selector: controller-uid=e5024398-6795-4583-8e74-431f57f54a3d
Labels: controller-uid=e5024398-6795-4583-8e74-431f57f54a3d
job-name=countdown
Annotations: <none>
Parallelism: 1
Completions: 1
Start Time: Sat, 05 Jun 2021 15:21:34 -0400
Completed At: Sat, 05 Jun 2021 15:21:39 -0400
Duration: 5s
Pods Statuses: 0 Running / 1 Succeeded / 0 Failed
Pod Template:
Labels: controller-uid=e5024398-6795-4583-8e74-431f57f54a3d
job-name=countdown
Containers:
counter:
Image: centos:7
Port: <none>
Host Port: <none>
Command:
bin/bash
-c
for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 2m34s job-controller Created pod: countdown-dzrz8
Normal Completed 2m30s job-controller Job completed
Since the job ran as a pod, the logs subcommand will show any output during its execution (the name of the pod is included in the events list as seen above).
Note: You’ll need to replace ${POD_NAME}
with the generated name of one of your pods.
$ kubectl logs ${POD_NAME}
To clean up, use the delete
verb on the job object which will remove all the supervised pods:
$ kubectl delete job countdown
Note that there are also more advanced ways to use jobs, for example, by utilizing a work queue or scheduling the execution at a certain time through cron jobs.