Job

Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束

——————————————————————————————————————————————

特殊说明:

  • spec.template格式同Pod
  • RestartPolicy仅支持Never或OnFailure
  • 单个Pod时,默认Pod成功运行后Job即结束
  • .spec.completions 标志Job结束需要成功运行的Pod个数,默认为1
  • .spec.parallelism 标志并行运行的Pod的个数,默认为1
  • spec.activeDeadlineSeconds 标志失败Pod的重试最大时间,超过这个时间不会继续重试

删除pod

#查看
[root@master ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   10/10   10           10          5h4m
#删除指定命令 空间-pod
[root@master ~]# kubectl delete deployment nginx-deployment
deployment.extensions "nginx-deployment" deleted
[root@master ~]# kubectl get pod
No resources found.

创建文件
vim job.yaml

apiVersion: batch/v1
kind: Job  
metadata: 
  name: pi    
spec:
  template: 
    metadata:
      name: pi
    spec:
      containers: 
      - name: pi
        image: perl 
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never                                     
[root@master ~]# kubectl get job
NAME   COMPLETIONS   DURATION   AGE
pi     1/1           2m51s      6m41s
[root@master ~]# kubectl get job -o wide
NAME   COMPLETIONS   DURATION   AGE     CONTAINERS   IMAGES   SELECTOR
pi     1/1           2m51s      6m49s   pi           perl     controller-uid=e89fb1d8-a4e

[root@master ~]# kubectl get pod
NAME       READY   STATUS      RESTARTS   AGE
pi-q6mnl   0/1     Completed   0          7m10s
[root@master ~]# kubectl get pod -o wide
NAME       READY   STATUS      RESTARTS   AGE     IP               NODE    NOMINATED NODE   READINESS GATES
pi-q6mnl   0/1     Completed   0          7m16s   10.244.166.164   node1   <none>           <none>

Job演示

master node1 node2传入镜像perl.tar并加载镜像

#3台主机都要做
[root@master ~]# ls
anaconda-ks.cfg  calico.yaml      initial-setup-ks.cfg  perl.tar     rs.yaml  模板  图片  下载  桌面
auto_aliyun.sh   deployment.yaml  job.yaml              perl.tar.gz  公共     视频  文档  音乐
[root@master ~]# docker load -i perl.tar
660314270d76: Loading layer  119.2MB/119.2MB
6d5a64ea8f37: Loading layer  17.11MB/17.11MB
74e2ede3b29c: Loading layer  17.83MB/17.83MB
97e8dd85db4e: Loading layer  149.8MB/149.8MB
6e302bbcacce: Loading layer  520.7MB/520.7MB
c636bd55ab5a: Loading layer  3.072kB/3.072kB
3a73b338e8fc: Loading layer  55.47MB/55.47MB
Loaded image: perl:latest

查看

[root@master ~]# kubectl get job
NAME   COMPLETIONS   DURATION   AGE
pi     1/1           2m51s      103m
#查看pod日志
[root@master ~]# kubectl  log pi-q6mnl 
log is DEPRECATED and will be removed in a future version. Use logs instead.
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

CronJob Spec

  • spec.template格式同Pod
  • RestartPolicy仅支持Never或OnFailure
  • 单个Pod时,默认Pod成功运行后Job即结束
  • .spec.completions 标志Job结束需要成功运行的Pod个数,默认为1
  • .spec.parallelism 标志并行运行的Pod的个数,默认为1
  • spec.activeDeadlineSeconds 标志失败Pod的重试最大时间,超过这个时间不会继续重试

Never:永不重启 OnFailure:只有在失败的时候重启
.spec.completions 标志Job结束需要成功运行的Pod个数,默认为1 :返回值为0

CronJob

**Cron Job管理基于时间的job,即: **

  • 在给定时间点只运行一次
  • 周期性地在给定时间点运行

使用条件:当前使用的Kubenetes集群,版本>=1.8(对Cronjob)

与deployment的区别:deployment是通过创建RS来进行pod的管理。Cron job是通过创建pod进行管理

典型的用法如下所示:

  • 在给定的时间点调度 Job 运行
  • 创建周期性运行的 Job,例如:数据库备份、发送邮件

CronJob Spec

  • .spec.schedule :调度,必需字段,指定任务运行周期,格式同 Cron
  • .spec.jobTemplate :Job 模板,必需字段,指定需要运行的任务,格式同 Job
  • .spec.startingDeadlineSeconds :启动 Job 的期限(秒级别),该字段是可选的。如果因为任何原因而错
    过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。如果没有指定,则没有期限
  • .spec.concurrencyPolicy :并发策略,该字段也是可选的。它指定了如何处理被 Cron Job 创建的 Job 的
    并发执行。只允许指定下面策略中的一种:
    * Allow (默认):允许并发运行 Job
    * Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个
    * Replace :取消当前正在运行的 Job,用一个新的来替换
    注意,当前策略只能应用于同一个 Cron Job 创建的 Job。如果存在多个 Cron Job,它们创建的 Job 之间总
    是允许并发运行。
  • .spec.suspend :挂起,该字段也是可选的。如果设置为 true ,后续所有执行都会被挂起。它对已经开始
    执行的 Job 不起作用。默认值为 false 。
  • .spec.successfulJobsHistoryLimit.spec.failedJobsHistoryLimit :历史限制,是可选的字段。它
    们指定了可以保留多少完成和失败的 Job。默认情况下,它们分别设置为 31 。设置限制的值为 0 ,相
    关类型的 Job 完成后将不会被保留。

演示CronJob

创建文件Cronjob.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *" #意思是每一分钟创建一个job和pod
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              args:
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

运行:

kubectl apply -f Cronjob.yaml

查看:

[root@apiserver ~]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
hello-1577785980-ncn2r   0/1     Completed   0          18s
#要等待````

[root@apiserver ~]# kubectl get cronjobs
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        41s             89s

一分钟重启

[root@apiserver ~]# kubectl get pod -w
NAME                     READY   STATUS      RESTARTS   AGE
hello-1577785980-ncn2r   0/1     Completed   0          52s
hello-1577786040-hkn2r   0/1     Pending     0          0s
hello-1577786040-hkn2r   0/1     Pending     0          0s
hello-1577786040-hkn2r   0/1     ContainerCreating   0          0s
hello-1577786040-hkn2r   0/1     ContainerCreating   0          1s
hello-1577786040-hkn2r   0/1     Completed           0          2s
hello-1577786040-hkn2r   0/1     Completed           0          3s
#查看
[root@apiserver ~]# kubectl get pod
NAME                     READY   STATUS              RESTARTS   AGE
hello-1577785980-ncn2r   0/1     Completed           0          3m2s
hello-1577786040-hkn2r   0/1     Completed           0          2m2s
hello-1577786100-xq9cr   0/1     Completed           0          62s
hello-1577786160-85dw4   0/1     ContainerCreating   0          2s

删除pod
#注意,删除 cronjob 的时候不会自动删除 job,这些 job 可以用 kubectl delete job 来删除 $ kubectl delete cronjob hello cronjob "hello" deleted

[root@master ~]# kubectl delete Cronjob --all
cronjob.batch "hello" deleted
[root@master ~]# kubectl get pod
No resources found.
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