Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Cronjob(CJ)

Posted 无糖可乐没有灵魂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Cronjob(CJ)相关的知识,希望对你有一定的参考价值。

文章目录

1、基本概念与控制器特点


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

2、资源配置清单


参数查询方法:

[root@master ~]# kubectl explain cronjob

参数汇总梳理:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: pc-cronjob
  namespace: dev
  labels:
    controller: cronjob 
spec:
  schedule:                             #cron格式的作业调度运行时间点,用于控制任务在什么时间执行
  concurrencyPolicy:                    #并发执行策略,用于定义前一次作业运行尚未完成时是否或如何运行下一次的任务
  faliedJobHistoryLimit:                #失败的任务执行保留的历史记录,默认为1
  successfulJobHistoryLimit:            #成功的任务执行保留的历史记录,默认为3
  startingDeadlineSeconds:              #启动作业错误的超时时间
  jobTemplate:                          #job控制器模板,用于cronjob控制器生成job对象
    metadata:
    spec:
      completions: 6                    #指定job需要成功运行Pod的次数,默认值为1
      parallelism: 3                    #指定job在任一时刻应该并发运行pod的数量,默认值为1
      activeDeadlineSeconds: 30         #指定job可运行的时间期限,超过时间未结束系统会尝试终止
      backoffLimit: 6                   #指定job失败后进行重试的次数,默认为6
      manualSelector: true              #是否可以使用selector选择器选择pod,默认为false
      selector:                         #pod选择器,指定控制那些pod
        matchLabels:
          app: count-pod 
        matchExpressions:
        - key: "app"
          operator: In 
          values: ["nginx-pod"]
      template:                         #模板,当副本数量不足时,会根据以下配置创建副本
        metadata:
          labels:
            app: counter-pod
        spec:
          restartPolicy: Never          #重启策略,支持Nerver或OnFailure
          containers:
          - name: counter
            image: busybox:latest
            command: ["/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 2;done"]

Cron表达式点击此处跳转到更详细的Crontab资料

用于指定任务的执行时间;
schedule: "*/1 * * * *"
<分钟> <小时> <> <> <星期> 
#*为通配符;*/1代表每分钟
#每小时、每日、每月、每星期...以此类推

并发执行策略

  • Allow:允许Job并发运行,默认选项;
  • Forbid:禁止并发运行,如果上一次任务未完成,则直接跳过下一次任务;
  • Replace:替换,取消当前正在运行的任务并用新任务代替它;

3、创建控制器


实验内容:每分钟执行一次Job任务,此实验建议开启三个终端,第一个终端执行调用文件命令,第二个终端监控Job控制器,第三个终端监控Pod;

#创建YAML文件
[root@master ~]# cat pc-cronjob.yaml 
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:latest
            command: ["/bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 2;done"]
#调用YAML文件
[root@master ~]# kubectl apply -f pc-cronjob.yaml 
cronjob.batch/pc-cronjob created

#查看Cronjob控制器
[root@master ~]# kubectl get cronjob -n dev
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
pc-cronjob   */1 * * * *   False     1        5s              62s

#监控Job控制器
[root@master ~]# kubectl get job -n dev -w
NAME                  COMPLETIONS   DURATION   AGE
pc-cronjob-27359499   0/1                      0s
pc-cronjob-27359499   0/1           0s         0s
pc-cronjob-27359499   0/1           35s        35s
pc-cronjob-27359499   1/1           35s        35s
#第一次执行Job任务结束
pc-cronjob-27359500   0/1                      0s
pc-cronjob-27359500   0/1           0s         0s
pc-cronjob-27359500   0/1           35s        35s
pc-cronjob-27359500   1/1           35s        35s
#第二次执行Job任务结束

#监控Pod
[root@master ~]# kubectl get pod -n dev -w 
NAME                        READY   STATUS    RESTARTS   AGE
pc-cronjob-27359499-vqnbx   0/1     Pending   0          0s
pc-cronjob-27359499-vqnbx   0/1     Pending   0          0s
pc-cronjob-27359499-vqnbx   0/1     ContainerCreating   0          0s
pc-cronjob-27359499-vqnbx   0/1     ContainerCreating   0          1s
pc-cronjob-27359499-vqnbx   1/1     Running             0          17s
pc-cronjob-27359499-vqnbx   0/1     Completed           0          35s
pc-cronjob-27359499-vqnbx   0/1     Completed           0          35s
pc-cronjob-27359499-vqnbx   0/1     Completed           0          35s
#第一次执行Job任务的Pod完成
pc-cronjob-27359500-jhw7d   0/1     Pending             0          0s
pc-cronjob-27359500-jhw7d   0/1     Pending             0          0s
pc-cronjob-27359500-jhw7d   0/1     ContainerCreating   0          0s
pc-cronjob-27359500-jhw7d   0/1     ContainerCreating   0          1s
pc-cronjob-27359500-jhw7d   1/1     Running             0          17s
pc-cronjob-27359500-jhw7d   0/1     Completed           0          35s
pc-cronjob-27359500-jhw7d   0/1     Completed           0          35s
pc-cronjob-27359500-jhw7d   0/1     Completed           0          35s
##第二次执行Job任务的Pod完成

4、删除控制器


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

以上是关于Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Cronjob(CJ)的主要内容,如果未能解决你的问题,请参考以下文章

Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法

Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法

Docker&Kubernetes ❀ Kubernetes集群实践与部署笔记知识点梳理

Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理

Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Job

Docker&Kubernetes ❀ Kubernetes集群Service资源配置清单