k8s使用Job執行任務失敗了怎么辦


Kubernetes 中使用 Job 和 CronJob 兩個資源分別提供了一次性任務和定時任務的特性,這兩種對象也使用控制器模型來實現資源的管理,我們在這篇文章來介紹Job執行如果失敗了會怎么樣呢?

修改job-fail.yaml,故意引入一個錯誤:
image.png

Never

如果將 restartPolicy 設置為 Never 會怎么樣?下面我們實踐一下,修改job-fail.yaml后重新啟動。

運行 Job 並查看狀態,可以看到Never策略的job,pod失敗后,重新創建:
image.png

image.png
直到重新創建7個(spec.backoffLimit默認為6,即重試6次,共7個pod)pod都失敗后,認為失敗,job的status里會更新為Failed
image.png

當前 Completion 的數量為 0
image.png

查看 Pod 的狀態:

可以看到有多個 Pod,狀態均不正常。kubectl describe pod 查看某個 Pod 的啟動日志:

image.png

日志顯示沒有可執行程序,符合我們的預期。

為什么 kubectl get pod 會看到這么多個失敗的 Pod?

原因是:當第一個 Pod 啟動時,容器失敗退出,根據 restartPolicy: Never,此失敗容器不會被重啟,但 Job DESIRED 的 Pod 是 1,目前 SUCCESSFUL0,不滿足,所以 Job controller 會啟動新的 Pod,直到 SUCCESSFUL1。對於我們這個例子,SUCCESSFUL 永遠也到不了 1,所以 Job controller 會一直創建新的 Pod,直到設置的數量,失敗后pod不會自動被刪除,為了終止這個行為,只能刪除 Job,pod也會被同時刪掉。

image.png

OnFailure

如果將 restartPolicy 設置為 OnFailure 會怎么樣?下面我們實踐一下,修改job-fail.yaml后重新啟動。image.png

image.png

Job 的 Completions Pod 數量還是為 0,看看 Pod 的情況:

image.png

這里只有一個 Pod,不過 RESTARTS 在不斷增加,說明 OnFailure 生效,容器失敗后會自動重啟。
image.png

6次失敗后,pod被刪除:
image.png

同時更新job的status為失敗,方便查看最終執行結果:
image.png



本公眾號免費提供csdn下載服務,海量IT學習資源,如果你准備入IT坑,勵志成為優秀的程序猿,那么這些資源很適合你,包括但不限於java、go、python、springcloud、elk、嵌入式 、大數據、面試資料、前端 等資源。同時我們組建了一個技術交流群,里面有很多大佬,會不定時分享技術文章,如果你想來一起學習提高,可以公眾號后台回復【2】,免費邀請加技術交流群互相學習提高,會不定期分享編程IT相關資源。


掃碼關注,精彩內容第一時間推給你

image


免責聲明!

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



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