CKAD field manual

k8s Job YAML example

A Job runs Pods until N succeed. A CronJob creates Jobs on a schedule.

Numbered rings, each with its own hanging crate. Numbered rings, each with its own hanging crate.
Create
kubectl create job ping --image=busybox:1.36 -- echo ok
Job YAML
apiVersion: batch/v1
kind: Job
metadata:
  name: ping
  namespace: default
spec:
  completions: 3
  parallelism: 2
  backoffLimit: 6
  template:
    metadata:
      labels:
        job: ping
    spec:
      restartPolicy: Never
      containers:
        - name: ping
          image: busybox:1.36
          command: ["echo", "ok"]
CronJob YAML
apiVersion: batch/v1
kind: CronJob
metadata:
  name: ping
  namespace: default
spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: ping
              image: busybox:1.36
              command: ["echo", "ok"]
Inspect
kubectl get job,cronjob,po
kubectl logs job/ping
kubectl delete job ping

Fields

completions
Total successes needed. Not “how many run at once”.
parallelism
Max Pods at once. 3 completions / 2 parallelism → two run, then one.
restartPolicy
Never or OnFailure. Always is rejected on a Job.
template
Labels the question wants go on template.metadata, not Job metadata.
schedule
Five fields, not six. Minute hour day month weekday.
jobTemplate
Three specs deep: spec.jobTemplate.spec.template.spec.

Watch

  • restartPolicy must be Never or OnFailure. Always is rejected.
  • completions = total successes. parallelism = max Pods at once. Labels the question wants go on template.metadata.
  • CronJob nests three specs: spec.jobTemplate.spec.template.spec. schedule is five fields, not six.

Official docs Jobs CronJobs

Practice these objects on a live cluster →