centos7下kubernetes(11。kubernetes-運行一次性任務)


 

容器按照持續運行的時間可以分為兩類:服務類容器和工作類容器

服務類容器:持續提供服務

工作類容器:一次性任務,處理完后容器就退出

Deployment,replicaset和daemonset都用於管理服務類容器,

對於工作類的容器,我們用job

編輯一個簡單的job類型的yml文件

1.apiversion:當前job的apiversion是batch/v1

2.kind:當前的資源類型是job

3.restartpolicy指定什么情況下需要重啟容器。對於job只能設置為never或者onfailure

對於其他的controller(比如deployment,replicaset等)可以設置為always

創建job應用

通過kubectl get job進行查看

顯示destire為1,成功1

說明是按照預期啟動了一個pod,並且成功執行

查看pod的狀態

由於myjob的pod處於completed的狀態,所以需要加--show-all參數才能顯示出來

 

 

通過kubectl logs 查看pod標准輸出

 

 

 

如果job沒有執行成功,怎么辦?

修改job.yml文件,故意引起一個錯誤,然后重新啟動myjob

 

先將原來的job刪除

 然后重新啟動一個新的job

重新啟動一個job,我們發現有一個未成功的job,查看pod的時候竟然有兩個job相關的pod,目標job只有1個啊,為什么??

我們再次查看一下

目前達到了6個

原因是:當地一個pod啟動時,容器失敗退出,根據restartPolicy:Never,此失敗容器不會被重啟,但是job destired的pod是1,目前successful為1。由於我們的命令是錯誤的,successful永遠不能到1,

job contorller會一直創建新的pod達到job得期望狀態,最多重新創建6次,因為K8S為job提供了spec.bakcofflimits來限制重試次數,默認為6.

 

 

如果將restartpolicy設置為OnFailure會怎么樣?我們來實驗一下

修改job.yml文件

將restartpolicy修改為OnFailure

重新啟動job.yml

pod數量只有1,job為失敗得狀態

但是pod得restart得次數在變化,說明onfailure生效,容器失敗后會自動重啟

 

 

 

並行執行job

之前我們得實驗都是一次運行一個job里只有一個pod,當我們同時運行多個pod得時候,怎么進行設置呢?

可以通過:parallelism設置

修改job.yml文件

 

此次我們執行一個job同時運行3個pod

kubectl apply -f job.yml

job一共啟動了3個pod,而且AGE相同,說明是並行運行得。

還可以通過completions設置job成功完成pod的總數;

配置含義:每次運行3個pod,知道運行了6個結束

 

 

重新執行一下

kubectl apply -f job.yml

也不是很准,但是確實不是同時並行啟動的

 

 

 

 

 

 

定時執行job

kubernetes提供了類似crontab定時執行任務的功能

首先修改apiserver使api支持cronjob

vim /etc/kubernetes/manifests/kube-apiserver.yaml

 - --runtime-config=batch/v1beta1=true    加入這一行

 

 保存退出

kubectl apiversions   查看api版本(如果這里沒有生效的話,需要重啟kubelet這個服務)

systemctl restart kubelet.service

 

修改yml文件如下: 

apiVersion: batch/v1beta1         batch/v1beta1當前cronjob的apiserver
kind: CronJob     當前資源類型為cronjob
metadata:
  name: cronjob
spec:
  schedule: "*/1 * * * *"      指定什么時候運行job,格式與linux中的計划任務一致
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello k8s job!"]
          restartPolicy: OnFailure
~

 

運行這個job

kubectl apply -f job.yml

如果出現一下錯誤請一定要檢查yml文件的內容,進行修改

 正常運行如下:

 查看cronjob

kubectl get cronjob

 

查看job,通過時間間隔可以看到,每1分種創建一個pod

 kubectl get job

 

查看pod日志

 刪除cronjob

kubectl delete cronjob cronjob

 


免責聲明!

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



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