您已设置schedule: "* * * * *"
这意味着,每分钟都会创建工作。
concurrencyPolicy:“禁止”按描述工作。
cron 作业不允许并发运行;如果是运行新作业的时间并且之前的作业运行尚未完成,则 cron 作业会跳过新作业运行
意思是,如果仍有未完成的工作,则不允许创建新工作。如果工作已完成,则concurrencyPolicy
允许创建另一个。它不允许运行 2 个未完成的作业。
activeDeadlineSeconds:
根据Kubernetes 文档
无论创建了多少 Pod,activeDeadlineSeconds 都适用于作业的持续时间。一旦 Job 达到 activeDeadlineSeconds,其所有正在运行的 Pod 都将终止,并且 Job 状态将变为 type: Failed with reason: DeadlineExceeded。
也如Jobs cleanup policy中所述。
如果 Job 由更高级别的控制器直接管理,例如 CronJobs,则可以由 CronJobs 根据指定的基于容量的清理策略来清理 Job。
为了测试我使用busybox
了sleep 20
命令,因为我不知道你的工作在做什么。
意思是,如果您保留默认设置
spec:
failedJobsHistoryLimit: 3
successfulJobsHistoryLimit: 1
它将保留successful
工作直到创建下一个工作,如果您想检查日志等,它将保留一段时间。
$ kubectl get cronjob,job,pod
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all * * * * * False 1 17s 51s
NAME COMPLETIONS DURATION AGE
job.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018780 0/1 14s 14s
NAME READY STATUS RESTARTS AGE
pod/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018h9pnh 1/1 Running 0 13s
---
$ kubectl get cronjob,job,pod
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all * * * * * False 1 33s 2m7s
NAME COMPLETIONS DURATION AGE
job.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018780 1/1 23s 90s
job.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018840 1/1 21s 29s
NAME READY STATUS RESTARTS AGE
pod/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018h9pnh 0/1 Completed 0 89s
pod/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018k7b58 0/1 Completed 0 29s
---
$ kubectl get cronjob,job,pod
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all * * * * * False 0 34s 2m8s
NAME COMPLETIONS DURATION AGE
job.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018840 1/1 21s 30s
NAME READY STATUS RESTARTS AGE
pod/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018k7b58 0/1 Completed 0 30s
但是,如果您将设置successfulJobsHistoryLimit
为 0,它将在一段时间后删除作业,甚至在下一个预定作业之前。
spec:
failedJobsHistoryLimit: 3
successfulJobsHistoryLimit: 0
输出:
$ kubectl get cronjob,job,pod
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all * * * * * False 1 18s 31s
NAME COMPLETIONS DURATION AGE
job.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018540 0/1 15s 15s
NAME READY STATUS RESTARTS AGE
pod/etl-table-feed-from-schema-vtex-to-schema-sale-all-15930182r5bn 1/1 Running 0 15s
---
$ kubectl get cronjob,job,pod
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all * * * * * False 1 31s 44s
NAME COMPLETIONS DURATION AGE
job.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all-1593018540 1/1 22s 28s
NAME READY STATUS RESTARTS AGE
pod/etl-table-feed-from-schema-vtex-to-schema-sale-all-15930182r5bn 0/1 Completed 0 28s
---
$ kubectl get cronjob,job,pod
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/etl-table-feed-from-schema-vtex-to-schema-sale-all * * * * * False 0 34s 47s
这个时间也取决于工作持续时间。
此外,如果作业成功完成(退出代码 0),则 pod 将状态更改为已完成,它将不再使用 cpu/内存资源。
您还可以阅读有关TTL Mechanism的信息,但不幸的是,我认为它不会在这里工作,因为 Master 由 google 管理,并且此功能需要在Kubelet Feature Gates
.