簡體   English   中英

如何確保kubernetes cronjob在失敗時不會重啟

[英]How to ensure kubernetes cronjob does not restart on failure

我有一個向客戶發送電子郵件的cronjob。 它偶爾因各種原因而失敗。 不希望它重新啟動,但它仍然可以。

我在GKE上運行Kubernetes。 為了讓它停止,我必須刪除CronJob,然后殺死它手動創建的所有pod。

由於顯而易見的原因,這很糟糕。

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結合使用restartPolicy: NeverconcurrencyPolicy: Forbid結合使用concurrencyPolicy: Forbid

backoffLimit表示在被視為失敗之前它將重試的次數。 默認值為6。

concurrencyPolicy設置為Forbid意味着它將運行0或1次,但不會更多。

restartPolicy設置為Never表示失敗時不會重啟。

你需要做所有這3件事,或者你的cronjob可能會運行多次。

spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
  jobTemplate:
    metadata:
      creationTimestamp: null
    spec:
      [ADD THIS -->]backoffLimit: 0
      template: 
      ... MORE STUFF ...

kubernetes cronjob資源有一個字段, suspend其規格。

默認情況下不能這樣做,但是如果你想確保它不運行,你可以更新發送電子郵件的腳本並讓它修補cronjob資源以添加suspend: true如果失敗則返回suspend: true

像這樣的東西

kubectl patch cronjob <name> -p '{"spec": { "suspend": true }}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM