https://www.kubernetes.org.cn/job
https://www.kubernetes.org.cn/cronjobnode
Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束.数据库
Kubernetes支持如下几种Job:api
Job类型 | 使用示例 | 行为 | completions | Parallelism |
---|---|---|---|---|
一次性Job | 数据库迁移 | 建立一个Pod直至其成功结束 | 1 | 1 |
固定结束次数的Job | 处理工做队列的Pod | 依次建立一个Pod运行直至completions个成功结束 | 2+ | 1 |
固定结束次数的并行Job | 多个Pod同时处理工做队列 | 依次建立多个Pod运行直至completions个成功结束 | 2+ | 2+ |
并行Job | 多个Pod同时处理工做队列 | 建立一个或多个Pod直至有一个成功结束 | 1 | 2+ |
第一步:编写job的yml文件app
apiVersion: batch/v1 kind: Job metadata: name: job spec: template: spec: restartPolicy: Never containers: - name: job image: busybox command: ["echooo","Hello World"]
第二步:执行yml文件3d
╭─root@node1 ~ ╰─➤ kubectl apply -f job.yml job.batch/job created
第三步:查看podrest
╭─root@node1 ~ ╰─➤ kubectl get pod NAME READY STATUS RESTARTS AGE job-jhlsf 0/1 ContainerCannotRun 0 53s job-ldxnr 0/1 ContainerCannotRun 0 23s job-m6cpf 0/1 ContainerCreating 0 3s job-m8skh 0/1 ContainerCannotRun 0 64s
问题发现:建立了不少pod,为何?code
解答:Job Controller负责根据Job Spec建立Pod,并持续监控Pod的状态,直至其成功结束。若是失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否建立新的Pod再次重试任务。若是重启策略为OnFailure的话,pod会一直重启!blog
第一步:编写yml文件队列
apiVersion: batch/v1 kind: Job metadata: name: job spec: completions: 2 # 完成数 parallelism: 2 # 并行数 template: spec: restartPolicy: OnFailure containers: - name: job image: busybox command: ["/bin/sh","-c","sleep 5;echo Hello World"]
第二步:运行crontab
╭─root@node1 ~ ╰─➤ kubectl apply -f job.yml job.batch/job created
第三步:查看
╭─root@node1 ~ ╰─➤ kubectl get pod NAME READY STATUS RESTARTS AGE job-x5tfw 1/1 Running 0 35s job-zx8p2 0/1 Completed 0 35s ╭─root@node1 ~ ╰─➤ kubectl logs job-x5tfw Hello World ╭─root@node1 ~ ╰─➤ kubectl logs job-zx8p2 Hello World
CronJob即定时任务,就相似于Linux系统的crontab,在指定的时间周期运行指定的任务。
第一步:编写yml文件
apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob1 spec: schedule: "* * * * *" jobTemplate: metadata: name: job spec: template: metadata: name: pod spec: restartPolicy: OnFailure containers: - name: busybox image: busybox command: ["echo","hello"] imagePullPolicy: IfNotPresent
第二步:运行
╭─root@node1 ~ ╰─➤ kubectl apply -f cronjob.yml cronjob.batch/cronjob1 created
第三步: 查看
╭─root@node1 ~ ╰─➤ kubectl get pod NAME READY STATUS RESTARTS AGE cronjob1-1567149060-vjqtp 0/1 Completed 0 43s ╭─root@node1 ~ ╰─➤ kubectl logs cronjob1-1567149060-vjqtp hello