AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
前面介绍的 ReplicaSet 和 DaemonSet 监控管理的 Pod 会持续不断的运行任务,这样的任务是没有完成态的,如果其中的进程退出了 Pod 会重新启动。如果我们想要执行一个可完成的任务,当进程终止后 Pod 不再重新启动,那么就需要使用任务(Job)。 当节点发生故障的时候,该节点上由 Job 管理的 Pod 会按照 ReplicaSet 的 Pod 的方式,重新安排到其它节点;如果进程异常退出,可以将 Job 配置为重新启动容器。 现在我们来模拟一个任务,有一个构建在 busybox 上的容器,该容器会调用 sleep 命令休息两分钟,然后就正常退出。 在`/home/shiyanlou`目录下新建`sleep.yaml`文件并向其中写入如下代码: ~~~yaml apiVersion: batch/v1 kind: Job metadata: name: batch-job spec: template: metadata: labels: app: batch-job spec: restartPolicy: OnFailure containers: - name: main image: luksa/batch-job ~~~ 其中的 restartPolicy 属性定义了当容器中的进程运行结束时 Kubernetes 会如何做,默认的值为 Always,表示的是重新启动并运行;所以在使用 Job 时我们必须修改为 OnFailure 或是 Never。 执行创建: ~~~bash $ kubectl create -f sleep.yaml job.batch/batch-job created ~~~ 查看 Job 和 Pod: ~~~bash $ kubectl get jobs NAME COMPLETIONS DURATION AGE batch-job 0/1 17s 17s $ kubectl get po NAME READY STATUS RESTARTS AGE batch-job-zknt4 1/1 Running 0 1m mysql-ds-fmtcr 1/1 Running 0 30m mysql-ds-mkwn2 1/1 Running 0 30m nginx-gpu 1/1 Running 0 1h ~~~ 等待两分钟,当任务执行完成后再重看一次: ~~~bash $ kubectl get pod NAME READY STATUS RESTARTS AGE batch-job-zknt4 0/1 Completed 0 4m mysql-ds-fmtcr 1/1 Running 0 33m mysql-ds-mkwn2 1/1 Running 0 33m nginx-gpu 1/1 Running 0 1h $ kubectl get job NAME COMPLETIONS DURATION AGE batch-job 1/1 2m8s 7m17s ~~~ 如果你想要一项任务按顺序依次执行 10 次,可以使用 completions 属性: ~~~yaml spec: completions: 10 template: ... ~~~ 如果你想要一项任务总共运行 10 次,每次可以并行执行 3 个 Pod,可以使用 parallelism 属性: ~~~yaml spec: completions: 10 parallelism: 3 template: ... ~~~