09. Job으둜 μ™„λ£Œ κ°€λŠ₯ν•œ 단일 task κ΅¬ν˜„ν•˜κΈ°

2021. 4. 5. 19:56γ†πŸŽ― OpenSource/K8S

Pod, ReplicaSet, DaemonSet λ“±μœΌλ‘œ μƒμ„±ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” μ§€μ†μ μœΌλ‘œ λ™μž‘λ˜λ©°, λ³„λ„μ˜ μ™„λ£Œ μ‹œμ μ΄ μ—†λ‹€.

반면 μ™„λ£Œλœ ν›„ λ‹€μ‹œ μ‹œμž‘λ˜μ§€ μ•ŠλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό Job λ¦¬μ†ŒμŠ€λ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

4.5.1 Job μ†Œκ°œ

Job은 μž‘μ—…μ΄ μ œλŒ€λ‘œ μ™„λ£Œλ˜μ–΄μ•Ό ν•˜λŠ” μž„μ‹œ μž‘μ—…μ— μœ μš©ν•˜κ²Œ 쓰인닀.

Job으둜 κ΄€λ¦¬ν•˜λŠ” podλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μ™„λ£Œλ˜κΈ° μ „κΉŒμ§€λŠ” λ™μž‘ν•˜λ„λ‘ μš΄μ˜λœλ‹€.

예λ₯Ό λ“€μ–΄ ν•˜λ‚˜μ˜ node에 μž₯μ• κ°€ μƒκ²Όμ„λ•Œ κ·Έ μœ„μ—μ„œ λ™μž‘ν•˜λ˜ Job으둜 μƒμ„±ν•œ podλŠ” λ‹€λ₯Έ node에 μžλ™ μŠ€μΌ€μ€„λ§ λœλ‹€.

 

4.5.2 Job Resource

Job λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•œλ‹€.

μ•„λž˜ yaml μ •μ˜μ—μ„œ μ‚¬μš©ν•œ imageλŠ” 120초 λ™μ•ˆ μ‹€ν–‰ν•œ ν›„ μ’…λ£Œλœλ‹€.

apiVersion: batch/v1
kind: Job
metadata:
  name: batch-job
spec:
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: main
        image: luksa/batch-job
  • apiVersion: Job은 batch API 그룹에 μ†ν•˜λ©°, v1에 ν•΄λ‹Ήν•œλ‹€.
  • spec: μ»¨ν…Œμ΄λ„ˆμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•Œ μΏ λ²„λ„€ν‹°μŠ€κ°€ μˆ˜ν–‰ν•  μž‘μ—…μ„ μ§€μ •ν•œλ‹€.
  • spec/restartPolicy: Job은 기본적으둜 μž¬μ‹œμž‘(Always) 정책을 μ‚¬μš©ν•  수 μ—†λ‹€. pod의 λ™μž‘μ΄ μ‹€νŒ¨ν–ˆμ„ 경우 restart ν•˜λ„λ‘ ν•œλ‹€. (OnFailure/Never λ₯Ό value둜 μ‚¬μš©ν•œλ‹€)
root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl create -f batch-job.yaml
job.batch/batch-job created

root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get po
NAME                READY   STATUS    RESTARTS   AGE
batch-job-b5sdv     1/1     Running   0          6s
root@master001:~# kubectl get jobs
NAME        COMPLETIONS   DURATION   AGE
batch-job   1/1           2m5s       19m

ν•΄λ‹Ή pod의 둜그λ₯Ό 보면 120초 ν›„ μ’…λ£Œλ˜μ—ˆμŒμ„ λ³Ό 수 μžˆλ‹€.

root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04/batch-job# kubectl logs batch-job-b5sdv
Mon Apr  5 08:45:59 UTC 2021 Batch job starting
Mon Apr  5 08:47:59 UTC 2021 Finished succesfully

 

4.5.3 Jobμ—μ„œ μ—¬λŸ¬ Pod μΈμŠ€ν„΄μŠ€ μ‹€ν–‰ν•˜κΈ°

