O atributo spec.backoffLimit determina a quantidade de vezes que um Job tenta executar seu workload até que o comando termine com exit code 0(sucesso).

O valor default para backoffLimit é 6, isto significa que o Job executará o workload 6 vezes antes que seja considerado que a execução foi malsucedida.

Somos obrigados a informar um valor para a Restart Policy no manifesto do Job através do atributo spec.template.spec.restartPolicy. O valor Always(proibido) faz com que o Kubernetes Scheduler sempre reinicie o Pod mesmo que o container termine com exit code 0. Os únicos valores permitidos para Restart Policy nos Pods sob um Job são OnFailure e Never.

<aside> 💡 Lembrando que a Restart Policy é aplicada aos containers do Pod e quando um Pod falhar a Restart Policy será considerada. Se a Restart Policy for Never o Job descartará o Pod e criará outros Pods até que o backoffLimit seja atingido. O backoffLimit especifica a quantidade máxima de tentativas antes de assumir que o Job falhou, o valor default é 6.

</aside>

Tentando Criar Job sem Declarar o Atributo spec.template.spec.restartPolicy

$ kubectl apply -f job.yaml
	The Job "my-job" is invalid: spec.template.spec.restartPolicy:
	Required value: valid values: "OnFailure", "Never"

Manifesto Definindo Atributos Customizados

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job
  labels:
    section: 06-pod-design
spec:
  template:
    metadata:
      name: my-job
    spec:
      containers:
        - name: job-container
          image: nginx
          command: ["/bin/sh", "-c"]
          args: ["echo hello world"]
      restartPolicy: Never
  parallelism: 1   # Specifies the maximum desired number of pods the job should run at any given time.
  completions: 1   # Desired number of successfully finished pods the job should be run with
  backoffLimit: 5  # Specifies the number of retries before marking this job failed. Defaults to 6

Restarting the Container on Failure

A figura abaixo demonstra o comportamento de um Job que utiliza a restart policy OnFailure nos seus Pods. Em caso de falha do container, essa política simplesmente reexecutará o container no mesmo Pod.

Figure 6-8. Restart policy OnFailure

Figure 6-8. Restart policy OnFailure

Starting a New Pod on Failure

A figura abaixo mostra o comportamento de um Job que utiliza a restart policy Never nos seus Pods. Esta política não reinicia o container em caso de falha. Em vez disso, ela inicia um novo Pod.

Figure 6-9. Restart policy Never

Figure 6-9. Restart policy Never

Documentação Kubernetes

Job

Referência de campos para o Job - Lifecycle - backoffLimit.

Jobs

Documentação Job