In the last post I create a simple application to be used within a schedule, i.e. a CronJob in Kubernetes.
We can also create one off tasks (or a Job) which might be used to migrations or some batch processing. We’ve going to use everything from the previous post to build, containerize and push our imager to a container registry. The only change is to use the supplied job.yaml file, listed below
apiVersion: batch/v1
kind: Job
metadata:
name: one-time-job
namespace: dev
spec:
template:
spec:
containers:
- name: one-time-jobb
image: putridparrotreg/putridparrot/crj:1.0.0
restartPolicy: Never
Running the following “kubectl get jobs -n dev” results in something like this
NAME STATUS COMPLETIONS DURATION AGE one-time-job Complete 1/1 5s 41s
and if we get the pods using “kubectl get jobs -n dev” we get something like
NAME STATUS COMPLETIONS DURATION AGE one-time-job Complete 1/1 5s 83s
and if we check the pods with “kubectl get pods -n dev” we’ll see something like this
NAME READY STATUS RESTARTS AGE one-time-job-h5dvf 0/1 Completed 0 3m23s
and ofcourse we can see the logs of this run via “kubectl logs one-time-job-h5dvf -n dev” and we get our application output, i.e. the date/time it was run
Current date and time: 2025-08-17 15:39:53.114962479 +00:00
You’ll note that the pod remained in the cluster, this allowed us to view the logs etc. and it’s down to the developer/devops to delete the job and pod unless…
We can actually set up automate deletion of the pod using the “ttlSecondsAfterFinished” option in the yaml file, i.e.
apiVersion: batch/v1
kind: Job
metadata:
name: one-time-job
namespace: dev
spec:
ttlSecondsAfterFinished: 300 # Deletes Job and its Pods 5 minutes after completion
template:
spec:
containers:
- name: one-time-jobb
image: putridparrotreg/putridparrot/crj:1.0.0
restartPolicy: Never
We also have the option of “activeDeadlineSeconds”, this does not delete or clean up anything but it can be used in the “spec:” section like “ttlSecondsAfterFinished” to denote that the job will be killed off it not finished. So for example
apiVersion: batch/v1
kind: Job
metadata:
name: one-time-job
namespace: dev
spec:
ttlSecondsAfterFinished: 300 # Deletes Job and its Pods 5 minutes after completion
activeDeadlineSeconds: 600 # Job will be killed even if not finished, in 10 minutes
template:
spec:
containers:
- name: one-time-jobb
image: putridparrotreg/putridparrot/crj:1.0.0
restartPolicy: Never