我有一个cronjob,可以向客户发送电子邮件。它有时由于各种原因而失败。我不希望它重新启动,但仍然可以。
我正在GKE上运行Kubernetes。要使其停止,我必须删除CronJob,然后杀死它手动创建的所有 pods 。
显而易见,这很糟糕。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
creationTimestamp: 2018-06-21T14:48:46Z
name: dailytasks
namespace: default
resourceVersion: "20390223"
selfLink: [redacted]
uid: [redacted]
spec:
concurrencyPolicy: Forbid
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
creationTimestamp: null
spec:
template:
metadata:
creationTimestamp: null
spec:
containers:
- command:
- kubernetes/daily_tasks.sh
env:
- name: DB_HOST
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
envFrom:
- secretRef:
name: my-secrets
image: [redacted]
imagePullPolicy: IfNotPresent
name: dailytasks
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Never
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
schedule: 0 14 * * *
successfulJobsHistoryLimit: 3
suspend: true
status:
active:
- apiVersion: batch
kind: Job
name: dailytasks-1533218400
namespace: default
resourceVersion: "20383182"
uid: [redacted]
lastScheduleTime: 2018-08-02T14:00:00Z
最佳答案
原来,您必须结合backoffLimit: 0
和restartPolicy: Never
一起设置concurrencyPolicy: Forbid
。
backoffLimit 表示在被认为失败之前将重试的次数。预设值为6。
concurrencyPolicy设置为Forbid
的意味着它将运行0或1次,但不会更多。
restart策略设置为Never
表示它不会在失败时重新启动。
您需要做所有这三件事,否则您的cronjob可能会运行多次。
spec:
concurrencyPolicy: Forbid
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
creationTimestamp: null
spec:
[ADD THIS -->]backoffLimit: 0
template:
... MORE STUFF ...
关于kubernetes - 如何确保kubernetes cronjob不会在失败时重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657105/