跳到主要内容

14、Kubernetes - 实战:Pod 控制器 CronJob相关命令

一、环境安装

参考

MiniKube方式部署

KubeAdm方式部署

Kind方式部署

二、CronJob介绍

cronjob是管理job,也就是每一个周期创建一个job去执行任务,一次只能管理一个job。

cronjob其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和Linux中的crontab就非常类似了。
一个cronjob对象其实就对应crontab文件中的一行,它根据配置的时间格式周期性地运行一个Job,格式和crontab也是一样的。

查看Job官方帮助

kubectl explain cronjob
KIND:     CronJob
VERSION:  batch/v1

DESCRIPTION:
     CronJob represents the configuration of a single cron job.

FIELDS:
   apiVersion   <string>
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

   kind <string>
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

   metadata     <Object>
     Standard object's metadata. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

   spec <Object>
     Specification of the desired behavior of a cron job, including the
     schedule. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

   status       <Object>
     Current status of a cron job. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

三、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

pc-cronjob.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"]

1 创建CronJob

kubectl create -f pc-cronjob.yml

2 查看 CronJob

kubectl get cronjob -n dev

 

3 查看Pod

kubectl get cronjob -n dev

 

4 删除 CronJob

kubectl delete -f pc-cronjob.yml