二十九、Kubernetes中CronJob(CJ)详解

导读:本篇文章讲解 二十九、Kubernetes中CronJob(CJ)详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1、概述

在kubernetes中,有很多类型的pod控制器,每种都有自己的适合的场景,常见的有下面这些:

  • ReplicationController:比较原始的pod控制器,已经被废弃,由ReplicaSet替代

  • ReplicaSet:保证副本数量一直维持在期望值,并支持pod数量扩缩容,镜像版本升级

  • Deployment:通过控制ReplicaSet来控制Pod,并支持滚动升级、回退版本

  • Horizontal Pod Autoscaler:可以根据集群负载自动水平调整Pod的数量,实现削峰填谷

  • DaemonSet:在集群中的指定Node上运行且仅运行一个副本,一般用于守护进程类的任务

  • Job:它创建出来的pod只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务

  • Cronjob:它创建的Pod负责周期性任务控制,不需要持续后台运行

  • StatefulSet:管理有状态应用

在前面文章中我们详解了ReplicaSet、Deployment、Horizontal Pod Autoscaler、DaemonSet、Job控制器,这篇我们详解CronJob(CJ)

2、CronJob(CJ)详解

        CronJob控制器以 Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点重复运行的方式。也就是说,CronJob可以在特定的时间点(反复的)去运行job任务

二十九、Kubernetes中CronJob(CJ)详解

CronJob的资源清单文件:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: pc-cronjob
  namespace: dev
  labels:
    controller: cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    metadata:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox:1.30
            command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"]
需要重点解释的几个选项:
schedule: cron表达式,用于指定任务的执行时间
    */1    *      *    *     *
    <分钟> <小时> <日> <月份> <星期>

    分钟 值从 0 到 59.
    小时 值从 0 到 23.
    日 值从 1 到 31.
    月 值从 1 到 12.
    星期 值从 0 到 6, 0 代表星期日
    多个时间可以用逗号隔开; 范围可以用连字符给出;*可以作为通配符; /表示每...
concurrencyPolicy:
    Allow:   允许Jobs并发运行(默认)
    Forbid:  禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行
    Replace: 替换,取消当前正在运行的作业并用新作业替换它

 3、CronJob(CJ)实例

创建pc-cronjob.yaml,内容如下:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: pc-cronjob
  namespace: dev
  labels:
    controller: cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    metadata:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox:1.30
            command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"]

上面任务设置的是1分钟执行一次

# 创建
[root@k8s-master ~]# kubectl apply -f pc-cronjob.yaml
cronjob.batch/pc-cronjob created
[root@k8s-master ~]#
[root@k8s-master ~]#

# 查看
[root@k8s-master ~]# kubectl get cronjobs -n dev
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
pc-cronjob   */1 * * * *   False     1        13s             17s
[root@k8s-master ~]#
[root@k8s-master ~]#

# 查看job
[root@k8s-master ~]# kubectl get jobs -n dev -w
NAME                  COMPLETIONS   DURATION   AGE
pc-cronjob-27874617   1/1           30s        66s
pc-cronjob-27874618   0/1           6s         6s
pc-cronjob-27874618   0/1           29s        29s
pc-cronjob-27874618   0/1           30s        30s
pc-cronjob-27874618   1/1           30s        30s
pc-cronjob-27874619   0/1                      0s
pc-cronjob-27874619   0/1           0s         0s
pc-cronjob-27874619   0/1           2s         2s
pc-cronjob-27874619   0/1           29s        29s
pc-cronjob-27874619   0/1           30s        30s
pc-cronjob-27874619   1/1           30s        30s

# 删除
[root@k8s-master ~]# kubectl delete -f pc-cronjob.yaml
cronjob.batch "pc-cronjob" deleted

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84213.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!