iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
Software Development

被容器束縛住的小宇宙系列 第 25

Day25 Kubernetes 的小小工具人 – Job

  • 分享至 

  • xImage
  •  

前幾天跟各位介紹完一些 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 。

那今天就先到這邊,大家掰掰!


上一篇
Day24 Deployment 實作
下一篇
Day26 Kubernetes的工具人兄弟--CronJob
系列文
被容器束縛住的小宇宙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言