10、Kubernetes Job,CronJob控制器

Job

Job 負責批處理任務,即僅執行一次的任務,它保證批處理任務的一個或多個 Pod 成功結束

特殊說明

  • spec.template格式同Pod
  • RestartPolicy僅支持Never或OnFailure
  • 單個Pod時,默認Pod成功運行後Job即結束
  • .spec.completions標誌Job結束需要成功運行的Pod個數,默認爲1
  • .spec.parallelism標誌並行運行的Pod的個數,默認爲1
  • spec.activeDeadlineSeconds標誌失敗Pod的重試最大時間,超過這個時間不會繼續重試

Example

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]
      restartPolicy: Never

CronJob Spec

  • spec.template格式同Pod
  • RestartPolicy僅支持Never或OnFailure
  • 單個Pod時,默認Pod成功運行後Job即結束
  • .spec.completions標誌Job結束需要成功運行的Pod個數,默認爲1
  • .spec.parallelism標誌並行運行的Pod的個數,默認爲1
  • spec.activeDeadlineSeconds標誌失敗Pod的重試最大時間,超過這個時間不會繼續重試

CronJob

Cron Job管理基於時間的 Job,即:
  • 在給定時間點只運行一次
  • 週期性地在給定時間點運行
使用條件:當前使用的 Kubernetes 集羣,版本 >= 1.8(對 CronJob)
典型的用法如下所示:
  • 在給定的時間點調度 Job 運行
  • 創建週期性運行的 Job,例如:數據庫備份、發送郵件

CronJob Spec

  • .spec.schedule:調度,必需字段,指定任務運行週期,格式同 Cron
  • .spec.jobTemplate:Job 模板,必需字段,指定需要運行的任務,格式同 Job
  • .spec.startingDeadlineSeconds:啓動 Job 的期限(秒級別),該字段是可選的。如果因爲任何原因而錯過了被調度的時間,那麼錯過執行時間的 Job 將被認爲是失敗的。如果沒有指定,則沒有期限
  • .spec.concurrencyPolicy:併發策略,該字段也是可選的。它指定了如何處理被 Cron Job 創建的 Job 的併發執行。只允許指定下面策略中的一種:
    • Allow(默認):允許併發運行
    • JobForbid:禁止併發運行,如果前一個還沒有完成,則直接跳過下一個
    • Replace:取消當前正在運行的 Job,用一個新的來替換
注意,當前策略只能應用於同一個 Cron Job 創建的 Job。如果存在多個 Cron Job,它們創建的 Job 之間總是允許併發運行。
  • .spec.suspend:掛起,該字段也是可選的。如果設置爲true,後續所有執行都會被掛起。它對已經開始執行的 Job 不起作用。默認值爲false。
  • .spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit:歷史限制,是可選的字段。它們指定了可以保留多少完成和失敗的 Job。默認情況下,它們分別設置爲3和1。設置限制的值爲0,相關類型的 Job 完成後將不會被保留。

Example

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
kubectl apply -f cronjob.yaml

kubectl get cronjob

#可列出的job對象的數量取決於cronjob資源的spec.successfulJobsHistoryLimit的屬性值,默認爲3。
kubectl get jobs

kubectl get pods

kubectl logs POD
# 注意,刪除 cronjob 的時候不會自動刪除 job,這些 job 可以用 kubectl delete job 來刪除
kubectl delete cronjob hello
cronjob "hello" deleted

CrondJob 本身的一些限制

創建 Job 操作應該是冪等的
可列出的job對象的數量取決於cronjob資源的spec.successfulJobsHistoryLimit的屬性值,默認爲3。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章