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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s