1、创建临时任务的JOB对象

创建一个名字叫“sleep-job”的job对象,它随机睡眠一段时间再退出,模拟运行时间较长的作业(比如MapReduce)。Job的参数设置成30秒超时,最多重试3次,总共需要运行完4个Pod,但同一时刻最多并发2个Pod:

  • activeDeadlineSeconds:设置Pod运行的超时时间。
  • backoffLimit:设置Pod的失败重试次数。
  • completions:Job完成需要运行多少个Pod,默认是1个。
  • parallelism:它与completions相关,表示允许并发运行的Pod数量,避免过多占用资源。
[highgo@master 13]$ kubectl create job echo-job --image=busybox --dry-run=client -o yaml  # 生成模板文件
[highgo@master 13]$ cat sleep-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: sleep-job

spec:
  activeDeadlineSeconds: 30
  backoffLimit: 3
  completions: 4
  parallelism: 2

  template:
    spec:
      containers:
      - image: busybox
        name: sleep-job
        imagePullPolicy: IfNotPresent
        command:
          - sh
          - -c
          - sleep $(($RANDOM % 10 + 1)) && echo done
      restartPolicy: OnFailure
[highgo@master 13]$ kubectl apply -f sleep-job.yaml
job.batch/sleep-job created
[highgo@master 13]$ kubectl get pod -w  # 查看pod的创建过程
NAME              READY   STATUS    RESTARTS        AGE
sleep-job-6mq65   1/1     Running   0               4s
sleep-job-kfdqg   1/1     Running   0               4s
sleep-job-kfdqg   0/1     Completed   0               6s
sleep-job-kfdqg   0/1     Completed   0               8s
sleep-job-bc7wr   0/1     Pending     0               0s
sleep-job-bc7wr   0/1     Pending     0               0s
sleep-job-bc7wr   0/1     ContainerCreating   0               0s
sleep-job-bc7wr   1/1     Running             0               1s
sleep-job-6mq65   0/1     Completed           0               11s
sleep-job-bc7wr   0/1     Completed           0               5s
sleep-job-6mq65   0/1     Completed           0               13s
sleep-job-clvv9   0/1     Pending             0               0s
sleep-job-clvv9   0/1     Pending             0               0s
sleep-job-clvv9   0/1     ContainerCreating   0               0s
sleep-job-clvv9   1/1     Running             0               1s
sleep-job-bc7wr   0/1     Completed           0               7s
sleep-job-clvv9   0/1     Completed           0               12s
sleep-job-clvv9   0/1     Completed           0               14s
^C[highgo@master 13]$ kubectl get pod  # 4个pod全都创建完毕
NAME              READY   STATUS      RESTARTS        AGE
sleep-job-6mq65   0/1     Completed   0               64s
sleep-job-bc7wr   0/1     Completed   0               56s
sleep-job-clvv9   0/1     Completed   0               51s
sleep-job-kfdqg   0/1     Completed   0               64s
[highgo@master 13]$ kubectl get job
NAME        COMPLETIONS   DURATION   AGE
sleep-job   4/4           27s        68s

2、创建定时任务的JOB对象

[highgo@master 13]$ kubectl create cj echo-cj --image=busybox --schedule=""  --dry-run=client -o yaml  # 生成模板文件

发现有三层连续的spec嵌套:

  • 第一个spec是CronJob自己的对象规格声明
  • 第二个spec从属于“jobTemplate”,它定义了一个Job对象。
  • 第三个spec从属于“template”,它定义了Job里运行的Pod。

除了定义Job对象的“jobTemplate”字段之外,CronJob还有一个新字段就是“schedule”,用来定义任务周期运行的规则。它使用的是标准的Cron语法,指定分钟、小时、天、月、周,和Linux上的crontab是一样的。

[highgo@master 13]$ cat cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: echo-cj

spec:
  schedule: '*/1 * * * *'
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - image: busybox
            name: echo-cj
            imagePullPolicy: IfNotPresent
            command: ["/bin/echo"]
            args: ["hello", "world"]
          restartPolicy: OnFailure
[highgo@master 13]$ kubectl apply -f cronjob.yaml
cronjob.batch/echo-cj created
[highgo@master 13]$ kubectl get cj
NAME      SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
echo-cj   */1 * * * *   False     0        9s              19s
[highgo@master 13]$ kubectl get job
NAME               COMPLETIONS   DURATION   AGE
echo-cj-29050640   1/1           3s         2m50s
echo-cj-29050641   1/1           3s         110s
echo-cj-29050642   1/1           3s         50s
[highgo@master 13]$ kubectl get pod
NAME                     READY   STATUS      RESTARTS        AGE
echo-cj-29050640-5d9tp   0/1     Completed   0               2m59s
echo-cj-29050641-tc6nx   0/1     Completed   0               119s
echo-cj-29050642-245nx   0/1     Completed   0               59s
[highgo@master 13]$ kubectl delete cj echo-cj   # 删除cronjob以后,对应的job和pod都会被删除
cronjob.batch "echo-cj" deleted
[highgo@master 13]$ kubectl get cj
No resources found in default namespace.
[highgo@master 13]$ kubectl get pod
NAME    READY   STATUS    RESTARTS        AGE
[highgo@master 13]$ kubectl get job
No resources found in default namespace.
[highgo@master 13]$ kubectl get pod
NAME    READY   STATUS    RESTARTS        AGE
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