k8sJob控制器


Job控制器用於調配pod對象運行一次性任務,容器中的進程在正常運行結束后不會對其進行重啟,而是將pod對象置於completed狀態。若容器中的進程因錯誤而終止,則需要依據配置確定重啟與否,未運行完成的pod對象因其所在的節點故障而意外終止后會被重新調度。

實踐中,有的作業任務可能需要運行不止一次,用戶可以配置它們以串行或並行的方式運行。這種類型的job控制器對象有兩種:

單工作隊列的串行式job:即以多個一次性的作業方式串行執行多次作業,直至滿足期望的次數

多工作隊列的並行式job:這種方式可以設置工作隊列數,即作業數,每個隊列僅負責運行一個作業。

一、創建job對象

job控制器的spec字段內嵌的必要字段僅為template,它的使用方式與deploy並無不同。job會為其pod對象自動添加“job-name=JOB_NAME”和“controller-uid=UID”標簽,並使用標簽選擇器完成對controller-uid標簽的關聯。job位於API群組“batch/v1”之內

apiVersion:batch/v1
kind: job
metadata:
  name: job-example
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: alpine
        command: ["/bin/sh", "-c", "sleep 120"]
      restartPolicy: Never

Pod模板中的spec.restartPolicy默認為Always,這對job控制器來說並不適用,因此需要設定為Never或OnFailure

使用kubectl create或kubectl apply命令創建完成后即可查看相關任務狀態

二、並行式job

將並行度屬性spec.parallelism的值設置為1,並設置總任務數spec.completion屬性便能夠讓job控制器以串行方式運行多任務:

apiVersion: batch/v1
kind: job
metadata:
  name: job-multi
spec:
  completions: 5
parallelism: 2
backoffLimit: 5
activeDeadlineSeconds: 100 template: spec: containers:
- name: myjob image: alpine command: ["/bin/sh", "-c", "sleep 120"] restartPolicy: OnFailure

三、job擴容

job控制器的spec.parallelism定義的並行度表示同時運行的pod對象數,此屬性值支持運行時調整從而改變其隊列總數,實現擴容和縮容。使用kubectl scale --replicas命令即可

四、刪除job

job控制器待其pod資源運行完成后,將不再占用系統資源,用戶可按需保留或使用資源刪除命令將其刪除。如果job控制器的容器應用總是無法正常結束運行,而restartPolicy又定義了重啟,則它可能會一直處於不停地重啟和錯誤的循環中:

spec.activeDeadlineSeconds:job的deadline,用於為其指定最大活動時間長度,超出此時長的作業將被終止

spec.backoffLimit: 將作業標記為失敗狀態之前的重試次數,默認值為6。

如上文中示例配置中,其失敗重試次數為5次,並且如果超出100s時間仍未運行完成,那么其將被終止。

 


免責聲明!

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



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