You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> 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
+
1320
1330
```yaml
1321
1331
apiVersion: batch/v1
1322
1332
kind: Job
1323
1333
metadata:
1324
-
name: echo-job
1334
+
name: hello-job
1325
1335
spec:
1326
1336
parallelism: 3
1327
1337
completions: 5
@@ -1331,13 +1341,55 @@ spec:
1331
1341
containers:
1332
1342
- name: echo
1333
1343
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]
1335
1345
```
1336
1346
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 也会被删除。
0 commit comments