前幾天跟各位介紹完一些 Kubernetes 的基本 Resource 的觀念及一些實作,不曉得各位是不是有比較理解 Kubernetes 了呢?
那今天要跟各位介紹的是 Kubernetes Job 這個 Resource。
Kubernetes Job 主要針對的是短時及批量的工作負載。它最終的追求目的是為了結束而運行的,跟我們前兩天介紹的 Deployment 追求的是持續運行有著很大的不同。
Kubernetes Job 會一直運行到 Job 所被賦予的任務完成後才結束。簡單來說,就是 Pod 若回傳 exit code 0 的話,那麼 Job 將會退出。而以我們前兩天介紹的 Deployment 來說,無論 exit code 是什麼, Deployment 在終止或出現錯誤時都會重新創建新的 Pod ,以保持使用者的期望狀態。
接下來,我們來試試一些簡單的 Job 實例吧!
首先,先創建一個 Job 的 YAML 檔:
# test_pod.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
我們現在創建的這個 Job 將會把 π 小數點後 2000 位 print 出來。
創建完後,跟之前的步驟一樣,先把他創建起來:
kubectl apply -f test_job.yaml
接著過一陣子後,可以查看一下現在 Pod 狀態,我們會發現它的 STATUS 已變成 Completed:
ubuntu@ubuntu:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pi-vc4s6 0/1 Completed 0 58s
我們可以使用以下的指令來觀察這個 Pod 完成的結果
kubectl logs <Pod Name>
理論上應該會出現如以下的結果:
ubuntu@ubuntu:~$ kubectl logs pi-vc4s6
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
而正常來說, Job 完成後不會再創建新的 Pod ,不過已有的 Pod 通常也不會被刪除。保留這些 Pod 可以讓我們查看已完成的 Pod 的日誌輸出,方便我們檢查運行時發生的錯誤、警告或者其他診斷性輸出。若要將已創建的 Pod 刪除的話,就必須使用 kubectl delete pod 指令將其刪除。
到這邊,關於 Job 的基本介紹就大概到這邊了,明天會再另外跟各位介紹它的另一個兄弟 CronJob 。
那今天就先到這邊,大家掰掰!