ํ๋ ์์ฝ ์คํ
https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/
Job
- ํน์ ๊ฐ์์ ํ๋๋ฅผ ์ ์์ ์ผ๋ก ์คํ/์ข
๋ฃํจ์ ๋ณด์ฅํจ.
- ์ปจํ
์ด๋๋ฅผ ํ๋ก์ธ์ค์ฒ๋ผ ์คํํจ
- ์ฌ๋ฌ ํ๋๋ฅผ ๋ณ๋ ฌ์ผ๋ก๋ ์คํ๊ฐ๋ฅ
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
spec.completions
: ๋ชฉํ ์๋ฃ ํ๋ ๊ฐ์
spec.parallelism
: ๋์ ์คํ ๊ฐ๋ฅ ํ๋ ๊ฐ์
- ์ก apiVersion: batch/v1
- restartPolicy: Never(ํ๋๊ฐ ์ฑ๊ณต์ผ๋ก ๋๋๊ฒ ํจ, ์ ํ๋ ์์ฑ), OnFailure(ํ๋์ ์ปจํ
์ด๋๊ฐ ๋น์ ์ ์ข
๋ฃ ๋ฌ๊ฑฐ๋, ์ ์ ์ข
๋ฃ ๋์ง ์์์๋ ์ปจํ
์ด๋ ์ฌ์์)
- backOffLimit: ์ก ์คํ ์คํจ์ ์๋์ผ๋ก ์ต๋ ๋ช๋ฒ ์ฌ์์ํ ์ง ์ค์ (default=6)
๋ณ๋ ฌ์ฑ
- completions๋ฅผ ํตํด ์ ์์๋ฃ ์ก์ ๊ฐ์๋ฅผ ์ค์ ํ๋ค๋ฉด, ๋ณ๋ ฌ ์คํ ๊ฐ์๊ฐ ๋จ์์๋ ์๋ฃ ๋๊ธฐ ์ก์ ๊ฐ์๋ณด๋ค ํฌ๋ฉด ๋ณ๋ ฌ์คํ์ ๊ฐ์๊ฐ ์ค์ด๋ฌ
- ์๋ฃ ๋ชฉํ ์ก 10๊ฐ, ์๋ฃ๋ ์ก 9๊ฐ, ๋ณ๋ ฌ์คํ ์ก 3 ์ด๋ผ๋ฉด -> ํ๋๋ 1๊ฐ๋ง ์คํ๋จ
- ์ํฌ ํ์ฉ ์ก(completions๋ฏธ ์ค์ )์์๋ ํ๋ํ๋๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋์์ ๋, ์๋ก์ด ํ๋ ์์ฑ๋์ง ์์.
- ์ก ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ์ํ์ง ๋ชปํ๊ฑฐ๋ ๊ถํ ๋ถ์กฑ๋ฑ์ผ๋ก ํ๋๋ฅผ ์คํํ์ง ๋ชปํ ๋๋ ์์
- ์ก์์ ์คํ์ํจ ํ๋๋ค์ด ๋๋ฌด ๋ง์ด ์คํจํ์ผ๋ฉด ์ก ์ปจํธ๋กค๋ฌ๊ฐ ์๋ก์ด ํ๋ ์์ฑ์ ์ ํํจ.
- ํ๋๊ฐ gracefulํ๊ฒ ์ข
๋ฃ๋จ
Job ์ข
๋ฅ
1. ๋น-๋ณ๋ ฌ(Non-parallel), ๋จ์ผ ์ก:
- ์ผ๋ฐ์ ์ผ๋ก, ํ๋๊ฐ ์คํจํ์ง ์์ ํ, ํ๋์ ํ๋๋ง ์์๋๋ค.
- ํ๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ข
๋ฃํ์๋ง์ ์ฆ์ ์ก์ด ์๋ฃ๋๋ค.
2. ๊ณ ์ ์ (fixed)์ธ ์๋ฃ ํ์ ๋ฅผ ๊ฐ์ง ๋ณ๋ ฌ ์ก:
- .spec.completions ์ 0์ด ์๋ ์์ ๊ฐ์ ์ง์ ํ๋ค.
- ์ก์ ์ ์ฒด ์์
์ ๋ํ๋ด๋ฉฐ, .spec.completions ์ฑ๊ณตํ ํ๋๊ฐ ์์ ๋ ์๋ฃ๋๋ค.
- .spec.completionMode="Indexed" ๋ฅผ ์ฌ์ฉํ ๋, ๊ฐ ํ๋๋ 0์์ .spec.completions-1 ๋ฒ์ ๋ด์ ์๋ก ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ธ์จ๋ค.
3. ์์
ํ(queue) ๊ฐ ์๋ ๋ณ๋ ฌ ์ก:
- .spec.completions ๋ฅผ ์ง์ ํ์ง ์๊ณ , .spec.parallelism ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค.
- ํ๋๋ ๊ฐ์ ๋๋ ์ธ๋ถ ์๋น์ค ๊ฐ์ ์กฐ์ ์ ํตํด ๊ฐ๊ฐ์ ์์
์ ๊ฒฐ์ ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ํ๋๋ ์์
ํ์์ ์ต๋ N ๊ฐ์ ํญ๋ชฉ์ ์ผ๊ด๋ก ๊ฐ์ ธ์ฌ(fetch) ์ ์๋ค.
- ๊ฐ ํ๋๋ ๋ชจ๋ ํผ์ด๋ค์ ์์
์ด ์๋ฃ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ํ๋จํ ์ ์์ผ๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ฒด ์ก์ด ์๋ฃ๋๊ฒ ํ๋ค.
- ์ก์ ๋ชจ๋ ํ๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ข
๋ฃ๋๋ฉด, ์๋ก์ด ํ๋๋ ์์ฑ๋์ง ์๋๋ค.
- ํ๋ ์ด์์ ํ๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ข
๋ฃ๋๊ณ , ๋ชจ๋ ํ๋๊ฐ ์ข
๋ฃ๋๋ฉด ์ก์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ค.
- ์ฑ๊ณต์ ์ผ๋ก ์ข
๋ฃ๋ ํ๋๊ฐ ํ๋๋ผ๋ ์๊ธด ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ๋๋ค์ ํด๋น ์์
์ ์ง์ํ์ง ์์์ผ ํ๋ฉฐ ์ด๋ ํ ์ถ๋ ฅ๋ ์์ฑํ๋ฉด ์ ๋๋ค. ํ๋๋ค์ ๋ชจ๋ ์ข
๋ฃ๋๋ ๊ณผ์ ์ ์์ด์ผ ํ๋ค.
Job ์ญ์ ์, ์์ฑ๋ ํ๋๋ ๋ชจ๋ ์ญ์ ๋จ
Cron Job
์ก์ ์๊ฐ ๊ธฐ์ค์ผ๋ก ๊ด๋ฆฌํ๋๋ก ์์ฑ
- ์ง์ ํ ์๊ฐ์ ํ๋ฒ๋ง ์ก์ ์คํ
- ์ง์ ํ ์๊ฐ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ก์ ๋ฐ๋ณต ์คํ
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 600
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
.spec.startingDeadlineSeconds
: ์ง์ ๋ ์๊ฐ์ ํฌ๋ก ์ก์ด ์คํ๋์ง ๋ชปํ์๋, ์ค์ ํ ์๊ฐ๊น์ง ์ง๋๋ฉด ํฌ๋ก ์ก์ด ์คํ๋์ง ์๊ฒํจ
.spec.concurrencyPolicy
: ํฌ๋ก ์ก์ด ์คํํ๋ ์ก์ ๋์์ฑ ๊ด๋ฆฌ
- Allow: ๊ธฐ๋ณธ๊ฐ, ํฌ๋ก ์ก์ด ์ฌ๋ฌ๊ฐ ์ก์ ๋์์ ์คํํ๋๋ก ํจ
- Forbid: ์ก์ ๋์์ ์คํํ์ง ์๋๋ก ํจ.
- ์ด์ ์คํ ์ก์ด ์ ์์ข
๋ฃ ์๋๊ณ ์คํ์ค์ผ๋, ์๋ก์ด ์ก์ ์คํํด์ผํ๋ ์๊ฐ์ด ๋๋ค๋ฉด,
- ํฌ๋ก ์ก์ ํด๋น์๊ฐ์ ์๋ก์ด ์ก์ ์คํํ์ง ์๊ณ ๋ค์ ์ง์ ๋ ์๊ฐ์ ์ก์ ์คํ์ํด.
- Replace: ์ด์ ์คํ ์ก์ด ์คํ์ค์ธ ์ํ์์ ์๋ก์ด ์ก ์คํ ์๊ฐ์ด ๋๋ฉด, ์๋ก์ด ์ก์ผ๋ก ๋์ฒดํจ.
# ์ค์ผ์ค ๋ฌธ๋ฒ
# โโโโโโโโโโโโโโ ๋ถ (0 - 59)
# โ โโโโโโโโโโโโโโ ์ (0 - 23)
# โ โ โโโโโโโโโโโโโโ ์ผ (1 - 31)
# โ โ โ โโโโโโโโโโโโโโ ์ (1 - 12)
# โ โ โ โ โโโโโโโโโโโโโโ ์์ผ (0 - 6) (์ผ์์ผ๋ถํฐ ํ ์์ผ๊น์ง;
# โ โ โ โ โ ํน์ ์์คํ
์์๋ 7๋ ์ผ์์ผ)
# โ โ โ โ โ ๋๋ sun, mon, tue, wed, thu, fri, sat
# โ โ โ โ โ
# * * * * *