如何确保kubernetes cronjob不会在失败时重新启动

时间:2018-08-02 15:17:46

标签: kubernetes

我有一个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

2 个答案:

答案 0 :(得分:10)

原来,您必须将backoffLimit: 0restartPolicy: 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