上一節討論了 Job 執行成功的情況,如果失敗了會怎麼樣呢?
修改 myjob.yml,故意引入一個錯誤:
先刪除之前的 Job:
如果將 restartPolicy
設置爲 OnFailure
會怎麼樣?下面我們實踐一下,修改 myjob.yml 後重新啓動。
運行新的 Job 並查看狀態:
當前 SUCCESSFUL
的 Pod 數量爲 0
,查看 Pod 的狀態:
可以看到有多個 Pod,狀態均不正常。kubectl describe pod
查看某個 Pod 的啓動日誌:
日誌顯示沒有可執行程序,符合我們的預期。
下面解釋一個現象:爲什麼 kubectl get pod
會看到這麼多個失敗的 Pod?
原因是:當第一個 Pod 啓動時,容器失敗退出,根據 restartPolicy: Never
,此失敗容器不會被重啓,但 Job DESIRED
的 Pod 是 1
,目前 SUCCESSFUL
爲 0
,不滿足,所以 Job controller 會啓動新的 Pod,直到 SUCCESSFUL
爲 1
。對於我們這個例子,SUCCESSFUL
永遠也到不了 1
,所以 Job controller 會一直創建新的 Pod。爲了終止這個行爲,只能刪除 Job。
如果將 restartPolicy
設置爲 OnFailure
會怎麼樣?下面我們實踐一下,修改 myjob.yml 後重新啓動。
Job 的 SUCCESSFUL
Pod 數量還是爲 0
,看看 Pod 的情況:
這裏只有一個 Pod,不過 RESTARTS
爲 3
,而且不斷增加,說明 OnFailure
生效,容器失敗後會自動重啓。
下一節我們討論提高 Job 執行效率的方法