当前位置: 首页 > news >正文

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

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任务

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

相关文章:

  • 内网电脑做网站/安徽百度seo公司
  • wordpress二级分类别名重名/长沙网站制作推广
  • 网站推广论坛/正规电商培训班
  • 老司机做爰网站/seo搜索引擎优化是什么
  • 做接口的网站/seo网站推广优化论文
  • 购物网站推广方案/湖南seo优化报价
  • 【论文阅读】CenterNet
  • ElasticSearch 中 should 设定优先级
  • Spring入门-SpringAOP详解
  • Vue生命周期,总也学不会,所以我详细整理了一下
  • Allegro如何快速把Class高亮成不同的颜色操作指导
  • 领导视角-设计篇
  • LinuxDeployQT打包QT程序
  • 【爪洼岛冒险记】第4站:Java中如何进行控制台输入输出?用Java实现猜数字小游戏;超详细讲解Java中的方法:方法的重载,方法的签名
  • 【AcWing周赛】AcWing第86场周赛
  • 一个人,一座城,你到底在乎什么?Python 爬虫告诉你!
  • 神奇的HTML系列专栏总目录
  • NET餐厅管理系统前端js-dwz.dialog改变原始层的大小