kuberneters 、 Job 和 CronJob 控制器
阿新 • • 發佈:2022-05-31
十年河東,十年河西,莫欺少年窮
學無止境,精益求精
概述
- Job主要用於負責批量處理短暫的一次性任務。
- Job的特點:
- 當Job建立的Pod執行成功結束時,Job將記錄成功結束的Pod數量。
- 當成功結束的Pod達到指定的數量時,Job將完成執行。
Job可以保證指定數量的Pod執行完成。
- Job的資源清單:
apiVersion: batch/v1 # 版本號 kind: Job # 型別 metadata: # 元資料 name: # 名稱 namespace: #名稱空間 labels: # 標籤 controller: job spec: # 詳情描述 completions:1 # 指定Job需要成功執行Pod的總次數,預設為1 parallelism: 1 # 指定Job在任一時刻應該併發執行Pod的數量,預設為1 activeDeadlineSeconds: 30 # 指定Job可以執行的時間期限,超過時間還沒結束,系統將會嘗試進行終止 backoffLimit: 6 # 指定Job失敗後進行重試的次數,預設為6 manualSelector: true # 是否可以使用selector選擇器選擇Pod,預設為false selector: # 選擇器,通過它指定該控制器管理那些Pod matchLabels: # Labels匹配規則 app: counter-pod matchExpressions: # Expressions匹配規則 - key: app operator: In values: - counter-pod template: # 模板,當副本數量不足時,會根據下面的模板建立Pod模板 metadata: labels: app: counter-pod spec: restartPolicy: Never # 重啟策略只能設定為Never或OnFailure containers:- name: counter image: busybox:1.30 command: ["/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 20;done"]
關於模板中的重啟策略的說明:
- 如果設定為OnFailure,則Job會在Pod出現故障的時候重啟容器,而不是建立Pod,failed次數不變。
- 如果設定為Never,則Job會在Pod出現故障的時候建立新的Pod,並且故障Pod不會消失,也不會重啟,failed次數+1。
- 如果指定為Always的話,就意味著一直重啟,意味著Pod任務會重複執行,這和Job的定義衝突,所以不能設定為Always。
建立Job
- 建立pc-job.yaml檔案,內容如下
apiVersion: batch/v1 # 版本號 kind: Job # 型別 metadata: # 元資料 name: pc-job # 名稱 namespace: dev #名稱空間 spec: # 詳情描述 completions: 4 # 指定Job需要成功執行Pod的總次數,預設為1 parallelism: 2 # 指定Job在任一時刻應該併發執行Pod的數量,預設為1 activeDeadlineSeconds: 30 # 指定Job可以執行的時間期限,超過時間還沒結束,系統將會嘗試進行終止 backoffLimit: 1 # 指定Job失敗後進行重試的次數,預設為6 manualSelector: true # 是否可以使用selector選擇器選擇Pod,預設為false selector: # 選擇器,通過它指定該控制器管理那些Pod matchLabels: # Labels匹配規則 app: counter-pod template: # 模板,當副本數量不足時,會根據下面的模板建立Pod模板 metadata: labels: app: counter-pod spec: restartPolicy: Never # 重啟策略只能設定為Never或OnFailure containers: - name: counter image: busybox:1.30 command: [ "/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 3;done" ]
- 建立Job:
kubectl apply -f pc-job.yaml
- 刪除Job:
kubectl delete -f pc-job.yaml
CronJob(CJ)控制器
- CronJob控制器以Job控制器為其管控物件,並藉助它管理Pod資源物件,Job控制器定義的作業任務在其控制器資源建立之後便會立即執行,但CronJob可以以類似Linux作業系統的週期性任務作業計劃的方式控制器執行時間點及重複執行的方式,換言之,CronJob可以在特定的時間點反覆去執行Job任務。
- CronJob的資源清單:
apiVersion: batch/v1beta1 # 版本號 kind: CronJob # 型別 metadata: # 元資料 name: # 名稱 namespace: #名稱空間 labels: controller: cronjob spec: # 詳情描述 schedule: # cron格式的作業排程執行時間點,用於控制任務任務時間執行 cron 表示式 concurrencyPolicy: # 併發執行策略 failedJobsHistoryLimit: # 為失敗的任務執行保留的歷史記錄數,預設為1 successfulJobsHistoryLimit: # 為成功的任務執行保留的歷史記錄數,預設為3 jobTemplate: # job控制器模板,用於為cronjob控制器生成job物件,下面其實就是job的定義 metadata: {} spec: completions: 1 # 指定Job需要成功執行Pod的總次數,預設為1 parallelism: 1 # 指定Job在任一時刻應該併發執行Pod的數量,預設為1 activeDeadlineSeconds: 30 # 指定Job可以執行的時間期限,超過時間還沒結束,系統將會嘗試進行終止 backoffLimit: 6 # 指定Job失敗後進行重試的次數,預設為6 template: # 模板,當副本數量不足時,會根據下面的模板建立Pod模板 spec: restartPolicy: Never # 重啟策略只能設定為Never或OnFailure containers: - name: counter image: busybox:1.30 command: [ "/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 20;done" ]
schedule:cron表示式,用於指定任務的執行時間。
- 分鐘的值從0到59。
- 小時的值從0到23。
- 日的值從1到31。
- 月的值從1到12。
- 星期的值從0到6,0表示星期日。
- 多個時間可以用逗號隔開,範圍可以用連字元給出:* 可以作為萬用字元,/表示每...
concurrencyPolicy:併發執行策略
- Allow:執行Job併發執行(預設)。
- Forbid:禁止併發執行,如果上一次執行尚未完成,則跳過下一次執行。
- Replace:替換,取消當前正在執行的作業並使用新作業替換它。
建立CronJob
- 建立pc-cronjob.yaml檔案,內容如下:
apiVersion: batch/v1beta1 # 版本號 kind: CronJob # 型別 metadata: # 元資料 name: pc-cronjob # 名稱 namespace: dev #名稱空間 spec: # 詳情描述 schedule: "*/1 * * * * " # cron格式的作業排程執行時間點,用於控制任務任務時間執行 jobTemplate: # job控制器模板,用於為cronjob控制器生成job物件,下面其實就是job的定義 metadata: {} spec: template: # 模板,當副本數量不足時,會根據下面的模板建立Pod模板 spec: restartPolicy: Never # 重啟策略只能設定為Never或OnFailure containers: - name: counter image: busybox:1.30 command: [ "/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 2;done" ]
- 建立
kubectl create -f pc-cronjob.yaml
- 檢視、監控
kubectl get cronjob -n dev -w kubectl get job -n dev -w kubectl get pod -n dev -w
- 刪除
kubectl delete -f pc-cronjob.yaml