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

标签 kubernetes

我有一个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: 0restartPolicy: 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/

相关文章:

linux - Kubernetes:无法安装仪表板

kubernetes - 与通常的卷安装相比,使用卷 secret 的优势

kubernetes - 与kubernetes中的前端通信

kubernetes - K8S入口是否随端口一起提供任何后端目标路径?

nginx - Kubernetes 中的 TCP 入口支持

kubernetes - 如何创建匹配 Kubernetes API 的网络策略

kubernetes - 如何使用 Kustomize 并创建类似 : "http://${namePrefix}service-a/some-path" or "jdbc:db2://${namePrefix}service-b:${dbPort}/${dbName}" 的环境

docker - 如何监视和发现Kubernetes Services之间的流量?

kubernetes - 如何在 ArgoCD 中的 ConfigMap 创建中添加 json 数据

kubernetes - 分配亲和性以将 kubernetes pod 分布到所有节点上?