Skip to content

Commit 0ebc242

Browse files
committed
[job] feat: add job document to README.md and fix code.
1 parent ace7510 commit 0ebc242

2 files changed

Lines changed: 70 additions & 6 deletions

File tree

README.md

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,11 +1317,21 @@ Secret 的使用方法和前面教程中 ConfigMap 基本一致,这里就不
13171317

13181318
## Job
13191319

1320+
在实际的开发过程中,还有一类任务是之前的资源不能满足的,即一次性任务。例如常见的计算任务,只需要拿到相关数据计算后得出结果即可,无需一直运行。而处理这一类任务的资源就是 Job。
1321+
1322+
> Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。
1323+
>
1324+
> 一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。
1325+
1326+
下面来看一个 Job 的资源定义,其中 Kind 和 metadata.name 是资源类型和名字就不再解释,`completions` 指的是会创建 Pod 的数量,每个 pod 都会完成下面的任务。`parallelism` 指的是并发执行最大数量,例如下面就会先创建 3 个 pod 并发执行任务,一旦某个 pod 执行完成,就会再创建新的 pod 来执行,直到 5 个 pod 执行完成,Job 才会被标记为完成。
1327+
1328+
`restartPolicy = "OnFailure` 的含义和 Pod 生命周期相关,Pod 中的容器可能因为退出时返回值非零, 或者容器因为超出内存约束而被杀死等等。 如果发生这类事件,并且 `.spec.template.spec.restartPolicy = "OnFailure"`, Pod 则继续留在当前节点,但容器会被重新运行。因此,你的程序需要能够处理在本地被重启的情况,或者要设置 `.spec.template.spec.restartPolicy = "Never"`。
1329+
13201330
```yaml
13211331
apiVersion: batch/v1
13221332
kind: Job
13231333
metadata:
1324-
name: echo-job
1334+
name: hello-job
13251335
spec:
13261336
parallelism: 3
13271337
completions: 5
@@ -1331,13 +1341,55 @@ spec:
13311341
containers:
13321342
- name: echo
13331343
image: busybox
1334-
command: ["echo", "Running in a job"]
1344+
command: [for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done]
13351345
```
13361346

1337-
TODO
1347+
通过下面的命令创建 job,可以通过 `kubectl get pods -w` 来观察 job 创建 pod 的过程和结果。最后可以通过 `logs` 命令查看日志。
1348+
1349+
```shell
1350+
kubectl apply -f hello-job.yaml
1351+
1352+
kubectl get jobs
1353+
# NAME COMPLETIONS DURATION AGE
1354+
# hello-job 5/5 19s 83s
1355+
1356+
kubectl get pods
1357+
# NAME READY STATUS RESTARTS AGE
1358+
# hello-job--1-5gjjr 0/1 Completed 0 34s
1359+
# hello-job--1-8ffmn 0/1 Completed 0 26s
1360+
# hello-job--1-ltsvm 0/1 Completed 0 34s
1361+
# hello-job--1-mttwv 0/1 Completed 0 29s
1362+
# hello-job--1-ww2qp 0/1 Completed 0 34s
1363+
1364+
kubectl logs -f hello-job--1-5gjjr
1365+
# 1
1366+
# ...
1367+
```
1368+
1369+
Job 完成时不会再创建新的 Pod,不过已有的 Pod [通常](https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy)也不会被删除。 保留这些 Pod 使得你可以查看已完成的 Pod 的日志输出,以便检查错误、警告或者其它诊断性输出。 可以使用 `kubectl` 来删除 Job(例如 `kubectl delete -f hello-job.yaml`)。当使用 `kubectl` 来删除 Job 时,该 Job 所创建的 Pod 也会被删除。
13381370

13391371
## CronJob
13401372

1373+
*CronJob* 可以理解为定时任务,创建基于 Cron 时间调度的 [Jobs](https://kubernetes.ion/docs/concepts/workloads/controllers/job/)。
1374+
1375+
> CronJob 用于执行周期性的动作,例如备份、报告生成等。 这些任务中的每一个都应该配置为周期性重复的(例如:每天/每周/每月一次); 你可以定义任务开始执行的时间间隔。
1376+
1377+
Cron 时间表语法
1378+
1379+
```
1380+
# ┌───────────── 分钟 (0 - 59)
1381+
# │ ┌───────────── 小时 (0 - 23)
1382+
# │ │ ┌───────────── 月的某天 (1 - 31)
1383+
# │ │ │ ┌───────────── 月份 (1 - 12)
1384+
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
1385+
# │ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat
1386+
# │ │ │ │ │
1387+
# │ │ │ │ │
1388+
# * * * * *
1389+
```
1390+
1391+
用法除了需要加上 cron 表达式之外,其余基本和 Job 保持一致。
1392+
13411393
```yaml
13421394
apiVersion: batch/v1
13431395
kind: CronJob
@@ -1353,7 +1405,7 @@ spec:
13531405
containers:
13541406
- name: echo
13551407
image: busybox
1356-
command: ["echo", "Triggered by a CronJob"]
1408+
command: [for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done]
13571409
```
13581410

13591411
TODO
@@ -1372,3 +1424,12 @@ helm rollback hello-helm
13721424

13731425
TODO
13741426

1427+
1428+
1429+
1430+
1431+
## Dashboard
1432+
1433+
### K9s
1434+
1435+
![83ybd4](https://cdn.jsdelivr.net/gh/guangzhengli/PicURL@master/uPic/83ybd4.png)
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apiVersion: batch/v1
22
kind: Job
33
metadata:
4-
name: echo-job
4+
name: hello-job
55
spec:
66
parallelism: 3
77
completions: 5
@@ -11,4 +11,7 @@ spec:
1111
containers:
1212
- name: echo
1313
image: busybox
14-
command: ["echo", "Running in a job"]
14+
command:
15+
- "bin/sh"
16+
- "-c"
17+
- "for i in 1 2 3 4 5 6 7 8 9 ; do echo $i ; done"

0 commit comments

Comments
 (0)