Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker DevOps


Kubernetes Pod 控制器 CronJob

Kubernetes 大约 2731 字

概念

CronJob控制器以Job控制器资源为其管控对象,并借助它管理Pod资源对象

特点

CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点重复运行的方式。

CronJob可以在特定的时间点(反复的)去运行job任务

查看帮助

kubectl explain CronJob

完整配置

apiVersion: batch/v1beta1 # 版本号
kind: CronJob # 类型       
metadata: # 元数据
  name: # CronJob 名称 
  namespace: # 所属命名空间 
  labels: # 标签
    controller: cronjob
spec: # 详情描述
  schedule: # cron 格式的作业调度运行时间点,用于控制任务在什么时间执行
  concurrencyPolicy: # 并发执行策略,用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业
  failedJobHistoryLimit: # 为失败的任务执行保留的历史记录数,默认为 1
  successfulJobHistoryLimit: # 为成功的任务执行保留的历史记录数,默认为 3
  startingDeadlineSeconds: # 启动作业错误的超时时长
  jobTemplate: # job 控制器模板,用于为 CronJob 控制器生成 job 对象;下面其实就是 job 的定义
    metadata:
    spec:
      completions: 1
      parallelism: 1
      activeDeadlineSeconds: 30
      backoffLimit: 6
      manualSelector: true
      selector:
        matchLabels:
          app: counter-pod
        matchExpressions: 规则
          - {key: app, operator: In, values: [counter-pod]}
      template:
        metadata:
          labels:
            app: counter-pod
        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 20;done"]

需要重点解释的几个选项:

schedulecron表达式,用于指定任务的执行时间

    */1    *      *    *     *
    <分钟> <小时> <日> <月份> <星期>

    分钟 值从 0 到 59.
    小时 值从 0 到 23.
    日 值从 1 到 31.
    月 值从 1 到 12.
    星期 值从 0 到 6, 0 代表星期日
    多个时间可以用逗号隔开,范围可以用连字符给出;* 可以作为通配符,/ 表示每...

concurrencyPolicy:

  • Allow:允许Jobs并发运行(默认)
  • Forbid:禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行
  • Replace:替换,取消当前正在运行的作业并用新作业替换它

示例 yml

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"]

查看 CronJob

kubectl get cronjobs -n dev

输出:

[root@localhost ~]# kubectl get cronjobs -n dev
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
pc-cronjob   */1 * * * *   False     1        4s              12s

查看 Job

kubectl get jobs -n dev

输出:

NAME                  COMPLETIONS   DURATION   AGE
pc-cronjob-27396626   1/1           29s        39s

查看 Pod

kubectl get pods -n dev

输出:

[root@localhost ~]# kubectl get pods -n dev
NAME                        READY   STATUS      RESTARTS   AGE
pc-cronjob-27396626-pzktx   0/1     Completed   0          96s
pc-cronjob-27396627-fktdr   0/1     Completed   0          36s

删除 CronJob

kubectl delete -f pc-cronjob.yml
阅读 348 · 发布于 2022-03-15

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批