我有一个cronjob,可以向客户发送电子邮件。它有时由于各种原因而失败。我不希望重新启动,但仍然可以。
我正在GKE上运行Kubernetes。为了使其停止,我必须删除CronJob,然后杀死它手动创建的所有吊舱。
这很糟糕,原因很明显。
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
答案 0 :(得分:10)
原来,您必须将backoffLimit: 0
与restartPolicy: Never
结合使用。
backoffLimit 是指在被认为失败之前将重试的次数。默认值为6。
concurrencyPolicy 设置为concurrencyPolicy: Forbid
意味着它将运行0或1次,但不会更多。
restartPolicy 设置为Forbid
意味着它不会在失败时重新启动。
您需要做所有这三件事,否则您的cronjob可能会运行多次。
Never
答案 1 :(得分:0)
kubernetes cronjob资源的规范中包含一个字段suspend
。
默认情况下您无法执行此操作,但是如果要确保它不运行,则可以更新发送电子邮件的脚本,并对其修补cronjob资源以添加失败的to-report aggregate-lists [list-of-lists]
report reduce [[?1 ?2] -> (map + ?1 ?2)] list-of-lists
end
< / p>
类似这样的东西
suspend: true