CronJob

简要概述

staging/src/k8s.io/api/batch/v1/types.go

查看官方介绍

常用指令

TODO;

配置示例

  • 通过 kubectl 创建
kubectl create cronjob pi \
	--image=registry.cn-hangzhou.aliyuncs.com/kube-image-repo/busybox:1.35.0 \
	--schedule='0/5 * * * ?' \
	--dry-run=client \
	-o yaml \
	-- /bin/sh -c "echo helllo; sleep 5; echo world"
  • 通过 yaml 创建
apiVersion: batch/v1
kind: CronJob
metadata:
  creationTimestamp: null
  name: pi
spec:
  jobTemplate:
    metadata:
      creationTimestamp: null
      name: pi
    spec:
      template:
        metadata:
          creationTimestamp: null
        spec:
          containers:
          - command:
            - /bin/sh
            - -c
            - echo helllo; sleep 5; echo world
            image: registry.cn-hangzhou.aliyuncs.com/kube-image-repo/busybox:1.35.0
            name: pi
            resources: {}
          restartPolicy: OnFailure
  schedule: 0/5 * * * ?
status: {}

数据结构

CronJob

// CronJob represents the configuration of a single cron job.
type CronJob struct {
    metav1.TypeMeta `json:",inline"`
    // Standard object's metadata.
    // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
    // +optional
    metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`

    // 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
    // +optional
    Spec CronJobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`

    // Current status of a cron job.
    // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
    // +optional
    Status CronJobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
}

CronJobSpec

// CronJobSpec describes how the job execution will look like and when it will actually run.
type CronJobSpec struct {

    // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.
    Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"`

    // Optional deadline in seconds for starting the job if it misses scheduled
    // time for any reason.  Missed jobs executions will be counted as failed ones.
    // +optional
    StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,2,opt,name=startingDeadlineSeconds"`

    // Specifies how to treat concurrent executions of a Job.
    // Valid values are:
    // - "Allow" (default): allows CronJobs to run concurrently;
    // - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet;
    // - "Replace": cancels currently running job and replaces it with a new one
    // +optional
    ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,3,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"`

    // This flag tells the controller to suspend subsequent executions, it does
    // not apply to already started executions.  Defaults to false.
    // +optional
    Suspend *bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"`

    // Specifies the job that will be created when executing a CronJob.
    JobTemplate JobTemplateSpec `json:"jobTemplate" protobuf:"bytes,5,opt,name=jobTemplate"`

    // The number of successful finished jobs to retain. Value must be non-negative integer.
    // Defaults to 3.
    // +optional
    SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,6,opt,name=successfulJobsHistoryLimit"`

    // The number of failed finished jobs to retain. Value must be non-negative integer.
    // Defaults to 1.
    // +optional
    FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=failedJobsHistoryLimit"`
}

ConcurrencyPolicy

// ConcurrencyPolicy describes how the job will be handled.
// Only one of the following concurrent policies may be specified.
// If none of the following policies is specified, the default one
// is AllowConcurrent.
type ConcurrencyPolicy string

const (
    // AllowConcurrent allows CronJobs to run concurrently.
    AllowConcurrent ConcurrencyPolicy = "Allow"

    // ForbidConcurrent forbids concurrent runs, skipping next run if previous
    // hasn't finished yet.
    ForbidConcurrent ConcurrencyPolicy = "Forbid"

    // ReplaceConcurrent cancels currently running job and replaces it with a new one.
    ReplaceConcurrent ConcurrencyPolicy = "Replace"
)

JobTemplateSpec

// JobTemplateSpec describes the data a Job should have when created from a template
type JobTemplateSpec struct {
    // Standard object's metadata of the jobs created from this template.
    // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
    // +optional
    metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`

    // Specification of the desired behavior of the job.
    // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
    // +optional
    Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
}

JobSpec

参考 Job 资源。

CronJobStatus

// CronJobStatus represents the current state of a cron job.
type CronJobStatus struct {
    // A list of pointers to currently running jobs.
    // +optional
    // +listType=atomic
    Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"`

    // Information when was the last time the job was successfully scheduled.
    // +optional
    LastScheduleTime *metav1.Time `json:"lastScheduleTime,omitempty" protobuf:"bytes,4,opt,name=lastScheduleTime"`

    // Information when was the last time the job successfully completed.
    // +optional
    LastSuccessfulTime *metav1.Time `json:"lastSuccessfulTime,omitempty" protobuf:"bytes,5,opt,name=lastSuccessfulTime"`
}

v1.ObjectReference

TODO;