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
| Flag | Use |
--from=cronjob/NAME | Snapshot template |
--image=... | Ad-hoc Job |
3. Listing Jobs
kubectl get jobs
kubectl get jobs -A --sort-by=.status.completionTime
| Column | Meaning |
| COMPLETIONS | succeeded/desired |
| DURATION | Run time |
| AGE | Creation time |
4. Describing Job Details
| Field | Meaning |
| Parallelism / Completions | Concurrency & total successes |
| Conditions | Complete / Failed / Suspended |
| Start / Completion Time | Timeline |
5. Setting Completions Count
| Pattern | spec |
| Single run | completions omitted (=1) |
| Fixed N successes | completions: 5, parallelism: 1 |
| Indexed | completionMode: Indexed (unique JOB_COMPLETION_INDEX) |
6. Setting Parallelism Level
spec:
completions: 10
parallelism: 3
completionMode: Indexed
| Field | Effect |
| parallelism | Max concurrent pods |
| completions | Total successful pods needed |
7. Configuring Backoff Limit
| Field | Default |
| backoffLimit | 6 (then Job=Failed) |
| backoffLimitPerIndex NEW | Per-index limit (Indexed jobs) |
| podFailurePolicy | Map exit codes → Ignore/FailJob/Count |
8. Setting Active Deadline
spec:
activeDeadlineSeconds: 300 # kill job after 5 min
| Field | Effect |
| activeDeadlineSeconds | Hard timeout for Job (terminates pods) |
| ttlSecondsAfterFinished | Auto-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 Label | Source |
job-name | Set by Job controller |
controller-uid | Job 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
| Method | Use |
logs job/NAME | First pod's logs |
logs -l job-name=NAME | All 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
| Mechanism | How |
| TTL controller | ttlSecondsAfterFinished: 3600 |
| CronJob | successfulJobsHistoryLimit / failedJobsHistoryLimit |
| Manual | Cron task running kubectl delete |