job을 μ‚¬μš©ν•˜μ—¬ 두 개 μ΄μƒμ˜ pod μΈμŠ€ν„΄μŠ€λ₯Ό 생성해 병렬 ν˜Ήμ€ 순차적으둜 μ‹€ν–‰ν•˜λ„λ‘ ν•  수 μžˆλ‹€.

job의 spec에 completions와 parallelism 속성을 μ„€μ •ν•œλ‹€.

 

    πŸ”Ή 순차적으둜 Pod μ‹€ν–‰ν•˜κΈ°

     completions : job의 podλ₯Ό λͺ‡ 번 싀행할지 μ„€μ •ν•œλ‹€.

     μ΄ 경우 completions을 5둜 μ„€μ •ν•˜μ˜€λ‹€.

     μ™„λ£Œλœ pod 후에 μƒˆλ‘œμš΄ podλ₯Ό μƒμ„±ν•˜μ—¬ κ²°κ³Όμ μœΌλ‘œλŠ” μ—°μ†μ μœΌλ‘œ 5개의 podλ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν•œλ‹€.

apiVersion: batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job
spec:
  completions: 5
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: main
        image: luksa/batch-job

λ˜ν•œ ν•΄λ‹Ή job이 λλ‚˜λ©΄ podλŠ” completed μƒνƒœκ°€ λœλ‹€.

root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get po
NAME                READY   STATUS      RESTARTS   AGE
batch-job-b5sdv     0/1     Completed   0          53m

 

    πŸ”Ή λ³‘λ ¬λ‘œ Pod μ‹€ν–‰ν•˜κΈ°

     parallelism : μ—¬λŸ¬ job이 λ³‘λ ¬λ‘œ μ‹€ν–‰λ˜λ„λ‘ ν•œλ‹€.

     completion을 5둜 ν•˜μ—¬ 총 5개의 podλ₯Ό μ™„λ£Œν•˜λ„λ‘ μ„€μ •ν–ˆμœΌλ©°,

     ν•œλ²ˆμ— 두 κ°œκΉŒμ§€ λ³‘λ ¬λ‘œ μ‹€ν–‰ν•  수 μžˆλ‹€.

apiVersion: batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job
spec:
  completions: 5
  parallelism: 2
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: main
        image: luksa/batch-job

μ‹€ν–‰μ‹œν‚€λ©΄ 이와 같이 λ‘κ°œμ˜ podκ°€ λ³‘λ ¬λ‘œ μ‹€ν–‰λœ 것을 λ³Ό 수 μžˆλ‹€. 두 개의 podκ°€ μ™„λ£Œλœ ν›„μ—λŠ” λ‹€μ‹œ 2개의 podκ°€ μƒμ„±λœλ‹€.

root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get po
NAME                               READY   STATUS    RESTARTS   AGE
multi-completion-batch-job-nlhvs   1/1     Running   0          100s
multi-completion-batch-job-slr7h   1/1     Running   0          100s

root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get po
NAME                               READY   STATUS      RESTARTS   AGE
multi-completion-batch-job-4r5kx   1/1     Running     0          52s
multi-completion-batch-job-nlhvs   0/1     Completed   0          2m55s
multi-completion-batch-job-slr7h   0/1     Completed   0          2m55s
multi-completion-batch-job-w6qzg   1/1     Running     0          49s

root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get po
NAME                               READY   STATUS      RESTARTS   AGE
multi-completion-batch-job-4r5kx   0/1     Completed   0          12m
multi-completion-batch-job-kdprb   0/1     Completed   0          10m
multi-completion-batch-job-nlhvs   0/1     Completed   0          14m
multi-completion-batch-job-slr7h   0/1     Completed   0          14m
multi-completion-batch-job-w6qzg   0/1     Completed   0          12m

 

 

4.5.5 작 podκ°€ μ™„λ£Œλ˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„ μ œν•œν•˜κΈ°

Job이 νŠΉμ • μƒνƒœμ— λΉ μ Έ μ™„λ£Œν•  수 μ—†λŠ”κ²½μš° activeDeadlineSeconds μ†μ„±μœΌλ‘œ pod의 μ‹€ν–‰ μ‹œκ°„μ„ μ œν•œν•  수 μžˆλ‹€.

