kubernetes之crontab
k8s的学习之crontab
CronJob 创建基于时隔重复调度的Jobs,CronJob 用于执行周期性的动作,例如备份、报告生成等。CronJob 仅负责创建与其调度时间相匹配的 Job,而 Job 又负责管理其代表的 Pod。
为 CronJob 资源创建清单时,请确保所提供的名称是一个合法的DNS域名。 名称不能超过 52 个字符。 这是因为 CronJob 控制器将自动在提供的 Job 名称后附加 11 个字符,并且存在一个限制, 即 Job 名称的最大长度不能超过 63 个字符。
Cron 时间表语法
分-时-天-月-周
# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
例如:下面这行指出必须在每个星期五的午夜以及每个月 13 号的午夜开始任务:
0 0 13 * 5
时区
对于没有指定时区的 CronJob,kube-controller-manager 基于本地时区解释排期表
如果启用了 CronJobTimeZone,
启用该特性后,你可以将 spec.timeZone
设置为有效时区名称。 例如,设置 spec.timeZone: "Etc/UTC"
指示 Kubernetes 采用 UTC 来解释排期表。
从 Kubernetes v1.21 版本开始,CronJob 控制器的第二个版本被用作默认实现。 要禁用此默认 CronJob 控制器而使用原来的 CronJob 控制器,请在 kube-controller-manager 中设置特性门控 CronJobControllerV2
,将此标志设置为 false
示例
1.命令行创建crontab
kubectl run hello-crontab --schedule="*/2 * * * *" --restart= OnFailuer --image=nginx --image-pull-policy=IfNotPresent -- /bin/sh -c "date"
输出:
Flag --schedule has been deprecated, has no effect and will be removed in the future.
pod/hello-crontab created
2.通过yaml文件创建
apiVersion: batch/v1
kind: CronJob
metadata:
labels:
run: hello
name: hello-cronjob
namespace: default
spec:
concurrencyPolicy: Allow
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
spec:
template:
metadata:
labels:
run: hello
spec:
containers:
- args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
image: registry.cn-beijing.aliyuncs.com/dotbalo/busybox
imagePullPolicy: Always
name: hello
resources: {}
restartPolicy: OnFailure
securityContext: {}
schedule: '*/1 * * * *'
successfulJobsHistoryLimit: 3
suspend: false
重点参数解析
apiVersion: batch/v1beta1 #1.21+ batch/v1
schedule:调度周期,和Linux一致,分别是分时日月周。
restartPolicy:重启策略,和Pod一致,有Always,OnFailure,Never。
concurrencyPolicy:并发调度策略。可选参数如下:
Allow:允许同时运行多个任务。
Forbid:不允许并发运行,如果之前的任务尚未完成,新的任务不会被创建。
Replace:如果之前的任务尚未完成,新的任务会替换的之前的任务。
suspend:如果设置为true,则暂停后续的任务,默认为false。
successfulJobsHistoryLimit:保留多少已完成的任务,按需配置。
failedJobsHistoryLimit:保留多少失败的任务。
startingDeadlineSeconds 200 控制器会统计从 startingDeadlineSeconds 设置的值到现在而不是从上一个计划时间到现在错过了多少次 Job
结果
[root@k8s-master1 crontab]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello-cronjob */1 * * * * False 0 <none> 11s
[root@k8s-master1 crontab]# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-cronjob-1662173580 1/1 4s 3m1s
hello-cronjob-1662173640 1/1 4s 2m1s
hello-cronjob-1662173700 1/1 3s 61s
hello-cronjob-1662173760 0/1 0s 0s
[root@k8s-master1 crontab]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 4317 179d
dapi-test-pod 0/1 Completed 0 137d
hello-cronjob-1662173640-md8hf 0/1 Completed 0 3m2s
hello-cronjob-1662173700-k7tpg 0/1 Completed 0 2m1s
hello-cronjob-1662173760-lxnbj 0/1 Completed 0 61s
hello-cronjob-1662173820-phtwj 0/1 ContainerCreating 0 1s
SCHEDULE:是指其调度的时间点
SUSPEND:表示后续任务是否处于挂起状态,即暂停任务的调度和运行
ACTIVE:表示活动状态的Job对象的数量
LAST SCHEDULE:表示上次调度运行至此刻的时长
更多推荐
所有评论(0)