iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
1
Kubernetes

15 分鐘學習系列 - 第一次學 Kubernetes 就上手系列 第 20

Day 20 - 在 Kubernetes 中執行 Job

本篇筆記將介紹另一個 Kubernetes 功能, Job 可以讓 Kubernetes 排程在特定時間完成批次作業.

在 Kubernetes 中執行單一Job

  1. 編輯 simple job yaml 檔案
PS C:\k8s> code .\simplejob.yaml

https://ithelp.ithome.com.tw/upload/images/20181102/20111871BRhovnnbb1.png
2. 使用命令 kubectl create -f .\simplejob.yaml 建立 job 部署

PS C:\k8s> kubectl create -f .\simplejob.yaml
job.batch "finalcountdown" created
  1. 使用命令 kubectl get jobs 觀察 Job 狀況
PS C:\k8s> kubectl get jobs
NAME             DESIRED   SUCCESSFUL   AGE
finalcountdown   1         1            20s
  1. 確認 Pod 狀態為 Completed
PS C:\k8s> kubectl get pods
NAME                                               READY     STATUS             RESTARTS   AGE
finalcountdown-jstdw                               0/1       Completed          0          25s
  1. 使用命令 kubectl describe jobs/finalcountdown, 觀察 job pod 的內容
    我們可以看到 job 的命令如下:
    Command:
    bin/sh
    -c
    for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done
    Event 結果為成功狀態:
    Events:
    Type Reason Age From Message
    Normal SuccessfulCreate 1m job-controller Created pod: finalcountdown-jstdw
PS C:\k8s> kubectl describe jobs/finalcountdown
Name:           finalcountdown
Namespace:      default
Selector:       controller-uid=15bd6557-d9fd-11e8-b771-00155d54100f
Labels:         controller-uid=15bd6557-d9fd-11e8-b771-00155d54100f
                job-name=finalcountdown
Annotations:    <none>
Parallelism:    1
Completions:    1
Start Time:     Sat, 27 Oct 2018 23:29:25 +0800
Pods Statuses:  0 Running / 1 Succeeded / 0 Failed
Pod Template:
  Labels:  controller-uid=15bd6557-d9fd-11e8-b771-00155d54100f
           job-name=finalcountdown
  Containers:
   counter:
    Image:      busybox
    Port:       <none>
    Host Port:  <none>
    Command:
      bin/sh
      -c
      for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From            Message
  ----    ------            ----  ----            -------
  Normal  SuccessfulCreate  1m    job-controller  Created pod: finalcountdown-jstdw
  1. 使用命令 kubectl log finalcountdown-jstdw 輸出紀錄
PS C:\k8s> kubectl log finalcountdown-jstdw
log is DEPRECATED and will be removed in a future version. Use logs instead.
9
8
7
6
5
4
3
2
1

在 Kubernetes 中執行排程的 Job

接下來介紹另一種屬於排程的 Cronjob

  1. 首先編輯一個 cronjob 的 yaml 檔案
PS C:\k8s> code .\cronjob.yaml

https://ithelp.ithome.com.tw/upload/images/20181102/201118717kQSPqGErs.png
2. 使用命令 kubectl create -f .\cronjob.yaml 部署 cronjob

PS C:\k8s> kubectl create -f .\cronjob.yaml
cronjob.batch "hellocron" created
  1. 使用命令 kubectl get cronjobs 取得 cronjob 狀態
PS C:\k8s> kubectl get cronjobs
NAME        SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
hellocron   */1 * * * *   False     0         23s             1m
  1. 使用命令 kubectl edit cronjobs/hellocron 編輯 cronjob, 設定為每分鐘執行一次並啟用.
PS C:\k8s> kubectl edit cronjobs/hellocron

https://ithelp.ithome.com.tw/upload/images/20181102/20111871J0Iov1kBPf.png
5. 將檔案儲存

PS C:\k8s> kubectl edit cronjobs/hellocron
cronjob.batch "hellocron" edited
  1. 再次使用命令 kubectl get cronjobs 取得 cronjob 狀態
PS C:\k8s> kubectl get cronjobs
NAME        SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
hellocron   */1 * * * *   True      0         3m              9m
  1. 使用命令 kubectl get pods 取得 cronjob pod 名稱
PS C:\k8s> kubectl get pods
NAME                                               READY     STATUS             RESTARTS   AGE
hellocron-1540655220-mq858                         0/1       Completed          0          6m
  1. 使用命令 kubectl get cronjobs 輸出 cronjob 紀錄
PS C:\k8s> kubectl logs hellocron-1540655220-mq858
Sat Oct 27 15:47:11 UTC 2018
Hello from your Kubernetes cluster

以上介紹 Kubernetes 執行單一工作與排程工作的方式.


參考資料:


上一篇
Day 19 - 使用 secret 儲存敏感資訊
下一篇
Day 21 - 使用與設定 liveness probes
系列文
15 分鐘學習系列 - 第一次學 Kubernetes 就上手30

尚未有邦友留言

立即登入留言