Podκ°€ 이보닀 였래 μ‹€ν–‰λ˜λ©΄ μ‹œμŠ€ν…œμ΄ μ’…λ£Œλ₯Ό μ‹œλ„ν•˜κ³ , ν•΄λ‹Ή job은 μ‹€νŒ¨λ‘œ λ‚¨λŠ”λ‹€.

 

 

4.6 Job을 주기적으둜 λ˜λŠ” ν•œ 번 μ‹€ν–‰λ˜λ„λ‘ μŠ€μΌ€μ€„λ§ ν•˜κΈ°

λ¦¬λˆ…μŠ€μ—μ„œμ˜ cron μž‘μ—…μ„ kubernetesμ—μ„œλ„ μ‹€ν–‰ν•  수 μžˆλ‹€.

yaml νŒŒμΌμ—μ„œ cronjob양식을 λ§Œλ“€μ–΄μ„œ κ΅¬μ„±ν•œλ‹€.

 

 

4.6.1 크둠작 μƒμ„±ν•˜κΈ°

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spec:
  schedule: "0,15,30,45 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: periodic-batch-job
        spec:
          restartPolicy: OnFailure
          containers:
          - name: main
            image: luksa/batch-job

μŠ€μΌ€μ€„μ„€μ •ν•˜κΈ°

  crontabμ—μ„œ μ‚¬μš©ν•˜λŠ” 방식과 λ™μΌν•˜λ‹€.

  λΆ„ μ‹œ 일 μ›” μš”μΌ 순으둜 λ‚˜μ—΄ν•˜λ©°, *둜 κΈ°μž…λ  경우 맀 λ‹¨μœ„λ§ˆλ‹€ λ™μž‘μ‹œν‚΄μ„ μ˜λ―Έν•œλ‹€.

  

μœ„μ˜ yaml파일둜 λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•œλ’€ λ‹€μŒκ³Ό 같이 μ‘°νšŒν•  수 μžˆλ‹€.

root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get cronjob
NAME                              SCHEDULE             SUSPEND   ACTIVE   LAST SCHEDULE   AGE
batch-job-every-fifteen-minutes   0,15,30,45 * * * *   False     0        <none>          28s

 

4.6.2 μŠ€μΌ€μ€„λœ Job의 μ‹€ν–‰ 방법 이해

Job λ¦¬μ†ŒμŠ€λŠ” Crontab λ¦¬μ†ŒμŠ€μ—μ„œ μ˜ˆμ •λœ μ‹œκ°„μ— μƒμ„±λ˜κ³ , job은 podλ₯Ό μƒμ„±ν•œλ‹€.

Jobμ΄λ‚˜ Podκ°€μƒλŒ€μ μœΌλ‘œ 늦게 생성/싀행될 μˆ˜λ„ 있기 λ•Œλ¬Έμ— μ‹œκ°„μ„ λͺ…ν™•νžˆ μ§€ν‚€κ²Œ ν•˜λ €λ©΄ λ³„λ„μ˜ 섀정이 ν•„μš”ν•˜λ‹€.

startingDaedlineSeconds ν•„λ“œλ₯Ό μ§€μ •ν•œλ‹€.

ν•΄λ‹Ή μ˜΅μ…˜μ€ μ˜ˆμ •λœ μ‹œκ°„μ—μ„œ λŠ¦μ–΄λ„ 15초 μ•ˆμ—λŠ” μ‹€ν–‰ λ˜μ–΄μ•Ό ν•˜λ©°, μ•ˆ 될 경우 μ‹€νŒ¨λ‘œ λ‚˜νƒ€λ‚Έλ‹€.

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spec:
  schedule: "* 30 * * *"
  startingDeadlineSeconds: 15

 

'🎯 OpenSource > K8S' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

11. Secret  (0) 2021.05.09
10. ConfigMap  (0) 2021.05.08
08. DaemonSet  (0) 2021.04.05
07. ReplicaSet  (0) 2021.04.05
06. liveness probe  (0) 2021.04.05