其中,$ITEM 作为各个 Job 项的标识。接着,使用以下脚本,根据 Job 模板创建三个 Job 配置文件:
#!/bin/bash for i in app book phone do cat myjob_tmp.yaml | sed "s/\$ITEM/$i/g" > ./jobs/job-$i.yaml done最后,创建三个 Job 对象,如下:
单 Job 多 Pod 执行批量任务这种方式是用一个队列来存放任务,然后启动一个 Job 来执行任务,Job 可以根据需求启动多个 Pod 来承载任务的执行。定义下面的配置文件:
apiVersion: batch/v1 kind: Job metadata: name: myjob spec: completions: 6 parallelism: 2 template: metadata: name: myjob spec: containers: - name: hello image: busybox command: ["echo", "hello CloudDeveloper"] restartPolicy: OnFailure这里用到了上面说的两个参数:completions 和 parallelism,表示每次并行运行两个 Pod,直到总共 6 个 Pod 成功运行完成。如下:
可以看到 DESIRED 和 SUCCESSFUL 最终均为 6,符合预期,实际上也有 6 个 Pod 成功运行并退出,呈 Completed 状态。
随便查看其中一个 Pod 的历史执行情况:
# kubectl logs myjob-5lfnp hello CloudDeveloper 定时任务 CronJob定义一个 CronJob 配置文件,如下:
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox command: ["echo", "Hello CloudDeveloper"] restartPolicy: OnFailurekind 类型为 CronJob,spec.schedule 表示定时调度,指定什么时候运行 Job,格式与 Linux 的 Crontab 命令是一样的,这里 */1 * * * * 的含义是每一分钟启动一次。
创建 CronJob 对象,通过 kubectl get cronjob 查看 CronJob 的状态:
过一段时间再查看 Pod 的状态:
可以看到,此时产生了 3 个 Pod,3 个 Jobs,这是每隔一分钟就会启动一个 Job。执行 kubectl logs 查看其中一个的历史执行情况:
# kubectl logs hello-1536764760-lm5kt Hello CloudDeveloper到此,本文就结束了。我们从理论结合实践,梳理了 Job 的几种类型,下文我们开始看一种有状态的 Controller——StatefulSet。
同样,需要学习资料的后台回复“K8S” 和 “K8S2”,想加群学习回复“加群”。
我的公众号 cloud_dev,号内有大量书籍和视频资源,后台回复「1024」即可领取,分享的内容包括但不限于云计算虚拟化、容器、OpenStack、K8S、雾计算、网络、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++编程技术等内容,欢迎大家关注。