Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
There are a few fields that play into this, but the gist of it is to set the Pod's restartPolicy to Never. This doesn't mean that the Job only tries once. Rather, instead of restarting the containe...
Answer
#1: Initial revision
There are a few fields that play into this, but the gist of it is to set the Pod's [`restartPolicy`](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle) to `Never`. This doesn't mean that the Job only tries once. Rather, instead of restarting the *container* inside the Pod on failure, a new Pod will get scheduled until the Job's [`backoffLimit`](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/job-v1/#lifecycle) is reached (default being 6 at the moment). Finally the CronJob's [`failedJobsHistoryLimit`](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/cron-job-v1/#CronJobSpec) decides whether the failed Job together with its Pods will be kept around. It defaults to 1. Here's an example of a debuggable CronJob, adapted from the [official example](https://github.com/kubernetes/website/blob/ff5a1a221ced2acdcfe43e03f0b70b4aa12331c1/content/en/examples/application/job/cronjob.yaml) (CC BY 4.0, The Kubernetes Authors): ```yaml apiVersion: batch/v1 kind: CronJob metadata: name: hello spec: schedule: "* * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox:1.28 imagePullPolicy: IfNotPresent command: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster # This is the key bit. # Defaults are okay for the other discussed fields. restartPolicy: Never ```