Managing Jobs

1. Creating Job

Example: One-shot Job

apiVersion: batch/v1
kind: Job
metadata: { name: pi }
spec:
  backoffLimit: 4
  activeDeadlineSeconds: 600
  ttlSecondsAfterFinished: 86400
  template:
    spec:
      restartPolicy: OnFailure
      containers:
      - name: pi
        image: perl:5.38
        command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]

2. Creating Job from CronJob

kubectl create job manual-run --from=cronjob/nightly-report
FlagUse
--from=cronjob/NAMESnapshot template
--image=...Ad-hoc Job

3. Listing Jobs

kubectl get jobs
kubectl get jobs -A --sort-by=.status.completionTime
ColumnMeaning
COMPLETIONSsucceeded/desired
DURATIONRun time
AGECreation time

4. Describing Job Details

FieldMeaning
Parallelism / CompletionsConcurrency & total successes
ConditionsComplete / Failed / Suspended
Start / Completion TimeTimeline

5. Setting Completions Count

Patternspec
Single runcompletions omitted (=1)
Fixed N successescompletions: 5, parallelism: 1
IndexedcompletionMode: Indexed (unique JOB_COMPLETION_INDEX)

6. Setting Parallelism Level

spec:
  completions: 10
  parallelism: 3
  completionMode: Indexed
FieldEffect
parallelismMax concurrent pods
completionsTotal successful pods needed

7. Configuring Backoff Limit

FieldDefault
backoffLimit6 (then Job=Failed)
backoffLimitPerIndex NEWPer-index limit (Indexed jobs)
podFailurePolicyMap exit codes → Ignore/FailJob/Count

8. Setting Active Deadline

spec:
  activeDeadlineSeconds: 300   # kill job after 5 min
FieldEffect
activeDeadlineSecondsHard timeout for Job (terminates pods)
ttlSecondsAfterFinishedAuto-delete Job N seconds after completion

9. Using Job Selectors

kubectl get pods --selector=job-name=pi
kubectl get pods -l batch.kubernetes.io/controller-uid=$(kubectl get job pi -o jsonpath='{.metadata.uid}')
Auto LabelSource
job-nameSet by Job controller
controller-uidJob UID

10. Viewing Job Logs

kubectl logs job/pi
kubectl logs -l job-name=pi --tail=-1
kubectl logs -f -l job-name=pi --max-log-requests=10
MethodUse
logs job/NAMEFirst pod's logs
logs -l job-name=NAMEAll pods

11. Deleting Jobs

kubectl delete job pi
kubectl delete job pi --cascade=orphan   # keep pods
kubectl delete jobs --field-selector=status.successful=1

12. Cleaning Up Finished Jobs

MechanismHow
TTL controllerttlSecondsAfterFinished: 3600
CronJobsuccessfulJobsHistoryLimit / failedJobsHistoryLimit
ManualCron task running kubectl delete