天天看點

Docker&Kubernetes ❀ Kubernetes叢集Pod控制器 - Cronjob(CJ)

文章目錄

  • ​​1、基本概念與控制器特點​​
  • ​​2、資源配置清單​​
  • ​​3、建立控制器​​
  • ​​4、删除控制器​​

1、基本概念與控制器特點

Cronjob控制器以Job控制器資源為其管控對象,并借助它管理Pod資源對象,Job控制器定義的作業任務在其控制器資源建立之後便會立即執行,但是Cronjob可以以類似Linux作業系統的周期性任務作業計劃的方式控制其運作時間點及重複運作的方式,Cronjob可以在特定的時間點反複的運作Job任務;

Docker&Kubernetes ❀ Kubernetes叢集Pod控制器 - Cronjob(CJ)

2、資源配置清單

參數查詢方法:

[root@master ~]# kubectl explain cronjob      

參數彙總梳理:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: pc-cronjob
  namespace: dev
  labels:
    controller: cronjob 
spec:
  schedule:                             #cron格式的作業排程運作時間點,用于控制任務在什麼時間執行
  concurrencyPolicy:                    #并發執行政策,用于定義前一次作業運作尚未完成時是否或如何運作下一次的任務
  faliedJobHistoryLimit:                #失敗的任務執行保留的曆史記錄,預設為1
  successfulJobHistoryLimit:            #成功的任務執行保留的曆史記錄,預設為3
  startingDeadlineSeconds:              #啟動作業錯誤的逾時時間
  jobTemplate:                          #job控制器模闆,用于cronjob控制器生成job對象
    metadata:
    spec:
      completions: 6                    #指定job需要成功運作Pod的次數,預設值為1
      parallelism: 3                    #指定job在任一時刻應該并發運作pod的數量,預設值為1
      activeDeadlineSeconds: 30         #指定job可運作的時間期限,超過時間未結束系統會嘗試終止
      backoffLimit: 6                   #指定job失敗後進行重試的次數,預設為6
      manualSelector: true              #是否可以使用selector選擇器選擇pod,預設為false
      selector:                         #pod選擇器,指定控制那些pod
        matchLabels:
          app: count-pod 
        matchExpressions:
        - key: "app"
          operator: In 
          values: ["nginx-pod"]
      template:                         #模闆,當副本數量不足時,會根據以下配置建立副本
        metadata:
          labels:
            app: counter-pod
        spec:
          restartPolicy: Never          #重新開機政策,支援Nerver或OnFailure
          containers:
          - name: counter
            image: busybox:latest
            command: ["/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 2;done"]      

Cron表達式:​​點選此處跳轉到更詳細的Crontab資料​​

用于指定任務的執行時間;
schedule: "*/1 * * * *"
<分鐘> <小時> <日> <月> <星期> 
#*為通配符;*/1代表每分鐘
#每小時、每日、每月、每星期...以此類推      
  • Allow:允許Job并發運作,預設選項;
  • Forbid:禁止并發運作,如果上一次任務未完成,則直接跳過下一次任務;
  • Replace:替換,取消目前正在運作的任務并用新任務代替它;

3、建立控制器

#建立YAML檔案
[root@master ~]# cat pc-cronjob.yaml 
apiVersion: batch/v1
kind: CronJob
metadata:
  name: pc-cronjob
  namespace: dev
  labels:
    controller: cronjob 
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    metadata:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox:latest
            command: ["/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 2;done"]      
#調用YAML檔案
[root@master ~]# kubectl apply -f pc-cronjob.yaml 
cronjob.batch/pc-cronjob created

#檢視Cronjob控制器
[root@master ~]# kubectl get cronjob -n dev
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
pc-cronjob   */1 * * * *   False     1        5s              62s

#監控Job控制器
[root@master ~]# kubectl get job -n dev -w
NAME                  COMPLETIONS   DURATION   AGE
pc-cronjob-27359499   0/1                      0s
pc-cronjob-27359499   0/1           0s         0s
pc-cronjob-27359499   0/1           35s        35s
pc-cronjob-27359499   1/1           35s        35s
#第一次執行Job任務結束
pc-cronjob-27359500   0/1                      0s
pc-cronjob-27359500   0/1           0s         0s
pc-cronjob-27359500   0/1           35s        35s
pc-cronjob-27359500   1/1           35s        35s
#第二次執行Job任務結束

#監控Pod
[root@master ~]# kubectl get pod -n dev -w 
NAME                        READY   STATUS    RESTARTS   AGE
pc-cronjob-27359499-vqnbx   0/1     Pending   0          0s
pc-cronjob-27359499-vqnbx   0/1     Pending   0          0s
pc-cronjob-27359499-vqnbx   0/1     ContainerCreating   0          0s
pc-cronjob-27359499-vqnbx   0/1     ContainerCreating   0          1s
pc-cronjob-27359499-vqnbx   1/1     Running             0          17s
pc-cronjob-27359499-vqnbx   0/1     Completed           0          35s
pc-cronjob-27359499-vqnbx   0/1     Completed           0          35s
pc-cronjob-27359499-vqnbx   0/1     Completed           0          35s
#第一次執行Job任務的Pod完成
pc-cronjob-27359500-jhw7d   0/1     Pending             0          0s
pc-cronjob-27359500-jhw7d   0/1     Pending             0          0s
pc-cronjob-27359500-jhw7d   0/1     ContainerCreating   0          0s
pc-cronjob-27359500-jhw7d   0/1     ContainerCreating   0          1s
pc-cronjob-27359500-jhw7d   1/1     Running             0          17s
pc-cronjob-27359500-jhw7d   0/1     Completed           0          35s
pc-cronjob-27359500-jhw7d   0/1     Completed           0          35s
pc-cronjob-27359500-jhw7d   0/1     Completed           0          35s
##第二次執行Job任務的Pod完成      

4、删除控制器

[root@master ~]# kubectl delete -f pc-cronjob.yaml 
cronjob.batch "pc-cronjob" deleted      

繼續閱讀