如何确保kubernetes cronjob在出现故障时不会重新启动
我有一份向客户发送电子邮件的工作。由于各种原因,它偶尔会失败。我不希望它重新启动,但它仍然可以 我在GKE上运行Kubernetes。为了让它停止,我必须删除CronJob,然后手动杀死它创建的所有pod 这很糟糕,原因显而易见如何确保kubernetes cronjob在出现故障时不会重新启动,kubernetes,Kubernetes,我有一份向客户发送电子邮件的工作。由于各种原因,它偶尔会失败。我不希望它重新启动,但它仍然可以 我在GKE上运行Kubernetes。为了让它停止,我必须删除CronJob,然后手动杀死它创建的所有pod 这很糟糕,原因显而易见 apiVersion: batch/v1beta1 kind: CronJob metadata: creationTimestamp: 2018-06-21T14:48:46Z name: dailytasks namespace: default r
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
kubernetes cronjob资源在其规范中有一个字段 默认情况下,您无法执行此操作,但如果要确保它不运行,可以更新发送电子邮件的脚本,并让它修补cronjob资源,以便在失败时添加
suspend:true
像这样的
kubectl patch cronjob <name> -p '{"spec": { "suspend": true }}'
kubectl补丁cronjob-p'{“spec”:{“suspend”:true}
事实证明,您必须将退避限制:0
与重新启动策略:从不
与并发策略:禁止
结合使用
退避限制表示它在被视为失败之前将重试的次数。默认值为6
并发策略设置为禁止
意味着它将运行0或1次,但不会更多
restartPolicy设置为Never
意味着它不会在出现故障时重新启动
您需要完成这三项工作,否则cronjob可能会运行不止一次
spec:
concurrencyPolicy: Forbid
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
creationTimestamp: null
spec:
[ADD THIS -->]backoffLimit: 0
template:
... MORE STUFF ...
次要注释,
backoffLimit
是重试次数,而不是尝试次数:我有完全相同的用例,但这不适用于我:(你能想到为什么吗?你使用的是什么kube版本?我发布的相关问题:确保你在正确的位置添加了标签,否则它将不起作用。我最初犯了错误,更正后,它起了作用。谢谢