Kubernetes組件-CronJob(定時任務)


⒈簡介:

  Kubernetes的Job資源在創建時會立即運行pod。但是許多批處理任務需要在特定的時間運行,或者在指定的時間間隔內重復運行。在Linux和類UNIX操作系統中,這些任務通常被稱為cron任務。Kubernetes也支持這種任務。
  Kubernetes中的cron任務通過創建 CronJob資源進行配置。運行任務的時間表以知名的cron格式指定,所以如果你熟悉常規cron任務,你將在幾秒鍾內了解Kubernetes的CronJob。
  在配置的時間,Kubernetes將根據在CronJob對象中配置的Job模板創建Job資源。創建Job資源時,將根據任務的pod模板創建並啟動一個或多個pod副本。

⒉定義(創建)CronJob

 

apiVersion: batch/v1beta1  #指定當前描述文件遵循batch/v1beta1版本的KubernetesAPI
kind: CronJob #我們在描述一個CronJob
metadata:
  name: batch-job-every-fifteen-minutes  #指定CronJob的名稱
spec: #當沒有指定pod選擇器時它將根據pod模板中的標簽創建
  schedule: "0,15,30,45 * * * *"  #這項工作應該每天在每小時0、15、30和45分鍾運行
  jobTemplate: #創建新pod所使用的pod模板
    spec:
      template: #此CronJob創建Job資源會用到的模板
        metadata:
          labels:
            app: periodic-batch-job
        spec:
          restartPolicy: OnFailure  #Job不能使用Always作為默認的重新啟動策略
          containers:
          - name: main
            image: fanqisoft/batch-job
            ports:
            - containerPort: 8080

時間表從左到右包含以下五個條目:
  ·分鍾
  ·小時
  ·每月中的第幾天
  ·月
  ·星期幾
  在該示例中,每15分鍾運行一次任務因此schedule字段的值應該是“0,15,30,45****”這意味着每小時的0、15、30和45分鍾(第一個星號),每月的每一天(第二個星號),每月(第三個星號)和每周的每一天(第四個星號)。
  相反,如果你希望每隔30分鍾運行一次,但僅在每月的第一天運行,則應將計划設置為“0,30*1**”,並且如果你希望它每個星期天的3AM運行,將它設置為“03**0”(最后一個零代表星期天)。

⒊計划任務的運行方式

  在計划的時間內,CronJob資源會創建Job資源,然后Job創建pod。
  可能發生Job或pod創建並運行得相對較晚的情況。你可能對這項工作有很高的要求,任務開始不能落后於預定的時間過多。在這種情況下,可以通過指定CronJob規范中的startingDeadlineseconds字段來指定截止日期。

apiVersion: batch/v1beta1  #指定當前描述文件遵循batch/v1beta1版本的KubernetesAPI
kind: CronJob #我們在描述一個CronJob
metadata:
  name: batch-job-every-fifteen-minutes  #指定CronJob的名稱
spec: #當沒有指定pod選擇器時它將根據pod模板中的標簽創建
  schedule: "0,15,30,45 * * * *"  #這項工作應該每天在每小時0、15、30和45分鍾運行
  startingDeadlineSeconds: 15 #pod最遲必須在預定時間后15秒開始運行
  jobTemplate: #創建新pod所使用的pod模板
    spec:
      template: #此CronJob創建Job資源會用到的模板
        metadata:
          labels:
            app: periodic-batch-job
        spec:
          restartPolicy: OnFailure  #Job不能使用Always作為默認的重新啟動策略
          containers:
          - name: main
            image: fanqisoft/batch-job
            ports:
            - containerPort: 8080

  在上面的例子中,工作運行的時間應該是10:30:00。如果因為任何原因10:30:15不啟動,任務將不會運行,並將顯示為Failed。
  在正常情況下,CronJob總是為計划中配置的每個執行創建一個Job,但可能會同時創建兩個Job,或者根本沒有創建。為了解決第一個問題,你的任務應該是冪等的(多次而不是一次運行不會得到不希望的結果)。對於第二個問題,請確保下一個任務運行完成本應該由上一次的(錯過的)運行完成的任何工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM