- Jobs được thiết kế để quản lý công việc một cách hàng loạt, nơi các pods có thể thực thi một hoặc nhiều.
- Mặc định, jobs là được thực thi 1 pod cho đến khi thành công và chấm dứt.
- Trong jobs, có 3 loại đơn giản đó là
one-shot
,paralle
vàworkqueue
, trong bài này mình sẽ nói đếnone-shot
vàparallel
.
One-shot
- One-shot là jobs cung cấp một phương thức để chạy duy nhất 1 pod cho đến khi thành công và kết thúc.
- Trong ví dụ, mình sẽ deploy 1
pod ubuntu
và echo ra dòng chữhello, i am opendev
. - oneshot.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> batch/v1 <span class="token key atrule">kind</span><span class="token punctuation">:</span> Job <span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">template</span><span class="token punctuation">:</span> <span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">containers</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">image</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">command</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"bash"</span><span class="token punctuation">]</span> <span class="token key atrule">args</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"-c"</span><span class="token punctuation">,</span> <span class="token string">"echo hello, i am opendev "</span><span class="token punctuation">]</span> <span class="token key atrule">restartPolicy</span><span class="token punctuation">:</span> Never |
- run câu lệnh:
1 2 | kubectl apply -f oneshot.yaml |
- kiểm tra xem jobs:
1 2 | kubectl get jobs |
- kiểm tra xem pods:
1 2 | kubectl get pods |
- Sau khi pod run complete, mình kiểm tra xem log của pod có phải là
hello, i am opendev
không, nếu có log như vậy là thành công rồi.
Parallelism
- Bây giờ có 1 usecase đòi hỏi thời gian xử lý lâu, và muốn tăng tốc độ xử lý lên thì có thể dùng parallel.
- Mình sẽ chạy parallel 1 lần là 3 pod, chạy 3 lần với 9 pod hoàn thành.
- parallel.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> batch/v1 <span class="token key atrule">kind</span><span class="token punctuation">:</span> Job <span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">parallelism</span><span class="token punctuation">:</span> <span class="token number">3</span> <span class="token key atrule">completions</span><span class="token punctuation">:</span> <span class="token number">9</span> <span class="token key atrule">template</span><span class="token punctuation">:</span> <span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">containers</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">image</span><span class="token punctuation">:</span> ubuntu <span class="token key atrule">command</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"bash"</span><span class="token punctuation">]</span> <span class="token key atrule">args</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"-c"</span><span class="token punctuation">,</span> <span class="token string">"echo hello, i am opendev "</span><span class="token punctuation">]</span> <span class="token key atrule">restartPolicy</span><span class="token punctuation">:</span> Never |
- Giải thích:
- trong
yaml
cần thêm 2 thuộc tính trongspec
:parallelism
là số lượng pods thực hiện đồng thời,completions
là số lượng pods cần phải hoàn thành.
- trong
- run câu lệnh get pod
1 2 | kubectl get pods |
- Kiểm tra job đã thực thi được bao nhiêu pod complete:
1 2 | kubectl get jobs |
- Mình đã demo đơn giản về jobs:
oneshot
vàparallel
, có gì thắc mắc thì liên hệ mình hỗ trợ thêm.
Cảm ơn.